Paparazzi UAS  v5.18.0_stable
Paparazzi is a free software Unmanned Aircraft System.
optical_flow_landing.h File Reference

This module implements optical flow landings in which the divergence is kept constant. When using a fixed gain for control, the covariance between thrust and divergence is tracked, so that the drone knows when it has arrived close to the landing surface. Then, a final landing procedure is triggered. It can also be set to adaptive gain control, where the goal is to continuously gauge the distance to the landing surface. In this mode, the drone will oscillate all the way down to the surface. More...

#include "std.h"
+ Include dependency graph for optical_flow_landing.h:
+ This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Data Structures

struct  OpticalFlowLanding
 

Macros

#define GUIDANCE_H_MODE_MODULE_SETTING   GUIDANCE_H_MODE_NAV
 
#define GUIDANCE_V_MODE_MODULE_SETTING   GUIDANCE_V_MODE_MODULE
 

Functions

void guidance_v_module_init (void)
 
void guidance_v_module_enter (void)
 Entering the vertical module (user switched to module) More...
 
void guidance_v_module_run (bool in_flight)
 

Variables

struct OpticalFlowLanding of_landing_ctrl
 

Detailed Description

This module implements optical flow landings in which the divergence is kept constant. When using a fixed gain for control, the covariance between thrust and divergence is tracked, so that the drone knows when it has arrived close to the landing surface. Then, a final landing procedure is triggered. It can also be set to adaptive gain control, where the goal is to continuously gauge the distance to the landing surface. In this mode, the drone will oscillate all the way down to the surface.

de Croon, G.C.H.E. (2016). Monocular distance estimation with optical flow maneuvers and efference copies: a stability-based strategy. Bioinspiration & biomimetics, 11(1), 016004. http://iopscience.iop.org/article/10.1088/1748-3190/11/1/016004

Based on the above theory, we have also developed a new strategy for landing that consists of two phases: (1) while hovering, the drone determines the optimal gain by increasing the gain until oscillation (2) the drone starts landing while exponentially decreasing the gain over time

This strategy leads to smooth, high-performance constant divergence landings, as explained in the article: H.W. Ho, G.C.H.E. de Croon, E. van Kampen, Q.P. Chu, and M. Mulder (submitted) Adaptive Control Strategy for Constant Optical Flow Divergence Landing, https://arxiv.org/abs/1609.06767

Definition in file optical_flow_landing.h.


Data Structure Documentation

◆ OpticalFlowLanding

struct OpticalFlowLanding

Definition at line 49 of file optical_flow_landing.h.

Data Fields
float agl agl = height from sonar (only used when using "fake" divergence)
float agl_lp low-pass version of agl
uint32_t CONTROL_METHOD type of divergence control: 0 = fixed gain, 1 = adaptive gain
float cov_limit for fixed gain control, what is the cov limit triggering the landing
uint32_t COV_METHOD method to calculate the covariance: between thrust and div (0) or div and div past (1)
float cov_set_point for adaptive gain control, setpoint of the covariance (oscillations)
float d_err difference of error for the D-gain
uint32_t delay_steps number of delay steps for div past
float dgain D-gain for constant divergence control.
float dgain_adaptive D-gain for adaptive gain control.
float divergence Divergence estimate.
float divergence_setpoint setpoint for constant divergence approach
bool elc_oscillate Whether or not to oscillate at beginning of elc to find optimum gain.
float igain I-gain for constant divergence control.
float igain_adaptive I-gain for adaptive gain control.
float lp_const low-pass filter constant
float lp_cov_div_factor low-pass factor for the covariance of divergence in order to trigger the second landing phase in the exponential strategy.
float nominal_thrust nominal thrust around which the PID-control operates
float p_land_threshold if during the exponential landing the gain reaches this value, the final landing procedure is triggered
float pgain P-gain for constant divergence control (from divergence error to thrust)
float pgain_adaptive P-gain for adaptive gain control.
float previous_err Previous divergence tracking error.
float reduction_factor_elc reduction factor - after oscillation, how much to reduce the gain...
float sum_err integration of the error for I-gain
float t_transition how many seconds the drone has to be oscillating in order to transition to the hover phase with reduced gain
float vel vertical velocity as determined with sonar (only used when using "fake" divergence)
uint32_t VISION_METHOD whether to use vision (1) or Optitrack / sonar (0)
uint32_t window_size number of time steps in "window" used for getting the covariance

Macro Definition Documentation

◆ GUIDANCE_H_MODE_MODULE_SETTING

#define GUIDANCE_H_MODE_MODULE_SETTING   GUIDANCE_H_MODE_NAV

Definition at line 84 of file optical_flow_landing.h.

◆ GUIDANCE_V_MODE_MODULE_SETTING

#define GUIDANCE_V_MODE_MODULE_SETTING   GUIDANCE_V_MODE_MODULE

Definition at line 87 of file optical_flow_landing.h.

Function Documentation

◆ guidance_v_module_enter()

void guidance_v_module_enter ( void  )

Entering the vertical module (user switched to module)

Entering the vertical module (user switched to module)

Definition at line 111 of file ctrl_module_innerloop_demo.c.

◆ guidance_v_module_init()

void guidance_v_module_init ( void  )

Definition at line 105 of file ctrl_module_innerloop_demo.c.

◆ guidance_v_module_run()

void guidance_v_module_run ( bool  in_flight)

Definition at line 656 of file optical_flow_hover.c.

Variable Documentation

◆ of_landing_ctrl