Pilot nav shift variable to track an offset in navigation
Typical use is to Control a fixed-wing to use both GPS and local position (from Decawave modules for instance) to land it with precision or in a net.
Data are coming from POSITION_ESTIMATE ABI message.
See https://hal-enac.archives-ouvertes.fr/hal-01936955 for more information on UAV landing in a net.
Example for airframe file
Add to your firmware section:
1 <module name="shift_tracking"/>
Module configuration options
Airframe file section
- section name:
SHIFT_TRACKING
prefix: SHIFT_TRACKING_
- name
ID
value: ABI_BROADCAST
Description: ABI binding ID
- name
DIR
value: 1.0, 0., 0.
Description: direction to track expressed in the local pos frame
- name
KP
value: 1.5
Description: proportional gain
- name
KI
value: 0.5
Description: integral gain
- name
KD
value: 1.0
Description: derivative gain
- name
MAXSHIFT
value: 30.
Description: maximum offset control
- name
MAXSUM
value: 30.
Description: maximum integral part
Module functions
Init Functions
These initialization functions are called once on startup.
Files
Header Files
The following headers are automatically included in modules.h
Source Files
Raw shift_tracking.xml file:
<!DOCTYPE module SYSTEM "module.dtd">
<module name="shift_tracking" dir="ctrl">
<doc>
<description>
Pilot nav shift variable to track an offset in navigation
Typical use is to Control a fixed-wing to use both GPS and
local position (from Decawave modules for instance) to land it
with precision or in a net.
Data are coming from POSITION_ESTIMATE ABI message.
See https://hal-enac.archives-ouvertes.fr/hal-01936955 for more information on UAV landing in a net.
</description>
<section name="SHIFT_TRACKING" prefix="SHIFT_TRACKING_">
<define name="ID" value="ABI_BROADCAST" description="ABI binding ID"/>
<define name="DIR" value="1.0, 0., 0." type="float[]" description="direction to track expressed in the local pos frame"/>
<define name="KP" value="1.5" description="proportional gain"/>
<define name="KI" value="0.5" description="integral gain"/>
<define name="KD" value="1.0" description="derivative gain"/>
<define name="MAXSHIFT" value="30." description="maximum offset control"/>
<define name="MAXSUM" value="30." description="maximum integral part"/>
</section>
</doc>
<settings>
<dl_settings>
<dl_settings NAME="shift tracking">
<dl_setting MAX="5." MIN="0." STEP="0.05" VAR="shift_tracking.kp" module="modules/ctrl/shift_tracking" handler="SetKp"/>
<dl_setting MAX="5." MIN="0." STEP="0.05" VAR="shift_tracking.ki" module="modules/ctrl/shift_tracking" handler="SetKi"/>
<dl_setting MAX="5." MIN="0." STEP="0.05" VAR="shift_tracking.kd" module="modules/ctrl/shift_tracking" handler="SetKd"/>
</dl_settings>
</dl_settings>
</settings>
<header>
<file name="shift_tracking.h"/>
</header>
<init fun="shift_tracking_init()"/>
<makefile>
<file name="shift_tracking.c"/>
</makefile>
</module>