Paparazzi UAS  v7.0_unstable
Paparazzi is a free software Unmanned Aircraft System.
oneloop_andi.h File Reference
+ Include dependency graph for oneloop_andi.h:
+ This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Data Structures

struct  guidance_indi_hybrid_params
 
struct  OneloopGuidanceRef
 
struct  OneloopGuidanceState
 
struct  OneloopStabilizationRef
 
struct  OneloopStabilizationState
 
struct  OneloopGeneral
 
struct  PolePlacement
 
struct  Gains3rdOrder
 
struct  Gains2ndOrder
 

Macros

#define ANDI_NUM_ACT   COMMANDS_NB_REAL
 
#define ANDI_NUM_VIRTUAL_ACT   COMMANDS_NB_VIRTUAL
 
#define ANDI_NUM_VIRTUAL_ACT   2
 
#define ANDI_NUM_ACT_TOT   (ANDI_NUM_ACT + ANDI_NUM_VIRTUAL_ACT)
 
#define ANDI_OUTPUTS   6
 
#define ANDI_G_SCALING   1000.0f
 

Functions

void oneloop_andi_init (void)
 Init function of Oneloop ANDI controller
More...
 
void oneloop_andi_enter (bool half_loop_sp)
 Function that resets important values upon engaging Oneloop ANDI. More...
 
void oneloop_andi_set_failsafe_setpoint (void)
 
void oneloop_andi_run (bool in_flight, bool half_loop, struct FloatVect3 PSA_des, int rm_order_h, int rm_order_v)
 Main function that runs the controller and performs control allocation. More...
 
void oneloop_andi_RM (bool half_loop, struct FloatVect3 PSA_des, int rm_order_h, int rm_order_v)
 Function to generate the reference signals for the oneloop controller. More...
 
void oneloop_andi_read_rc (bool in_flight, bool in_carefree, bool coordinated_turn)
 
void oneloop_from_nav (bool in_flight)
 Function that maps navigation inputs to the oneloop controller for the generated autopilot. More...
 

Variables

float act_state_filt_vect_1l [ANDI_NUM_ACT]
 
float actuator_state_1l [ANDI_NUM_ACT]
 
float nu [6]
 
float g1g2_1l [ANDI_OUTPUTS][ANDI_NUM_ACT_TOT]
 
float andi_u [ANDI_NUM_ACT_TOT]
 
float andi_du [ANDI_NUM_ACT_TOT]
 
float psi_des_deg
 
struct guidance_indi_hybrid_params gih_params
 
bool force_forward
 forward flight for hybrid nav More...
 
struct OneloopGeneral oneloop_andi
 
struct PolePlacement p_att_e
 
struct PolePlacement p_att_rm
 
struct PolePlacement p_pos_e
 
struct PolePlacement p_pos_rm
 
struct PolePlacement p_alt_e
 
struct PolePlacement p_alt_rm
 
struct PolePlacement p_head_e
 
struct PolePlacement p_head_rm
 
struct Gains3rdOrder k_att_e
 
struct Gains3rdOrder k_att_rm
 
struct Gains2ndOrder k_head_e
 
struct Gains2ndOrder k_head_rm
 
struct Gains3rdOrder k_pos_e
 
struct Gains3rdOrder k_pos_rm
 

Detailed Description

Author
Tomaso De Ponti tmlde.nosp@m.pont.nosp@m.i@tud.nosp@m.elft.nosp@m..nl One loop (Guidance + Stabilization) ANDI controller for rotorcrafts
Tomaso De Ponti tmlde.nosp@m.pont.nosp@m.i@tud.nosp@m.elft.nosp@m..nl One loop (Guidance + Stabilization) ANDI controller for the rotating wing drone RW3C

Definition in file oneloop_andi.h.


Data Structure Documentation

◆ guidance_indi_hybrid_params

struct guidance_indi_hybrid_params

Definition at line 72 of file guidance_indi_hybrid.h.

Data Fields
float heading_bank_gain
float liftd_asq
float liftd_p50
float liftd_p80
float pos_gain
float pos_gainz
float speed_gain
float speed_gainz

◆ OneloopGuidanceRef

struct OneloopGuidanceRef

Definition at line 78 of file oneloop_andi.h.

Data Fields
float acc[3]
float jer[3]
float pos[3]
float vel[3]

◆ OneloopGuidanceState

