Files
paparazzi/conf/modules/optical_flow_hover.xml
Gautier Hattenberger ce7fe4c23f [control] rework the stabilization for rotorcraft (#3248)
Introducing several changes to the control stask for the stabilization:
- new structures: stabilization, stab (att and/or rates) and thrust (vector)
- more functional approach: stabilization receives the stab and thrust
  setpoints from guidance and fill command vector at the end
- modes and sub-modes are redefined (split stab and guidance modes),
  some AP modes are removed (FLIP and MODULE)
- RC read functions are removed and replaced by ABI bindings, one for
  each part (AP, stab, guidance_h, guidance_v) with dedicated functions
- transition ratio (float in [0-1]) replace transition_percentage (int)
- the AP_MODULE mode is replaced by generated autopilot
- the ABI hack for guidance indi is not needed anymore
- AP generator supports a new 'store' attribute to use return values of
  functions
- cleaning of the stabilization API (for setter functions)
2024-05-21 17:01:38 +02:00

103 lines
6.5 KiB
XML

<!DOCTYPE module SYSTEM "module.dtd">
<module name="optical_flow_hover" dir="ctrl">
<doc>
<description>
This module implements monocular vision height estimation and uses this
estimate to stabilize a quadrotor using only a downwards
facing camera and an IMU. For scientific background please visit:
https://repository.tudelft.nl/islandora/object/uuid%3A6e3ce742-a974-491d-97c2-1cafc090b3d9
The gain height relationship as first described in
http://iopscience.iop.org/article/10.1088/1748-3190/11/1/016004 is
calibrated
in a controlled environment so that the resulting relationship can be
used to determine the height at which the quadrotor is flying.
In addition to the vertical axis the same principle is applied to the
horizontal axes.
A short guide on how to determine the slope:
Picking a relatively high OFH_RAMP* with a very high negative
OFH_COV*_SETPOINT (i.e. -6000000),
looking at when the quadrotor starts oscillating, the respective message
(covariances.*) should be used to determine a suitable
threshold value for OFH_COV*_SETPOINT. The slope can then be decreased to gain
accuracy in reaching the oscillations.
Finally when flying the quadrotor on different heights the gain at which
instability occurs can be noted to determine the slope of the
gain-height relationship.
Important settings:
-OFH_HOVER_METHOD/hover_method:
0, the method is applied to all 3 axes in the following order: Z - X - Y
1, the method is applied to all 3 axes at the same time
2, the method is applied to the Z axis and the estimated height is used
to determine the proper gains
for the horizontal axes using the predetermined relationship.
-XY_SYMMETRICAL is set to 1 if the drone is roughly symmetrical,
causing the found gains for the X axis is also used for the Y axis.
-OFH_*GAIN* can be used to set starting gains to prevent initial drift
while still estimating height and appropriate gains.
-OFH_REDUCTION* is used to reduce the gain after determining the oscillation to
stabilize the quadrotor.
</description>
</doc>
<settings>
<dl_settings>
<dl_settings name="OpticalFlowHover">
<dl_settings name="General">
<dl_setting var="cov_method" min="0" step="1" max="1" values="input|past" module="ctrl/optical_flow_hover" shortname="COV_METHOD" param="OFH_COV_METHOD"/>
<dl_setting var="hover_method" min="0" step="1" max="2" values="Sub|Same|Smart" module="ctrl/optical_flow_hover" shortname="HOVER_METHOD" param="OFH_HOVER_METHOD"/>
</dl_settings>
<dl_settings name="Vertical">
<dl_setting var="of_hover_ctrl_Z.cov_setpoint" min="-5.05" step="0.00001" max="0" module="ctrl/optical_flow_hover" shortname="covDiv_set_point" param="OFH_COVDIV_SETPOINT"/>
<dl_setting var="of_hover_ctrl_Z.ramp" min="0" step="0.005" max="1" module="ctrl/optical_flow_hover" shortname="rampZ" param="OFH_RAMPZ"/>
<dl_setting var="of_hover_ctrl_Z.reduction_factor" min="0.1" step="0.01" max="1" module="ctrl/optical_flow_hover" shortname="reduction_factorZ" param="OFH_REDUCTIONZ"/>
<dl_setting var="of_hover_ctrl_Z.PID.P" min="0" step="0.01" max="1" module="ctrl/optical_flow_hover" shortname="pgainZ"/>
<dl_setting var="of_hover_ctrl_Z.PID.I" min="0" step="0.001" max="0.1" module="ctrl/optical_flow_hover" shortname="igainZ" param="OFH_IGAINZ"/>
<dl_setting var="of_hover_ctrl_Z.PID.D" min="0" step="0.01" max="1" module="ctrl/optical_flow_hover" shortname="dgainZ" param="OFH_DGAINZ"/>
</dl_settings>
<dl_settings name="Horizontal">
<dl_setting var="of_hover_ctrl_X.cov_setpoint" min="-100000" step="100" max="10000" module="ctrl/optical_flow_hover" shortname="covFlow_set_pointX" param="OFH_COVDIV_SETPOINT"/>
<dl_setting var="of_hover_ctrl_Y.cov_setpoint" min="-100000" step="100" max="10000" module="ctrl/optical_flow_hover" shortname="covFlow_set_pointY" param="OFH_COVDIV_SETPOINT"/>
<dl_setting var="of_hover_ctrl_X.ramp" min="0" step="0.0001" max="0.05" module="ctrl/optical_flow_hover" shortname="rampX" param="OFH_RAMPXY"/>
<dl_setting var="of_hover_ctrl_Y.ramp" min="0" step="0.0001" max="0.05" module="ctrl/optical_flow_hover" shortname="rampY" param="OFH_RAMPXY"/>
<dl_setting var="of_hover_ctrl_X.reduction_factor" min="0.1" step="0.01" max="1" module="ctrl/optical_flow_hover" shortname="reduction_factorX" param="OFH_REDUCTIONXY"/>
<dl_setting var="of_hover_ctrl_Y.reduction_factor" min="0.1" step="0.01" max="1" module="ctrl/optical_flow_hover" shortname="reduction_factorY" param="OFH_REDUCTIONXY"/>
<dl_setting var="of_hover_ctrl_X.PID.P" min="0" step="0.00001" max="0.01" module="ctrl/optical_flow_hover" shortname="pgainX"/>
<dl_setting var="of_hover_ctrl_X.PID.I" min="0" step="0.00001" max="0.001" module="ctrl/optical_flow_hover" shortname="IgainX" param="OFH_IGAINX"/>
<dl_setting var="of_hover_ctrl_X.PID.D" min="0" step="0.00001" max="0.001" module="ctrl/optical_flow_hover" shortname="DgainX" param="OFH_DGAINX"/>
<dl_setting var="of_hover_ctrl_Y.PID.P" min="0" step="0.00001" max="0.01" module="ctrl/optical_flow_hover" shortname="pgainY"/>
<dl_setting var="of_hover_ctrl_Y.PID.I" min="0" step="0.00001" max="0.001" module="ctrl/optical_flow_hover" shortname="IgainY" param="OFH_IGAINY"/>
<dl_setting var="of_hover_ctrl_Y.PID.D" min="0" step="0.00001" max="0.001" module="ctrl/optical_flow_hover" shortname="DgainY" param="OFH_DGAINY"/>
<dl_setting var="oscphi" min="0" step="1" max="1" values="No|OSC" module="ctrl/optical_flow_hover" shortname="oscphi" />
<dl_setting var="osctheta" min="0" step="1" max="1" values="No|OSC" module="ctrl/optical_flow_hover" shortname="osctheta" />
<dl_setting var="derotated" min="0" step="1" max="1" values="Reg|Der" module="ctrl/optical_flow_hover" shortname="derotated" />
</dl_settings>
</dl_settings>
</dl_settings>
</settings>
<header>
<file name="optical_flow_hover.h" />
<file name="optical_flow_functions.h" />
</header>
<init fun="optical_flow_hover_init()" />
<makefile target="ap">
<file name="optical_flow_hover.c" />
<file name="optical_flow_functions.c" />
<test firmware="rotorcraft">
<define name="COV_WINDOW_SIZE" value="300"/>
<define name="GUIDANCE_H_MAX_BANK" value="0.5"/>
<define name="GUIDANCE_H_PGAIN" value="1"/>
<define name="GUIDANCE_H_IGAIN" value="1"/>
<define name="GUIDANCE_H_DGAIN" value="1"/>
</test>
</makefile>
</module>