diff --git a/conf/airframes/booz2_a1.xml b/conf/airframes/booz2_a1.xml index fc6330c900..72db7873d9 100644 --- a/conf/airframes/booz2_a1.xml +++ b/conf/airframes/booz2_a1.xml @@ -91,21 +91,48 @@
+ - - - - + + + + + + + + + + + + + + + + + + + + + + + + - + + + + + + +
diff --git a/sw/airborne/booz/stabilization/booz_stabilization_attitude_euler.c b/sw/airborne/booz/stabilization/booz_stabilization_attitude_euler.c index ebc332129f..2249ba3985 100644 --- a/sw/airborne/booz/stabilization/booz_stabilization_attitude_euler.c +++ b/sw/airborne/booz/stabilization/booz_stabilization_attitude_euler.c @@ -25,6 +25,8 @@ #include "booz_ahrs.h" #include "booz_radio_control.h" + + #include "airframe.h" struct Int32Eulers booz_stabilization_att_sp; @@ -54,24 +56,25 @@ void booz_stabilization_attitude_init(void) { INT_VECT3_ZERO(booz_stabilization_accel_ref); VECT3_ASSIGN(booz_stabilization_pgain, - BOOZ_STABILIZATION_ATTITUDE_PHI_THETA_PGAIN, - BOOZ_STABILIZATION_ATTITUDE_PHI_THETA_PGAIN, + BOOZ_STABILIZATION_ATTITUDE_PHI_PGAIN, + BOOZ_STABILIZATION_ATTITUDE_THETA_PGAIN, BOOZ_STABILIZATION_ATTITUDE_PSI_PGAIN); VECT3_ASSIGN(booz_stabilization_dgain, - BOOZ_STABILIZATION_ATTITUDE_PHI_THETA_DGAIN, - BOOZ_STABILIZATION_ATTITUDE_PHI_THETA_DGAIN, + BOOZ_STABILIZATION_ATTITUDE_PHI_DGAIN, + BOOZ_STABILIZATION_ATTITUDE_THETA_DGAIN, BOOZ_STABILIZATION_ATTITUDE_PSI_DGAIN); + VECT3_ASSIGN(booz_stabilization_igain, + BOOZ_STABILIZATION_ATTITUDE_PHI_IGAIN, + BOOZ_STABILIZATION_ATTITUDE_THETA_IGAIN, + BOOZ_STABILIZATION_ATTITUDE_PSI_IGAIN); + VECT3_ASSIGN(booz_stabilization_ddgain, - BOOZ_STABILIZATION_ATTITUDE_PHI_THETA_DDGAIN, - BOOZ_STABILIZATION_ATTITUDE_PHI_THETA_DDGAIN, + BOOZ_STABILIZATION_ATTITUDE_PHI_DDGAIN, + BOOZ_STABILIZATION_ATTITUDE_THETA_DDGAIN, BOOZ_STABILIZATION_ATTITUDE_PSI_DDGAIN); - VECT3_ASSIGN(booz_stabilization_igain, - BOOZ_STABILIZATION_ATTITUDE_PHI_THETA_IGAIN, - BOOZ_STABILIZATION_ATTITUDE_PHI_THETA_IGAIN, - BOOZ_STABILIZATION_ATTITUDE_PSI_IGAIN); INT_EULERS_ZERO( booz_stabilization_att_sum_err ); @@ -104,9 +107,9 @@ void booz_stabilization_attitude_run(bool_t in_flight) { /* compute attitude error */ const struct Int32Eulers att_ref_scaled = { - OFFSET_AND_ROUND2(booz_stabilization_att_ref.phi, (ANGLE_REF_RES - INT32_ANGLE_FRAC)), - OFFSET_AND_ROUND2(booz_stabilization_att_ref.theta, (ANGLE_REF_RES - INT32_ANGLE_FRAC)), - OFFSET_AND_ROUND2(booz_stabilization_att_ref.psi, (ANGLE_REF_RES - INT32_ANGLE_FRAC)) }; + OFFSET_AND_ROUND(booz_stabilization_att_ref.phi, (ANGLE_REF_RES - INT32_ANGLE_FRAC)), + OFFSET_AND_ROUND(booz_stabilization_att_ref.theta, (ANGLE_REF_RES - INT32_ANGLE_FRAC)), + OFFSET_AND_ROUND(booz_stabilization_att_ref.psi, (ANGLE_REF_RES - INT32_ANGLE_FRAC)) }; struct Int32Eulers att_err; EULERS_DIFF(att_err, booz_ahrs.ltp_to_body_euler, att_ref_scaled); INT32_ANGLE_NORMALIZE(att_err.psi); @@ -122,9 +125,9 @@ void booz_stabilization_attitude_run(bool_t in_flight) { /* compute rate error */ const struct Int32Rates rate_ref_scaled = { - OFFSET_AND_ROUND2(booz_stabilization_rate_ref.x, (RATE_REF_RES - INT32_RATE_FRAC)), - OFFSET_AND_ROUND2(booz_stabilization_rate_ref.y, (RATE_REF_RES - INT32_RATE_FRAC)), - OFFSET_AND_ROUND2(booz_stabilization_rate_ref.z, (RATE_REF_RES - INT32_RATE_FRAC)) }; + OFFSET_AND_ROUND(booz_stabilization_rate_ref.x, (RATE_REF_RES - INT32_RATE_FRAC)), + OFFSET_AND_ROUND(booz_stabilization_rate_ref.y, (RATE_REF_RES - INT32_RATE_FRAC)), + OFFSET_AND_ROUND(booz_stabilization_rate_ref.z, (RATE_REF_RES - INT32_RATE_FRAC)) }; struct Int32Rates rate_err; RATES_DIFF(rate_err, booz_ahrs.body_rate, rate_ref_scaled); @@ -133,7 +136,7 @@ void booz_stabilization_attitude_run(bool_t in_flight) { booz_stabilization_att_fb_cmd[COMMAND_ROLL] = booz_stabilization_pgain.x * att_err.phi + booz_stabilization_dgain.x * rate_err.p + - OFFSET_AND_ROUND((booz_stabilization_igain.x * booz_stabilization_att_sum_err.phi), 10); + OFFSET_AND_ROUND2((booz_stabilization_igain.x * booz_stabilization_att_sum_err.phi), 10); booz_stabilization_att_ff_cmd[COMMAND_ROLL] = OFFSET_AND_ROUND(booz_stabilization_ddgain.x * booz_stabilization_accel_ref.x, 5); diff --git a/sw/airborne/booz/stabilization/booz_stabilization_attitude_ref_traj_euler.h b/sw/airborne/booz/stabilization/booz_stabilization_attitude_ref_traj_euler.h index eb0fe09a47..9718fcfa85 100644 --- a/sw/airborne/booz/stabilization/booz_stabilization_attitude_ref_traj_euler.h +++ b/sw/airborne/booz/stabilization/booz_stabilization_attitude_ref_traj_euler.h @@ -35,12 +35,14 @@ extern struct Int32Vect3 booz_stabilization_accel_ref; #define F_UPDATE (1<> (RATE_REF_RES - ACCEL_REF_RES))) \ - >> (ZETA_OMEGA_PQ_RES), \ - ((int32_t)(-2.*ZETA_OMEGA_PQ)* (booz_stabilization_rate_ref.y >> (RATE_REF_RES - ACCEL_REF_RES))) \ - >> (ZETA_OMEGA_PQ_RES), \ + ((int32_t)(-2.*ZETA_OMEGA_P) * (booz_stabilization_rate_ref.x >> (RATE_REF_RES - ACCEL_REF_RES))) \ + >> (ZETA_OMEGA_P_RES), \ + ((int32_t)(-2.*ZETA_OMEGA_Q) * (booz_stabilization_rate_ref.y >> (RATE_REF_RES - ACCEL_REF_RES))) \ + >> (ZETA_OMEGA_Q_RES), \ ((int32_t)(-2.*ZETA_OMEGA_R) * (booz_stabilization_rate_ref.z >> (RATE_REF_RES - ACCEL_REF_RES))) \ >> (ZETA_OMEGA_R_RES) }; \ \ const struct Int32Vect3 accel_angle = { \ - ((int32_t)(-OMEGA_2_PQ)* (ref_err.phi >> (ANGLE_REF_RES - ACCEL_REF_RES))) >> (OMEGA_2_PQ_RES), \ - ((int32_t)(-OMEGA_2_PQ)* (ref_err.theta >> (ANGLE_REF_RES - ACCEL_REF_RES))) >> (OMEGA_2_PQ_RES), \ - ((int32_t)(-OMEGA_2_R )* (ref_err.psi >> (ANGLE_REF_RES - ACCEL_REF_RES))) >> (OMEGA_2_R_RES ) }; \ + ((int32_t)(-OMEGA_2_P)* (ref_err.phi >> (ANGLE_REF_RES - ACCEL_REF_RES))) >> (OMEGA_2_P_RES), \ + ((int32_t)(-OMEGA_2_Q)* (ref_err.theta >> (ANGLE_REF_RES - ACCEL_REF_RES))) >> (OMEGA_2_Q_RES), \ + ((int32_t)(-OMEGA_2_R)* (ref_err.psi >> (ANGLE_REF_RES - ACCEL_REF_RES))) >> (OMEGA_2_R_RES) }; \ \ VECT3_SUM(booz_stabilization_accel_ref, accel_rate, accel_angle); \ \ /* saturate acceleration */ \ - const struct Int32Vect3 MIN_ACCEL = { -ACCEL_REF_MAX_PQ, -ACCEL_REF_MAX_PQ, -ACCEL_REF_MAX_R }; \ - const struct Int32Vect3 MAX_ACCEL = { ACCEL_REF_MAX_PQ, ACCEL_REF_MAX_PQ, ACCEL_REF_MAX_R }; \ + const struct Int32Vect3 MIN_ACCEL = { -ACCEL_REF_MAX_P, -ACCEL_REF_MAX_Q, -ACCEL_REF_MAX_R }; \ + const struct Int32Vect3 MAX_ACCEL = { ACCEL_REF_MAX_P, ACCEL_REF_MAX_Q, ACCEL_REF_MAX_R }; \ VECT3_BOUND_BOX(booz_stabilization_accel_ref, MIN_ACCEL, MAX_ACCEL); \ \ /* saturate speed and trim accel accordingly */ \ - if (booz_stabilization_rate_ref.x >= RATE_REF_MAX_PQ) { \ - booz_stabilization_rate_ref.x = RATE_REF_MAX_PQ; \ + if (booz_stabilization_rate_ref.x >= RATE_REF_MAX_P) { \ + booz_stabilization_rate_ref.x = RATE_REF_MAX_P; \ if (booz_stabilization_accel_ref.x > 0) \ booz_stabilization_accel_ref.x = 0; \ } \ - else if (booz_stabilization_rate_ref.x <= -RATE_REF_MAX_PQ) { \ - booz_stabilization_rate_ref.x = -RATE_REF_MAX_PQ; \ + else if (booz_stabilization_rate_ref.x <= -RATE_REF_MAX_P) { \ + booz_stabilization_rate_ref.x = -RATE_REF_MAX_P; \ if (booz_stabilization_accel_ref.x < 0) \ booz_stabilization_accel_ref.x = 0; \ } \ - if (booz_stabilization_rate_ref.y >= RATE_REF_MAX_PQ) { \ - booz_stabilization_rate_ref.y = RATE_REF_MAX_PQ; \ + if (booz_stabilization_rate_ref.y >= RATE_REF_MAX_Q) { \ + booz_stabilization_rate_ref.y = RATE_REF_MAX_Q; \ if (booz_stabilization_accel_ref.y > 0) \ booz_stabilization_accel_ref.y = 0; \ } \ - else if (booz_stabilization_rate_ref.y <= -RATE_REF_MAX_PQ) { \ - booz_stabilization_rate_ref.y = -RATE_REF_MAX_PQ; \ + else if (booz_stabilization_rate_ref.y <= -RATE_REF_MAX_Q) { \ + booz_stabilization_rate_ref.y = -RATE_REF_MAX_Q; \ if (booz_stabilization_accel_ref.y < 0) \ booz_stabilization_accel_ref.y = 0; \ } \