struct OneloopGuidanceState

Definition at line 85 of file oneloop_andi.h.

Data Fields
float acc[3]
float pos[3]
float vel[3]

◆ OneloopStabilizationRef

struct OneloopStabilizationRef

Definition at line 91 of file oneloop_andi.h.

Data Fields
float att[3]
float att_2d[3]
float att_3d[3]
float att_d[3]

◆ OneloopStabilizationState

struct OneloopStabilizationState

Definition at line 98 of file oneloop_andi.h.

Data Fields
float att[3]
float att_2d[3]
float att_d[3]

◆ OneloopGeneral

struct OneloopGeneral

Definition at line 103 of file oneloop_andi.h.

+ Collaboration diagram for OneloopGeneral:
Data Fields
struct OneloopGuidanceRef gui_ref
struct OneloopGuidanceState gui_state
bool half_loop
struct OneloopStabilizationRef sta_ref
struct OneloopStabilizationState sta_state

◆ PolePlacement

struct PolePlacement

Definition at line 114 of file oneloop_andi.h.

Data Fields
float omega_n
float p3
float zeta

◆ Gains3rdOrder

struct Gains3rdOrder

Definition at line 119 of file oneloop_andi.h.

Data Fields
float k1[3]
float k2[3]
float k3[3]

◆ Gains2ndOrder

struct Gains2ndOrder

Definition at line 124 of file oneloop_andi.h.

Data Fields
float k2
float k3

Macro Definition Documentation

◆ ANDI_G_SCALING

#define ANDI_G_SCALING   1000.0f

Definition at line 54 of file oneloop_andi.h.

◆ ANDI_NUM_ACT

#define ANDI_NUM_ACT   COMMANDS_NB_REAL

Definition at line 35 of file oneloop_andi.h.

◆ ANDI_NUM_ACT_TOT

#define ANDI_NUM_ACT_TOT   (ANDI_NUM_ACT + ANDI_NUM_VIRTUAL_ACT)

Definition at line 48 of file oneloop_andi.h.

◆ ANDI_NUM_VIRTUAL_ACT [1/2]

#define ANDI_NUM_VIRTUAL_ACT   COMMANDS_NB_VIRTUAL

Definition at line 45 of file oneloop_andi.h.

◆ ANDI_NUM_VIRTUAL_ACT [2/2]

#define ANDI_NUM_VIRTUAL_ACT   2

Definition at line 45 of file oneloop_andi.h.

◆ ANDI_OUTPUTS

#define ANDI_OUTPUTS   6

Definition at line 52 of file oneloop_andi.h.

Function Documentation

◆ oneloop_andi_enter()

void oneloop_andi_enter ( bool  half_loop_sp)

Function that resets important values upon engaging Oneloop ANDI.

FIXME: Ideally we should distinguish between the "stabilization" and "guidance" needs because it is unlikely to switch stabilization in flight, and there are multiple modes that use (the same) stabilization. Resetting the controller is not so nice when you are flying.

Definition at line 1098 of file oneloop_andi.c.

References ANDI_OUTPUTS, ang_acc, OneloopStabilizationRef::att, OneloopStabilizationRef::att_2d, OneloopStabilizationRef::att_3d, OneloopStabilizationRef::att_d, calc_normalization(), eulers_zxy, eulers_zxy_des, float_vect_zero(), OneloopGeneral::half_loop, init_controller(), init_filter(), lin_acc, model_pred, nav_target, oneloop_andi, FloatEulers::phi, FloatEulers::psi, psi_des_deg, psi_des_rad, OneloopGeneral::sta_ref, sum_g1g2_1l(), and FloatEulers::theta.

Referenced by guidance_h_run_enter(), oneloop_from_nav(), and stabilization_attitude_enter().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ oneloop_andi_init()

◆ oneloop_andi_read_rc()

void oneloop_andi_read_rc ( bool  in_flight,
bool  in_carefree,
bool  coordinated_turn 
)

◆ oneloop_andi_RM()

void oneloop_andi_RM ( bool  half_loop,
struct FloatVect3  PSA_des,
int  rm_order_h,
int  rm_order_v 
)

Function to generate the reference signals for the oneloop controller.

Parameters
half_loopIn half-loop mode the controller is used for stabilization only
PSA_desDesired position/speed/acceleration
rm_order_hOrder of the reference model for horizontal guidance
rm_order_vOrder of the reference model for vertical guidance

