Paparazzi UAS  v7.0_unstable
Paparazzi is a free software Unmanned Aircraft System.
stabilization_indi_simple.c File Reference
+ Include dependency graph for stabilization_indi_simple.c:

Go to the source code of this file.

Macros

#define STABILIZATION_INDI_FILT_CUTOFF   8.0
 
#define STABILIZATION_INDI_FILT_CUTOFF_RDOT   STABILIZATION_INDI_FILT_CUTOFF
 
#define STABILIZATION_INDI_MAX_RATE   6.0
 
#define STABILIZATION_INDI_MAX_R   STABILIZATION_ATTITUDE_SP_MAX_R
 
#define STABILIZATION_INDI_ESTIMATION_FILT_CUTOFF   4.0
 
#define STABILIZATION_INDI_FILT_CUTOFF_P   20.0
 
#define STABILIZATION_INDI_FILT_CUTOFF_Q   20.0
 
#define STABILIZATION_INDI_FILT_CUTOFF_R   20.0
 
#define INDI_EST_SCALE   0.001
 

Functions

static void lms_estimation (void)
 This is a Least Mean Squares adaptive filter It estimates the actuator effectiveness online, by comparing the expected angular acceleration based on the inputs with the measured angular acceleration. More...
 
static void indi_init_filters (void)
 
static void send_att_indi (struct transport_tx *trans, struct link_device *dev)
 
static void send_eff_mat_g_indi_simple (struct transport_tx *trans, struct link_device *dev)
 
static void send_ahrs_ref_quat (struct transport_tx *trans, struct link_device *dev)
 
void stabilization_indi_init (void)
 Function that initializes important values upon engaging INDI. More...
 
void stabilization_indi_simple_reset_r_filter_cutoff (float new_cutoff)
 
void stabilization_indi_enter (void)
 Function that resets important values upon engaging INDI. More...
 
void stabilization_indi_set_failsafe_setpoint (void)
 Function that calculates the failsafe setpoint. More...
 
void stabilization_indi_set_rpy_setpoint_i (struct Int32Eulers *rpy)
 Set attitude quaternion setpoint from rpy. More...
 
void stabilization_indi_set_quat_setpoint_i (struct Int32Quat *quat)
 
void stabilization_indi_set_earth_cmd_i (struct Int32Vect2 *cmd, int32_t heading)
 Set attitude setpoint from command in earth axes. More...
 
void stabilization_indi_set_stab_sp (struct StabilizationSetpoint *sp)
 Set attitude setpoint from stabilization setpoint struct. More...
 
static void filter_pqr (Butterworth2LowPass *filter, struct FloatRates *new_values)
 Update butterworth filter for p, q and r of a FloatRates struct. More...
 
static void finite_difference_from_filter (float *output, Butterworth2LowPass *filter)
 Caclulate finite difference form a filter array The filter already contains the previous values. More...
 
static void finite_difference (float output[3], float new[3], float old[3])
 Calculate derivative of an array via finite difference. More...
 
void stabilization_indi_rate_run (struct FloatRates rate_sp, bool in_flight)
 Does the INDI calculations. More...
 
void stabilization_indi_attitude_run (struct Int32Quat quat_sp, bool in_flight)
 runs stabilization indi More...
 
void stabilization_indi_read_rc (bool in_flight, bool in_carefree, bool coordinated_turn)
 This function reads rc commands. More...
 

Variables

struct Int32Eulers stab_att_sp_euler
 with INT32_ANGLE_FRAC More...
 
struct Int32Quat stab_att_sp_quat
 with INT32_QUAT_FRAC More...
 
struct FloatRates stab_att_ff_rates
 
static struct FirstOrderLowPass rates_filt_fo [3]
 
struct IndiVariables indi
 

Macro Definition Documentation

◆ INDI_EST_SCALE

#define INDI_EST_SCALE   0.001

Definition at line 109 of file stabilization_indi_simple.c.

◆ STABILIZATION_INDI_ESTIMATION_FILT_CUTOFF

#define STABILIZATION_INDI_ESTIMATION_FILT_CUTOFF   4.0

Definition at line 78 of file stabilization_indi_simple.c.

◆ STABILIZATION_INDI_FILT_CUTOFF

#define STABILIZATION_INDI_FILT_CUTOFF   8.0

Definition at line 57 of file stabilization_indi_simple.c.

◆ STABILIZATION_INDI_FILT_CUTOFF_P

#define STABILIZATION_INDI_FILT_CUTOFF_P   20.0

Definition at line 84 of file stabilization_indi_simple.c.

◆ STABILIZATION_INDI_FILT_CUTOFF_Q

#define STABILIZATION_INDI_FILT_CUTOFF_Q   20.0

Definition at line 90 of file stabilization_indi_simple.c.

◆ STABILIZATION_INDI_FILT_CUTOFF_R

#define STABILIZATION_INDI_FILT_CUTOFF_R   20.0

Definition at line 96 of file stabilization_indi_simple.c.

◆ STABILIZATION_INDI_FILT_CUTOFF_RDOT

