55 .fx_motor_squared = 0.00000735f,
56 .fx_speed_forward = -0.03f,
58 .fy_speed_lateral = -0.008f,
60 .fz_motor_squared = 0.0f,
61 .fz_speed_forward = 0.0f,
62 .fz_speed_vertical = -0.144f,
63 .fz_elevon_speed = 0.0f,
64 .fz_elevon_motor = 0.0f,
66 .mx_elevon_motor_diff = 1.9e-05f,
67 .mx_elevon_speed_diff = 0.344f,
68 .mx_angular_drag = -0.4940217f,
69 .mx_angular_coupling = -2.18f,
71 .my_speed_forward = 0.0f,
72 .my_speed_vertical = -0.0888f,
74 .my_elevon_motor_sum = -0.0000424f,
75 .my_elevon_speed_sum = 0.2525f,
76 .my_angular_sum = 1.262f,
78 .mz_speed_lateral = -0.00371f,
79 .mz_motor_diff = 0.000039f,
80 .mz_speed_roll = -0.0129f,
81 .mz_angular_coupling = -0.4827f,
109 .ce_11 = 0.0f, .ce_12 = 0.0f, .ce_13 = 3.9e-5f, .ce_14 = -3.9e-5f,
110 .ce_21 = -29.917439f, .ce_22 = -29.917439f, .ce_23 = 0.0f, .ce_24 = 0.0f,
111 .ce_31 = -19.968481f, .ce_32 = 19.968481f, .ce_33 = 0.0f, .ce_34 = 0.0f,
112 .ce_41 = 0.0f, .ce_42 = 0.0f, .ce_43 = 7e-6f, .ce_44 = 7e-6f,
134 const float body_vel[3],
const float u[4],
145 - coeff[20] *
t8 * rates[2]
146 - rates[1] * coeff[21] * rates[2];
148 + coeff[14] * (u[2] + u[3])
151 - rates[0] * coeff[17] * rates[2]
152 - coeff[16] *
t8 *
body_vel[2] * (u[0] + u[1]);
154 + coeff[10] *
fabsf(rates[2]) * rates[2]
155 - rates[0] * coeff[11] * rates[1]
156 + coeff[9] *
t8 *
body_vel[2] * (u[0] - u[1]);
202 const float vel_body[3],
const float accel_body[3],
const float u[4],
203 const float coeff[22],
float F_stb_x[4])
215 t8 = vel_body[0] * vel_body[0];
216 t9 = vel_body[1] * vel_body[1];
217 t10 = vel_body[2] * vel_body[2];
223 -
accel_body[0] * coeff[18] * vel_body[0] * vel_body[1]
224 -
accel_body[2] * coeff[18] * vel_body[1] * vel_body[2]
225 +
accel_body[0] * coeff[20] * vel_body[0] * rates[2]
226 +
accel_body[1] * coeff[20] * vel_body[1] * rates[2]
227 +
accel_body[2] * coeff[20] * vel_body[2] * rates[2]
230 + rates[1] * coeff[21] * ang_accel[2] *
et1_tmp
231 + rates[2] * coeff[21] * ang_accel[1] *
et1_tmp
242 +
accel_body[0] * coeff[12] * vel_body[0] * vel_body[2]
243 -
accel_body[1] * coeff[13] * vel_body[0] * vel_body[1]
244 +
accel_body[1] * coeff[12] * vel_body[1] * vel_body[2]
245 -
accel_body[1] * coeff[12] * vel_body[1] * vel_body[2]
246 -
accel_body[2] * coeff[13] * vel_body[0] * vel_body[2]
249 + rates[0] * coeff[17] * ang_accel[2] *
et1_tmp
250 + rates[2] * coeff[17] * ang_accel[0] *
et1_tmp
261 - rates[0] * coeff[11] * ang_accel[1]
262 - rates[1] * coeff[11] * ang_accel[0]
263 + 2.0F * coeff[10] *
fabsf(rates[2]) * ang_accel[2]
void cyclone_f_stb_x(const float rates[3], const float ang_accel[3], const float vel_body[3], const float accel_body[3], const float u[4], const float coeff[22], float F_stb_x[4])
struct FloatVect3 evaluate_obm_forces(const struct FloatRates *rates, const struct FloatVect3 *vel_body, const float actuator_state[ANDI_NUM_ACT])
Evaluate total force acting on the vehicle from the OBM.
struct FloatVect3 evaluate_obm_moments(const struct FloatRates *rates, const struct FloatVect3 *vel_body, const float actuator_state[ANDI_NUM_ACT])
Evaluate total moments acting on the vehicle from the OBM.
void evaluate_obm_f_stb_u(float fu_mat[ANDI_NUM_ACT *ANDI_OUTPUTS], const struct FloatRates *rates, const struct FloatVect3 *vel_body, const float actuator_state[ANDI_NUM_ACT])
Evaluate the state-dependent control effectiveness matrix F_u for stabilization.
void evaluate_obm_f_stb_x(float nu_obm[ANDI_OUTPUTS], const struct FloatRates *rates, const struct FloatVect3 *vel_body, const struct FloatVect3 *ang_accel, const struct FloatVect3 *accel_body, const float actuator_state[ANDI_NUM_ACT])
Evaluate the state-dependent contribution F_x * x_dot for stabilization.
static void cyclone_obm_moments(const float rates[3], const float body_vel[3], const float u[4], const float coeff[22], float F_obm_moments[3])