28 double omega_y,
double omega_z,
double *
alpha,
43 a_idx_0_tmp = a * 0.0;
44 a_idx_1_tmp = a * -omega_x;
45 a_idx_2_tmp = a * -omega_y;
46 a_idx_3_tmp = a * -omega_z;
47 b_a_idx_0_tmp = a * omega_x;
48 b_a_idx_2_tmp = a * omega_z;
49 c_a_idx_0_tmp = a * omega_y;
51 dv[1] += b_a_idx_0_tmp;
52 dv[2] += c_a_idx_0_tmp;
53 dv[3] += b_a_idx_2_tmp;
57 dv[7] += c_a_idx_0_tmp;
59 dv[9] += b_a_idx_2_tmp;
60 dv[10] += a_idx_0_tmp;
61 dv[11] += a_idx_1_tmp;
62 dv[12] += a_idx_3_tmp;
63 dv[13] += a_idx_2_tmp;
64 dv[14] += b_a_idx_0_tmp;
65 dv[15] += a_idx_0_tmp;
67 c_a_idx_0_tmp = quat[1];
68 a_idx_0_tmp = quat[2];
69 a_idx_1_tmp = quat[3];
70 for (i = 0; i < 4; i++) {
72 ((dv[i] * a + dv[i + 4] * c_a_idx_0_tmp) + dv[i + 8] * a_idx_0_tmp) +
73 dv[i + 12] * a_idx_1_tmp;
75 *
alpha = acos(2.0 * (quat[0] * quat[0] + quat[3] * quat[3]) - 1.0);
void attitude_estimation(const double quat[4], double ts, double omega_x, double omega_y, double omega_z, double *alpha, double quat_new[4])
Propagates the rocket's attitude quaternion and calculates the angle from vertical.
A temporary, gyroscope-based attitude estimator.
void eye_attitude(double b_I[16])
Creates a 4x4 identity matrix, typically for attitude calculations.
Utility functions for creating identity matrices of various sizes.