Difference between revisions of "Module/collective tracking control"

From PaparazziUAV
Jump to navigation Jump to search
Line 65: Line 65:
</source>
</source>


You need to define the neighboring relations of the aircraft. To do so, we need to set an internal table by sending a series of commands with the help of the Python script ./PAPARAZZI_HOME/sw/ground_segment/python/collective_tracking_control/ctc_init.py . You must pass two arguments, the first one is an integer with the ID of the target, the second one a .txt file with the IDs of the rest of the aircraft.
You need to define the neighboring relations of the aircraft. To do so, after you power up all the autopilots, you need to set an internal table by sending a series of commands with the help of the Python script ./PAPARAZZI_HOME/sw/ground_segment/python/collective_tracking_control/ctc_init.py . You must pass two arguments, the first one is an integer with the ID of the target, the second one a .txt file with the IDs of the rest of the aircraft.


== Tuning the gains, Python Simulation ==
== Tuning the gains, Python Simulation ==
Line 75: Line 75:
== WARNING ==
== WARNING ==


This algorithm commands roll angles for the aircraft and '''NO''' waypoints. If one aircraft stop receiving information from the other aircraft, then it will not update its roll angle and it might continue flying straight. Be sure to set safety measurements in your flight plan, for example:
This algorithm commands roll angles for the aircraft and '''NO''' waypoints. If one aircraft stops receiving information from the other aircraft, then it will not update its roll angle and it might continue flying straight. Be sure to set safety measurements in your flight plan, for example:


<source lang="html">
<source lang="html">

Revision as of 04:52, 29 October 2019

Introduction

This module/algorithm allows a team of aircraft (they can fly at different speeds) to track a (possibly moving) target. In particular, the centroid of the team converges to the target as it is shown in the following screenshots

Ctc mission.png

Custom messages

The module needs all-to-all communication (including the target). The following messages need to be included in your messages.xml.

These messages go in the telemetry section of messages.xml. The CTC_CONTROL message is just for telemetry porpuses.

    <message name="CTC" id="37">
      <field name="table" type="int16[]"/>
    </message>

    <message name="CTC_INFO_FROM_TARGET" id="40">
      <field name="px" type="float"/>
      <field name="py" type="float"/>
      <field name="vx" type="float"/>
      <field name="vy" type="float"/>
    </message>

    <message name="CTC_CONTROL" id="211">
        <field name="v_centroid_x" type="float" unit="m"/>
	<field name="v_centroid_y" type="float" unit="m"/>
	<field name="target_vx" type="float" unit="m/s"/>
	<field name="target_vy" type="float" unit="m/s"/>
	<field name="target_px" type="float" unit="m"/>
	<field name="target_py" type="float" unit="m"/>
	<field name="ref_px" type="float" unit="m"/>
	<field name="ref_py" type="float" unit="m"/>
    </message>

    <message name="CTC_INFO_TO_NEI" id="255">
        <field name="vx" type="float"/>
        <field name="vy" type="float"/>
        <field name="px" type="float"/>
        <field name="py" type="float"/>
    </message>

These messages go in the datalink section of messages.xml. They are necessary to init the algorithm from the ground control station.

    <message name="CTC_REG_TABLE" id="160" link="forwarded">
        <field name="ac_id" type="uint8"/>
        <field name="nei_id" type="uint8"/>
    </message>

    <message name="CTC_CLEAN_TABLE" id="161" link="forwarded">
        <field name="ac_id" type="uint8"/>
    </message>

Usage

Add the module in your flightplan

  <modules>
    <module name="collective_tracking_control">
    </module>
  </modules>

You need to define the neighboring relations of the aircraft. To do so, after you power up all the autopilots, you need to set an internal table by sending a series of commands with the help of the Python script ./PAPARAZZI_HOME/sw/ground_segment/python/collective_tracking_control/ctc_init.py . You must pass two arguments, the first one is an integer with the ID of the target, the second one a .txt file with the IDs of the rest of the aircraft.

Tuning the gains, Python Simulation

The algorithm needs some parameters and gains to be set. The following Python simulation considers realistic orders of magnitude for distances and ground speeds. So you can try the gains and see the expected behavior of the algorithm before trying it in Paparazzi.

You can find the Python simulation at ./PAPARAZZI_HOME/sw/ground_segment/python/collective_tracking_control/ctc_simulation.py

WARNING

This algorithm commands roll angles for the aircraft and NO waypoints. If one aircraft stops receiving information from the other aircraft, then it will not update its roll angle and it might continue flying straight. Be sure to set safety measurements in your flight plan, for example:

<exceptions>
  <exception cond="dist2_to_home > (max_dist_from_home*max_dist_from_home)" deroute="STAND_BY"/>
</exceptions>