MultiUAV
WARNING: the functionalities described in this section are experimental and have never been fully tested. Use with care !
TCAS
Principle
The TCAS (Traffic Collision Avoidance System) is used on civil aircraft to reduce the incidence of mid-air collisions. The principle is to monitor the airspace around the aircraft, warn the pilot and provide conflict resolution indication. For the Paparazzi system, a light version of a TCAS-inspired system has been implemented. It can send warning to the ground station and if nothing is done, it takes control of the vertical loop in order to have a minimum vertical separation. This TCAS monitors all the aircrafts based on the traffic information send by the Server and it resolve conflicts only with one aircraft at a time.
When the system detects a possible collision, the TCAS logic follows the rules:
- if other_AC_alt > AC_alt + alt_limit then the AC goes down (alt_setpoint = MIN(nav_alt, other_AC_alt - alt_limit))
- if other_AC_alt < AC_alt - alt_limit then the AC goes up (alt_setpoint = MAX(nav_alt, other_AC_alt + alt_limit))
- else the AC with the smallest ID goes down
- alt_setpoint is bounded by (ground_alt + security_height)
The control of the TCAS will be active until the conflict is solved, no longer exist or a timeout occurs.
On top of this, the resolution is sent to the conflicting UAV (relayed by the ground). In case of conflict on the first resolution (ex: the 2 UAVs are climbing), one of them will decide to change its decision.
Activate TCAS service
The ¨traffic_info¨ service must be activated with a specific TCAS compile flag; TRAFFIC_INFO This service is activated by default for fixed wing aircraft and is not implemented yet on rotorcraft.
The TCAS is activated by loading the appropriate module in the modules section (see Modules page):
<module name="tcas.xml"/>
Note that:
- The TCAS system is operational only in AUTO2 and in altitude mode.
- The system is inhibited under the security height.
Configuration
Add a Configuration block like this in all your airframe configuration XML document
<section name="TCAS" prefix="TCAS_">
<define name="TAU_TA" value="10." unit="s"/> <!-- Traffic Advisory -->
<define name="TAU_RA" value="6." unit="s"/> <!-- Resolution Advisory -->
<define name="ALIM" value="15." unit="m"/> <!-- Altitude LIMit -->
<define name="DMOD" value="10." unit="m"/> <!-- Distance MODification -->
<define name="DT_MAX" value="2000" unit="ms"/> <!-- DelTa MAXimum of lost comms or timeout -->
</section>
Explanation of parameters:
- TAU_TA: traffic advisory in second. A warning message is send to the ground and displayed in the alert page of the GCS if the estimated time before a collision is below TAU_TA. Default = 2*CARROT.
- TAU_RA: resolution advisory in second. A warning message is send to the ground (+ display in GCS) and the system takes control over the altitude setpoint of the vertical loop if the estimated time before a collision is below TAU_RA. Default = CARROT.
- ALIM: altitude limit in meters. The minimum vertical separation between two aircraft. Default = 10.
- DMOD: distance modification in meters. The distance below which RA are triggered (avoid to have two aircraft getting really close because their relative speed is too small to trigger alarms). Default = 10.
- DT_MAX: lost comm or timeout in ms. Timeout to interrupt a TA or an RA if data are not received. Default = 1500.
Formation Flight
A basic formation flight control can be activated by load the appropriate module
<load name="formation_flight.xml"/>
This service can be used together with the TCAS service (unless you are very confident with your control gains...)
Configuration
<section name="FORMATION" prefix="FORM_">
<define name="CARROT" value="3." unit="s"/> <!-- carrot distance for followers -->
<define name="POS_PGAIN" value="0.02"/> <!-- coef on position error -->
<define name="SPEED_PGAIN" value="0.4"/> <!-- coef on speed error -->
<define name="COURSE_PGAIN" value="0.8"/> <!-- coef on course error (override course pgain for followers) -->
<define name="ALTITUDE_PGAIN" value="0.1"/> <!-- coef on altitude error -->
<define name="PROX" value="60." unit="m"/> <!-- proximity distance -->
<define name="MODE" value="0"/> <!-- mode 0 = global, 1 = local -->
</section>
- CARROT: Default = 0.
- POS_PGAIN: Default = 0.
- SPEED_PGAIN: Default = 0.
- COURSE_PGAIN: UNUSED
- ALTITUDE_PGAIN: Default = 0.
- PROX: only A/C at the same level are taken into account. Default = 20.
- MODE: positions are global (earth frame) or local (leader frame). Default = GLOBAL
Settings
A setting file can be added to change dynamically the above parameters: conf/settings/formation.xml
<dl_settings name="formation">
<dl_setting MAX="24" MIN="0" STEP="1" VAR="leader_id" module="multi/formation"/>
<dl_setting MAX="1" MIN="0" STEP="0.01" VAR="coef_form_pos" module="multi/formation"/>
<dl_setting MAX="1" MIN="0" STEP="0.01" VAR="coef_form_speed" module="multi/formation"/>
<dl_setting MAX="1" MIN="0" STEP="0.01" VAR="coef_form_course" module="multi/formation"/>
<dl_setting MAX="1" MIN="0" STEP="0.01" VAR="coef_form_alt" module="multi/formation"/>
<dl_setting MAX="1" MIN="0" STEP="1" VAR="form_mode" module="multi/formation" values="GLOBAL|LOCAL"/>
</dl_settings>
Flight plan
The formation flight service is used with proper function calls in the flight plan. Examples can be found in conf/flight_plans/form_leader.xml and conf/flight_plans/form_follow.xml
The leader is in charge of the global trajectory of the formation, while the followers are only following the leader.