Definition at line 1129 of file oneloop_andi.c.

References a_thrust, OneloopGuidanceRef::acc, OneloopGuidanceState::acc, actuator_state_1l, ANDI_NUM_ACT, OneloopStabilizationRef::att, OneloopStabilizationRef::att_2d, OneloopStabilizationRef::att_3d, OneloopStabilizationRef::att_d, bwls_1l, dt_1l, eulers_zxy, eulers_zxy_des, float_vect_copy(), float_vect_zero(), OneloopGeneral::gui_ref, OneloopGeneral::gui_state, OneloopGuidanceRef::jer, Gains3rdOrder::k1, Gains3rdOrder::k2, Gains2ndOrder::k2, Gains3rdOrder::k3, Gains2ndOrder::k3, k_att_rm, k_head_rm, k_pos_rm, max_a_nav, max_j_nav, MAX_PPRZ, max_v_nav, nav_target, oneloop_andi, FloatEulers::phi, OneloopGuidanceRef::pos, OneloopGuidanceState::pos, FloatEulers::psi, psi_des_rad, psi_vec, radio_control_get(), RADIO_PITCH, RADIO_ROLL, RADIO_THROTTLE, RADIO_YAW, ratio_u_un, ratio_vn_v, rm_1st_pos(), rm_2nd(), rm_2nd_pos(), rm_3rd(), rm_3rd_attitude(), rm_3rd_pos(), OneloopGeneral::sta_ref, FloatEulers::theta, use_increment, OneloopGuidanceRef::vel, OneloopGuidanceState::vel, Wv, Wv_wls, FloatVect3::x, FloatVect3::y, and FloatVect3::z.

Referenced by oneloop_andi_run().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ oneloop_andi_run()

void oneloop_andi_run ( bool  in_flight,
bool  half_loop,
struct FloatVect3  PSA_des,
int  rm_order_h,
int  rm_order_v 
)

Main function that runs the controller and performs control allocation.

Parameters
half_loopIn half-loop mode the controller is used for stabilization only
in_flightThe drone is in flight
PSA_desDesired position/speed/acceleration
rm_order_hOrder of the reference model for horizontal guidance
rm_order_vOrder of the reference model for vertical guidance

Definition at line 1231 of file oneloop_andi.c.

References a_thrust, OneloopGuidanceRef::acc, OneloopGuidanceState::acc, act_max, act_min, actuator_state_1l, andi_du, andi_du_n, ANDI_NUM_ACT, ANDI_NUM_ACT_TOT, ANDI_OUTPUTS, andi_u, ang_acc, AP_MODE_ATTITUDE_DIRECT, OneloopStabilizationRef::att, OneloopStabilizationState::att, OneloopStabilizationRef::att_2d, OneloopStabilizationState::att_2d, OneloopStabilizationRef::att_3d, OneloopStabilizationRef::att_d, OneloopStabilizationState::att_d, autopilot, bwls_1l, calc_normalization(), du_max_1l, du_min_1l, du_pref_1l, ec_2rd(), ec_3rd(), ec_3rd_att(), eulers_zxy, eulers_zxy_des, float_eulers_of_quat_zxy(), float_vect_copy(), float_vect_sum(), g1g2_1l, gamma_wls, get_act_state_oneloop(), OneloopGeneral::gui_ref, OneloopGeneral::gui_state, init_controller(), OneloopGuidanceRef::jer, Gains3rdOrder::k1, Gains3rdOrder::k2, Gains2ndOrder::k2, Gains3rdOrder::k3, Gains2ndOrder::k3, k_att_e, k_head_e, k_pos_e, FirstOrderLowPass::last_out, lin_acc, pprz_autopilot::mode, nu, num_thrusters_oneloop, number_iter, oneloop_andi, ONELOOP_ANDI_DEBUG_MODE, oneloop_andi_propagate_filters(), oneloop_andi_RM(), FloatEulers::phi, OneloopGuidanceRef::pos, OneloopGuidanceState::pos, FloatEulers::psi, psi_des_deg, psi_des_rad, rates_filt_fo, ratio_u_un, OneloopGeneral::sta_ref, OneloopGeneral::sta_state, stabilization_cmd, stateGetNedToBodyQuat_f(), stateGetPositionNed_f(), stateGetSpeedNed_f(), sum_g1g2_1l(), FloatEulers::theta, u_pref, use_increment, OneloopGuidanceRef::vel, OneloopGuidanceState::vel, wls_alloc(), Wu, Wv_wls, NedCoor_f::x, NedCoor_f::y, and NedCoor_f::z.