#define STABILIZATION_INDI_FILT_CUTOFF_RDOT   STABILIZATION_INDI_FILT_CUTOFF

Definition at line 62 of file stabilization_indi_simple.c.

◆ STABILIZATION_INDI_MAX_R

#define STABILIZATION_INDI_MAX_R   STABILIZATION_ATTITUDE_SP_MAX_R

Definition at line 74 of file stabilization_indi_simple.c.

◆ STABILIZATION_INDI_MAX_RATE

#define STABILIZATION_INDI_MAX_RATE   6.0

Definition at line 66 of file stabilization_indi_simple.c.

Function Documentation

◆ filter_pqr()

static void filter_pqr ( Butterworth2LowPass filter,
struct FloatRates new_values 
)
inlinestatic

Update butterworth filter for p, q and r of a FloatRates struct.

Parameters
filterThe filter array to use
new_valuesThe new values

Definition at line 348 of file stabilization_indi_simple.c.

References FloatRates::p, FloatRates::q, FloatRates::r, and update_butterworth_2_low_pass().

Referenced by lms_estimation(), and stabilization_indi_rate_run().

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

◆ finite_difference()

static void finite_difference ( float  output[3],
float  new[3],
float  old[3] 
)
inlinestatic

Calculate derivative of an array via finite difference.

Parameters
output[3]The output array
new[3]The newest values
old[3]The values of the previous timestep

Definition at line 376 of file stabilization_indi_simple.c.

Referenced by lms_estimation().

+ Here is the caller graph for this function:

◆ finite_difference_from_filter()

static void finite_difference_from_filter ( float *  output,
Butterworth2LowPass filter 
)
inlinestatic

Caclulate finite difference form a filter array The filter already contains the previous values.

Parameters
outputThe output array
filterThe filter array input

Definition at line 362 of file stabilization_indi_simple.c.

References SecondOrderLowPass::o.

Referenced by lms_estimation(), and stabilization_indi_rate_run().

+ Here is the caller graph for this function:

◆ indi_init_filters()

◆ lms_estimation()

static void lms_estimation ( void  )
inlinestatic

This is a Least Mean Squares adaptive filter It estimates the actuator effectiveness online, by comparing the expected angular acceleration based on the inputs with the measured angular acceleration.

Definition at line 550 of file stabilization_indi_simple.c.

References IndiVariables::adaptive, IndiVariables::est, filter_pqr(), finite_difference(), finite_difference_from_filter(), float_vect_copy(), float_vect_scale(), IndiEstimation::g1, IndiVariables::g1, IndiEstimation::g2, IndiVariables::g2, indi, INDI_EST_SCALE, IndiEstimation::mu, FloatRates::p, FloatRates::q, FloatRates::r, IndiEstimation::rate, IndiEstimation::rate_d, IndiEstimation::rate_dd, stateGetBodyRates_f(), IndiEstimation::u, IndiVariables::u_act_dyn, IndiEstimation::u_d, and IndiEstimation::u_dd.

Referenced by stabilization_indi_rate_run().

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

◆ send_ahrs_ref_quat()

static void send_ahrs_ref_quat ( struct transport_tx *  trans,
struct link_device *  dev 
)
static

Definition at line 189 of file stabilization_indi_simple.c.

References dev, Int32Quat::qi, Int32Quat::qx, Int32Quat::qy, Int32Quat::qz, stab_att_sp_quat, and stateGetNedToBodyQuat_i().

Referenced by stabilization_indi_init().

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

◆ send_att_indi()

static void send_att_indi ( struct transport_tx *  trans,
struct link_device *  dev 
)
static

◆ send_eff_mat_g_indi_simple()

static void send_eff_mat_g_indi_simple ( struct transport_tx *  trans,
struct link_device *  dev 
)
static

Definition at line 171 of file stabilization_indi_simple.c.

References dev, IndiVariables::est, IndiEstimation::g1, IndiEstimation::g2, indi, INDI_EST_SCALE, FloatRates::p, FloatRates::q, FloatRates::r, and RATES_SMUL.

Referenced by stabilization_indi_init().

+ Here is the caller graph for this function:

◆ stabilization_indi_attitude_run()

void stabilization_indi_attitude_run ( struct Int32Quat  quat_sp,
bool  in_flight 
)

runs stabilization indi

Parameters
in_flightnot used
rate_controlrate control enabled, otherwise attitude control

Definition at line 490 of file stabilization_indi_simple.c.

References Indi_gains::att, float_quat_inv_comp_norm_shortest(), float_quat_tilt_twist(), IndiVariables::gains, indi, FloatRates::p, FloatRates::q, QUAT_FLOAT_OF_BFP, FloatQuat::qx, FloatQuat::qy, FloatQuat::qz, FloatRates::r, Indi_gains::rate, RATES_ADD, stab_att_ff_rates, stabilization_indi_rate_run(), stateGetNedToBodyQuat_f(), FloatVect3::x, FloatVect3::y, and FloatVect3::z.

+ Here is the call graph for this function:

◆ stabilization_indi_enter()

void stabilization_indi_enter ( void  )

