Paparazzi UAS  v5.18.0_stable
Paparazzi is a free software Unmanned Aircraft System.
distributed_circular_formation module

Distributed algorithm for circular formations with air-to-air communications.

For more details we refer to https://wiki.paparazziuav.org/wiki/Module/guidance_vector_field

Example for airframe file

Add to your firmware section:

<module name="distributed_circular_formation"/>

Module configuration options

Airframe file section

  • section name: Parameters prefix: DCF_
    • name MAX_NEIGHBORS value: 4
      Description: Maximum number of accepted neighbors for an aircraft
    • name GAIN_K value: 10
      Description: Control gain for the algorithm. It sets the possible maximum and minimum radius of the circle to be tracked
    • name RADIUS value: 80
      Description: Radius for the desired steady-state circle
    • name TIMEOUT value: 1500
      Description: After this time (in ms) if we do not have any msg from a neighborh, we ignore it
    • name BROAD_TIME value: 200
      Description: Time in ms for transmiting theta to your neighbors

Module functions

Init Functions

These initialization functions are called once on startup.

Datalink Functions

Whenever the specified datalink message is received, the corresponing handler function is called.

  • on message DCF_REG_TABLE call parseRegTable(buf)
  • on message DCF_THETA call parseThetaTable(buf)

Files

Header Files

The following headers are automatically included in modules.h

Source Files

Raw distributed_circular_formation.xml file:

<!DOCTYPE module SYSTEM "module.dtd">
<module name="distributed_circular_formation" dir="multi/dcf">
<doc>
<description>Distributed algorithm for circular formations with air-to-air communications.
For more details we refer to https://wiki.paparazziuav.org/wiki/Module/guidance_vector_field
</description>
<section name="Parameters" prefix="DCF_">
<define name="MAX_NEIGHBORS" value="4" description="Maximum number of accepted neighbors for an aircraft"/>
<define name="GAIN_K" value="10" description="Control gain for the algorithm. It sets the possible maximum and minimum radius of the circle to be tracked"/>
<define name="RADIUS" value="80" description="Radius for the desired steady-state circle"/>
<define name="TIMEOUT" value="1500" description="After this time (in ms) if we do not have any msg from a neighborh, we ignore it"/>
<define name="BROAD_TIME" value="200" description="Time in ms for transmiting theta to your neighbors"/>
</section>
</doc>
<settings name="DCF">
<dl_settings>
<dl_settings NAME="DCF">
<dl_settings NAME="Control">
<dl_setting MAX="20" MIN="0" STEP="0.2" VAR="dcf_control.k" shortname = "Gain" param="DCF_GAIN_K"/>
<dl_setting MAX="200" MIN="0" STEP="1" VAR="dcf_control.radius" shortname = "Radius" param="DCF_RADIUS"/>
<dl_setting MAX="5000" MIN="0" STEP="1" VAR="dcf_control.timeout" shortname = "Timeout" param="DCF_TIMEOUT"/>
<dl_setting MAX="1000" MIN="0" STEP="1" VAR="dcf_control.broadtime" shortname = "Broadcasting" param="DCF_BROAD_TIME"/>
</dl_settings>
</dl_settings>
</dl_settings>
</settings>
<dep>
<depends>gvf_module</depends>
</dep>
<header>
<file name="dcf.h"/>
</header>
<init fun="dcf_init()"/>
<datalink message="DCF_REG_TABLE" fun="parseRegTable(buf)"/>
<datalink message="DCF_THETA" fun="parseThetaTable(buf)"/>
<makefile firmware="fixedwing">
<file name="dcf.c"/>
</makefile>
</module>