Referenced by oneloop_from_nav(), and stabilization_attitude_run().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ oneloop_andi_set_failsafe_setpoint()

void oneloop_andi_set_failsafe_setpoint ( void  )

◆ oneloop_from_nav()

Variable Documentation

◆ act_state_filt_vect_1l

float act_state_filt_vect_1l[ANDI_NUM_ACT]
extern

◆ actuator_state_1l

◆ andi_du

float andi_du[ANDI_NUM_ACT_TOT]
extern

Definition at line 394 of file oneloop_andi.c.

Referenced by oneloop_andi_init(), and oneloop_andi_run().

◆ andi_u

float andi_u[ANDI_NUM_ACT_TOT]
extern

Definition at line 393 of file oneloop_andi.c.

Referenced by get_act_state_oneloop(), oneloop_andi_init(), and oneloop_andi_run().

◆ force_forward

bool force_forward
extern

forward flight for hybrid nav

Definition at line 119 of file guidance_indi_hybrid.c.

◆ g1g2_1l

◆ gih_params

struct guidance_indi_hybrid_params gih_params
extern

Definition at line 1 of file guidance_indi_hybrid.c.

Referenced by guidance_indi_get_liftd(), and init_controller().

◆ k_att_e

struct Gains3rdOrder k_att_e
extern

Definition at line 420 of file oneloop_andi.c.

Referenced by init_controller(), and oneloop_andi_run().

◆ k_att_rm

struct Gains3rdOrder k_att_rm
extern

Definition at line 420 of file oneloop_andi.c.

Referenced by init_controller(), and oneloop_andi_RM().

◆ k_head_e

struct Gains2ndOrder k_head_e
extern

Definition at line 420 of file oneloop_andi.c.

Referenced by init_controller(), and oneloop_andi_run().

◆ k_head_rm

struct Gains2ndOrder k_head_rm
extern

Definition at line 420 of file oneloop_andi.c.

Referenced by init_controller(), and oneloop_andi_RM().

◆ k_pos_e

struct Gains3rdOrder k_pos_e
extern

Definition at line 420 of file oneloop_andi.c.

Referenced by init_controller(), and oneloop_andi_run().

◆ k_pos_rm

struct Gains3rdOrder k_pos_rm
extern

Definition at line 420 of file oneloop_andi.c.

Referenced by init_controller(), and oneloop_andi_RM().

◆ nu

float nu[6]
extern

Definition at line 396 of file oneloop_andi.c.

Referenced by oneloop_andi_init(), oneloop_andi_run(), and send_oneloop_andi().

◆ oneloop_andi

◆ p_alt_e

struct PolePlacement p_alt_e
extern

Definition at line 420 of file oneloop_andi.c.

Referenced by init_controller(), and init_poles().

◆ p_alt_rm

struct PolePlacement p_alt_rm
extern

Definition at line 420 of file oneloop_andi.c.

Referenced by init_controller(), and init_poles().

◆ p_att_e

struct PolePlacement p_att_e
extern

Definition at line 420 of file oneloop_andi.c.

Referenced by init_controller(), and init_poles().

◆ p_att_rm

struct PolePlacement p_att_rm
extern

Definition at line 420 of file oneloop_andi.c.

Referenced by init_controller(), and init_poles().

◆ p_head_e

struct PolePlacement p_head_e
extern

Definition at line 420 of file oneloop_andi.c.

Referenced by init_controller(), and init_poles().

◆ p_head_rm

struct PolePlacement p_head_rm
extern

Definition at line 420 of file oneloop_andi.c.

Referenced by init_controller().

◆ p_pos_e

struct PolePlacement p_pos_e
extern

Definition at line 420 of file oneloop_andi.c.

Referenced by init_controller(), and init_poles().

◆ p_pos_rm

struct PolePlacement p_pos_rm
extern

Definition at line 420 of file oneloop_andi.c.

Referenced by init_controller(), and init_poles().

◆ psi_des_deg

float psi_des_deg
extern

Definition at line 407 of file oneloop_andi.c.

Referenced by oneloop_andi_enter(), and oneloop_andi_run().