Function that resets important values upon engaging INDI.

Don't reset inputs and filters, 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. FIXME: Ideally we should detect when coming from something that is not INDI

Definition at line 258 of file stabilization_indi_simple.c.

References IndiVariables::angular_accel_ref, FLOAT_RATES_ZERO, indi, indi_init_filters(), Int32Eulers::psi, stab_att_sp_euler, stabilization_attitude_get_heading_i(), IndiVariables::u_act_dyn, and IndiVariables::u_in.

+ Here is the call graph for this function:

◆ stabilization_indi_init()

void stabilization_indi_init ( void  )

Function that initializes important values upon engaging INDI.

Definition at line 204 of file stabilization_indi_simple.c.

References IndiVariables::act_dyn, DefaultPeriodic, indi, indi_init_filters(), FloatRates::p, FloatRates::q, FloatRates::r, register_periodic_telemetry(), send_ahrs_ref_quat(), send_att_indi(), and send_eff_mat_g_indi_simple().

+ Here is the call graph for this function:

◆ stabilization_indi_rate_run()

void stabilization_indi_rate_run ( struct FloatRates  rate_sp,
bool  in_flight 
)

◆ stabilization_indi_read_rc()

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

This function reads rc commands.

Parameters
in_flightboolean that states if the UAV is in flight or not

Definition at line 533 of file stabilization_indi_simple.c.

References QUAT_BFP_OF_REAL, stab_att_sp_quat, stabilization_attitude_read_rc_setpoint_quat_earth_bound_f(), and stabilization_attitude_read_rc_setpoint_quat_f().

+ Here is the call graph for this function:

◆ stabilization_indi_set_earth_cmd_i()

void stabilization_indi_set_earth_cmd_i ( struct Int32Vect2 cmd,
int32_t  heading 
)

Set attitude setpoint from command in earth axes.

Parameters
cmdThe command in earth axes (North East)
headingThe desired heading

Definition at line 312 of file stabilization_indi_simple.c.

References FLOAT_RATES_ZERO, heading, INT32_TRIG_FRAC, Int32Eulers::phi, PPRZ_ITRIG_COS, PPRZ_ITRIG_SIN, Int32Eulers::psi, quat_from_earth_cmd_i(), stab_att_ff_rates, stab_att_sp_euler, stab_att_sp_quat, stateGetNedToBodyEulers_i(), Int32Eulers::theta, Int32Vect2::x, and Int32Vect2::y.

+ Here is the call graph for this function:

◆ stabilization_indi_set_failsafe_setpoint()

void stabilization_indi_set_failsafe_setpoint ( void  )

Function that calculates the failsafe setpoint.

Definition at line 271 of file stabilization_indi_simple.c.

References FLOAT_RATES_ZERO, PPRZ_ITRIG_COS, PPRZ_ITRIG_SIN, Int32Quat::qi, Int32Quat::qx, Int32Quat::qy, Int32Quat::qz, stab_att_ff_rates, stab_att_sp_quat, and stabilization_attitude_get_heading_i().

+ Here is the call graph for this function:

◆ stabilization_indi_set_quat_setpoint_i()

void stabilization_indi_set_quat_setpoint_i ( struct Int32Quat quat)
Parameters
quatquaternion setpoint

Definition at line 299 of file stabilization_indi_simple.c.

References FLOAT_RATES_ZERO, int32_eulers_of_quat(), stab_att_ff_rates, stab_att_sp_euler, and stab_att_sp_quat.

+ Here is the call graph for this function:

◆ stabilization_indi_set_rpy_setpoint_i()

void stabilization_indi_set_rpy_setpoint_i ( struct Int32Eulers rpy)

Set attitude quaternion setpoint from rpy.

Parameters
rpyroll pitch yaw input

Definition at line 287 of file stabilization_indi_simple.c.

References FLOAT_RATES_ZERO, int32_quat_of_eulers(), stab_att_ff_rates, stab_att_sp_euler, and stab_att_sp_quat.

+ Here is the call graph for this function:

◆ stabilization_indi_set_stab_sp()

void stabilization_indi_set_stab_sp ( struct StabilizationSetpoint sp)

Set attitude setpoint from stabilization setpoint struct.

Parameters
spStabilization setpoint structure

Definition at line 335 of file stabilization_indi_simple.c.

References stab_att_ff_rates, stab_att_sp_euler, stab_att_sp_quat, stab_sp_to_eulers_i(), stab_sp_to_quat_i(), and stab_sp_to_rates_f().

+ Here is the call graph for this function:

◆ stabilization_indi_simple_reset_r_filter_cutoff()

void stabilization_indi_simple_reset_r_filter_cutoff ( float  new_cutoff)

Definition at line 251 of file stabilization_indi_simple.c.

References IndiVariables::cutoff_r, indi, init_first_order_low_pass(), rates_filt_fo, and stateGetBodyRates_f().

+ Here is the call graph for this function:

Variable Documentation

◆ indi

◆ rates_filt_fo

◆ stab_att_ff_rates

◆ stab_att_sp_euler

◆ stab_att_sp_quat