[nav] add adaptive navigation patterns

These patterns have been developped during an atmospheric science
project to track clouds in real-time based on sensor data.
The modifications includes:
- adding adaptive nav modules (lace, rosette, trinity, spiral_3D)
- new or improved meteo sensor modules (cloud sensor, meteostick)
- improvements to mission interface (UPDATE message, waiting patterns,
unique ID check)
- compact telemetry message MINIMAL_COM to reduce bandwidth (message
supported by server and logplotter)
- basic cloud simulation module (circle or polygon sector) and demo
flight plan

See for details:
Titouan Verdu, Gautier Hattenberger, Simon Lacroix. Flight patterns
  for clouds exploration with a fleet of UAVs. 2019 International
  Conference on Unmanned Aircraft Systems (ICUAS 2019), Jul 2019, Atlanta,
  United States. https://hal-enac.archives-ouvertes.fr/hal-02137839
This commit is contained in:
Gautier Hattenberger
2022-01-07 15:01:37 +01:00
parent c33d525f92
commit 321173fd32
43 changed files with 3117 additions and 137 deletions
+37
View File
@@ -0,0 +1,37 @@
<!DOCTYPE module SYSTEM "module.dtd">
<module name="cloud_sensor" dir="meteo">
<doc>
<description>
Get data from Cloud Sensor
- compute Liquid Water Content (LWC) value from PAYLOAD_FLOAT data
- get already computed LWC from PAYLOAD_COMMAND data
</description>
</doc>
<settings>
<dl_settings NAME="CloudSensor">
<dl_settings NAME="Cloud">
<dl_setting max="1000." min="0." step="0.1" var="cloud_sensor_calib_alpha" shortname="alpha" module="meteo/cloud_sensor"/>
<dl_setting max="60000." min="0." step="10." var="cloud_sensor_calib_beta" shortname="beta" module="meteo/cloud_sensor"/>
<dl_setting max="1000." min="1." step="0.1" var="cloud_sensor_channel_scale" shortname="scale" module="meteo/cloud_sensor"/>
<dl_setting MAX="2" MIN="0" STEP="1" VAR="cloud_sensor_compute_coef" shortname="coef type" module="meteo/cloud_sensor" values="NONE|SINGLE|ANGSTROM"/>
<dl_setting max="1000." min="0." step="1." var="cloud_sensor_threshold" shortname="threshold" module="meteo/cloud_sensor"/>
<dl_setting max="1000." min="0." step="1." var="cloud_sensor_hysteresis" shortname="hysteresis" module="meteo/cloud_sensor"/>
<dl_setting max="20000." min="0." step="0.1" var="cloud_sensor_background" shortname="background" module="meteo/cloud_sensor"/>
<dl_setting MAX="1" MIN="1" STEP="1" VAR="cloud_sensor_compute_background" shortname="compute background" module="meteo/cloud_sensor"/>
<dl_setting MAX="20." MIN="0." STEP="0.1" VAR="cloud_sensor_tau" shortname="tau" module="meteo/cloud_sensor" handler="update_tau"/>
</dl_settings>
</dl_settings>
</settings>
<header>
<file name="cloud_sensor.h"/>
</header>
<init fun="cloud_sensor_init()"/>
<periodic fun="cloud_sensor_report()" freq="2." autorun="TRUE"/>
<datalink message="PAYLOAD_COMMAND" fun="LWC_callback(buf)"/>
<datalink message="PAYLOAD_FLOAT" fun="cloud_sensor_callback(buf)"/>
<makefile>
<file name="cloud_sensor.c"/>
</makefile>
</module>
+26
View File
@@ -0,0 +1,26 @@
<!DOCTYPE module SYSTEM "module.dtd">
<module name="cloud_sim" dir="meteo">
<doc>
<description>Basic cloud simulation for testing adaptive navigation patterns</description>
</doc>
<settings>
<dl_settings>
<dl_settings name="Cloud Sim">
<dl_setting max="1" min="0" step="1" var="cloud_sim.mode" shortname="mode" values="WP|POLYGON"/>
<dl_setting max="10." min="-10." step="0.1" var="cloud_sim.speed.x" shortname="v east"/>
<dl_setting max="10." min="-10." step="0.1" var="cloud_sim.speed.y" shortname="v north"/>
<dl_setting max="1" min="1" step="1" var="cloud_sim.reset" shortname="reset" values="RESET" module="meteo/cloud_sim" handler="reset"/>
<dl_setting max="500" min="50" step="10." var="cloud_sim.radius" shortname="radius"/>
</dl_settings>
</dl_settings>
</settings>
<header>
<file name="cloud_sim.h"/>
</header>
<init fun="cloud_sim_init()"/>
<periodic fun="cloud_sim_detect()" freq="10.0" autorun="TRUE"/>
<periodic fun="cloud_sim_move()" freq="1.0" autorun="FALSE"/>
<makefile>
<file name="cloud_sim.c"/>
</makefile>
</module>
+4 -1
View File
@@ -25,7 +25,9 @@
<configure name="MS_EEPROM_SLAVE_IDX" value="X" description="Index of the SPI slave for calibration EEPROM"/>
<section name="METEO_STICK">
<define name="LOG_MS" value="TRUE|FALSE" description="Log data on SD card (ascii format, raw PTU data + GPS data)"/>
<define name="SEND_MS" value="TRUE|FALSE" description="Send data over telemetry (PAYLOAD_FLOAT message, scaled PTU data)"/>
<define name="LOG_MS_FLIGHTRECORDER" value="TRUE|FALSE" description="Log data on SD card (METEO_STICK message in binary format)"/>
<define name="MS_LOG_FILE" value="flightrecorder_sdlog" description="Log for binary format (only available with LOG_MS_FLIGHTRECORDER to TRUE)"/>
<define name="SEND_MS_SYNC" value="TRUE|FALSE" description="Send data over telemetry sync to reading (METEO_STICK message, scaled PTU data)"/>
<define name="USE_MS_EEPROM" value="TRUE|FALSE" description="Enable/disable usage of calibration data from EEPROM (default TRUE, set to FALSE if MS_EEPROM_SLAVE_IDX is not configured"/>
<define name="MS_PRESSURE_OFFSET" value="0." description="Offset of the absolute pressure sensor (only used if EEPROM is not used)"/>
<define name="MS_PRESSURE_SCALE" value="1." description="Scale factor of the absolute pressure sensor (only used if EEPROM is not used)"/>
@@ -52,6 +54,7 @@
</header>
<init fun="meteo_stick_init()"/>
<periodic fun="meteo_stick_periodic()" freq="10" autorun="TRUE"/>
<periodic fun="meteo_stick_report()" freq="1" autorun="TRUE"/>
<event fun="meteo_stick_event()"/>
<makefile target="ap">
<configure name="MS_SPI_DEV" case="upper|lower"/>
+5 -24
View File
@@ -3,33 +3,14 @@
<module name="mission_fw" dir="mission" task="control">
<doc>
<description>
Interface for mission control of fixed wing aircraft.
This module parse datalink commands for basic navigation routines
and store them in a queue.
Specific interface for mission control of fixed wing aircraft.
</description>
</doc>
<header>
<file name="mission_common.h"/>
</header>
<init fun="mission_init()"/>
<periodic fun="mission_status_report()" freq="2" autorun="TRUE"/>
<datalink message="MISSION_GOTO_WP" fun="mission_parse_GOTO_WP(buf)"/>
<datalink message="MISSION_GOTO_WP_LLA" fun="mission_parse_GOTO_WP_LLA(buf)"/>
<datalink message="MISSION_CIRCLE" fun="mission_parse_CIRCLE(buf)"/>
<datalink message="MISSION_CIRCLE_LLA" fun="mission_parse_CIRCLE_LLA(buf)"/>
<datalink message="MISSION_SEGMENT" fun="mission_parse_SEGMENT(buf)"/>
<datalink message="MISSION_SEGMENT_LLA" fun="mission_parse_SEGMENT_LLA(buf)"/>
<datalink message="MISSION_PATH" fun="mission_parse_PATH(buf)"/>
<datalink message="MISSION_PATH_LLA" fun="mission_parse_PATH_LLA(buf)"/>
<datalink message="MISSION_CUSTOM" fun="mission_parse_CUSTOM(buf)"/>
<datalink message="GOTO_MISSION" fun="mission_parse_GOTO_MISSION(buf)"/>
<datalink message="NEXT_MISSION" fun="mission_parse_NEXT_MISSION(buf)"/>
<datalink message="END_MISSION" fun="mission_parse_END_MISSION(buf)"/>
<dep>
<depends>mission_common</depends>
<provides>mission</provides>
</dep>
<makefile>
<define name="USE_MISSION"/>
<file name="mission_common.c"/>
<file name="mission_fw_nav.c"/>
<test firmware="fixedwing">
<define name="CTRL_TYPE_H" value="firmwares/fixedwing/guidance/guidance_v.h" type="string"/>
+5 -24
View File
@@ -3,33 +3,14 @@
<module name="mission_rotorcraft" dir="mission" task="control">
<doc>
<description>
Interface for mission control of rotorcraft.
This module parse datalink commands for basic navigation routines
and store them in a queue.
Specific interface for mission control of rotorcraft.
</description>
</doc>
<header>
<file name="mission_common.h"/>
</header>
<init fun="mission_init()"/>
<periodic fun="mission_status_report()" freq="2" autorun="TRUE"/>
<datalink message="MISSION_GOTO_WP" fun="mission_parse_GOTO_WP(buf)"/>
<datalink message="MISSION_GOTO_WP_LLA" fun="mission_parse_GOTO_WP_LLA(buf)"/>
<datalink message="MISSION_CIRCLE" fun="mission_parse_CIRCLE(buf)"/>
<datalink message="MISSION_CIRCLE_LLA" fun="mission_parse_CIRCLE_LLA(buf)"/>
<datalink message="MISSION_SEGMENT" fun="mission_parse_SEGMENT(buf)"/>
<datalink message="MISSION_SEGMENT_LLA" fun="mission_parse_SEGMENT_LLA(buf)"/>
<datalink message="MISSION_PATH" fun="mission_parse_PATH(buf)"/>
<datalink message="MISSION_PATH_LLA" fun="mission_parse_PATH_LLA(buf)"/>
<datalink message="MISSION_CUSTOM" fun="mission_parse_CUSTOM(buf)"/>
<datalink message="GOTO_MISSION" fun="mission_parse_GOTO_MISSION(buf)"/>
<datalink message="NEXT_MISSION" fun="mission_parse_NEXT_MISSION(buf)"/>
<datalink message="END_MISSION" fun="mission_parse_END_MISSION(buf)"/>
<dep>
<depends>mission_common</depends>
<provides>mission</provides>
</dep>
<makefile>
<define name="USE_MISSION"/>
<file name="mission_common.c"/>
<file name="mission_rotorcraft_nav.c"/>
<test firmware="rotorcraft">
<define name="DOWNLINK_TRANSPORT" value="pprz_tp"/>
+21
View File
@@ -0,0 +1,21 @@
<!DOCTYPE module SYSTEM "module.dtd">
<module name="nav_lace" dir="nav">
<doc>
<description>
Adaptive border pattern for cloud exploration
Can be used in mission mode with custom pattern and ID "LACE"
See:
Titouan Verdu, Gautier Hattenberger, Simon Lacroix. Flight patterns for clouds exploration with a fleet of UAVs. 2019 International Conference on Unmanned Aircraft Systems (ICUAS 2019), Jul 2019, Atlanta, United States.
https://hal-enac.archives-ouvertes.fr/hal-02137839
</description>
</doc>
<header>
<file name="nav_lace.h"/>
</header>
<init fun="nav_lace_init()"/>
<makefile target="ap|sim|nps|hitl">
<file name="nav_lace.c"/>
</makefile>
</module>
+1
View File
@@ -17,6 +17,7 @@
<header>
<file name="nav_line.h"/>
</header>
<init fun="nav_line_init()"/>
<makefile target="ap|sim|nps|hitl">
<file name="nav_line.c"/>
<test firmware="fixedwing">
+21
View File
@@ -0,0 +1,21 @@
<!DOCTYPE module SYSTEM "module.dtd">
<module name="nav_rosette" dir="nav">
<doc>
<description>
Adaptive flower pattern for cloud exploration
Can be used in mission mode with custom pattern and ID "RSTT"
See:
Titouan Verdu, Gautier Hattenberger, Simon Lacroix. Flight patterns for clouds exploration with a fleet of UAVs. 2019 International Conference on Unmanned Aircraft Systems (ICUAS 2019), Jul 2019, Atlanta, United States.
https://hal-enac.archives-ouvertes.fr/hal-02137839
</description>
</doc>
<header>
<file name="nav_rosette.h"/>
</header>
<init fun="nav_rosette_init()"/>
<makefile target="ap|sim|nps|hitl">
<file name="nav_rosette.c"/>
</makefile>
</module>
+32
View File
@@ -0,0 +1,32 @@
<!DOCTYPE module SYSTEM "module.dtd">
<module name="nav_spiral_3D" dir="nav">
<doc>
<description>
Fixedwing navigation in a 3D spiral.
creating a helix:
- start center (X, Y)
- start and stop altitude
- start and stop radius
- 3D speed of the circle
- in case alt diff is too small, vz is used as expension speed at constant altitude
- in case of radius diff too small, doing a constant radius circle
- if alt diff is too small, basic circle with horizontal speed (vz as no effect)
setup will fail if:
- alt diff and vz are not coherent
- vz is too small and not doing circle
</description>
<section name="NAV_SPIRAL_3D" prefix="NAV_SPIRAL_3D_">
<define name="DIST_DIFF" value="10." description="horizontal distance to start and stop pattern"/>
<define name="ALT_DIFF" value="10." description="vertical distance to start and stop pattern"/>
<define name="MIN_CIRCLE_RADIUS" value="60." description="minium circle radius in meters"/>
</section>
</doc>
<header>
<file name="nav_spiral_3D.h"/>
</header>
<init fun="nav_spiral_3D_init()"/>
<makefile target="ap|sim|nps|hitl">
<file name="nav_spiral_3D.c"/>
</makefile>
</module>
+22
View File
@@ -0,0 +1,22 @@
<!DOCTYPE module SYSTEM "module.dtd">
<module name="nav_trinity" dir="nav">
<doc>
<description>
Adaptive "trinity" pattern for cloud exploration
Can be used in mission mode with custom pattern and ID "TRNTY"
See:
Titouan Verdu, Gautier Hattenberger, Simon Lacroix. Flight patterns for clouds exploration with a fleet of UAVs. 2019 International Conference on Unmanned Aircraft Systems (ICUAS 2019), Jul 2019, Atlanta, United States.
https://hal-enac.archives-ouvertes.fr/hal-02137839
</description>
</doc>
<header>
<file name="nav_trinity.h"/>
</header>
<init fun="nav_trinity_init()"/>
<makefile>
<file name="nav_trinity.c"/>
</makefile>
</module>