mirror of
https://github.com/paparazzi/paparazzi.git
synced 2026-05-30 11:37:06 +08:00
*** empty log message ***
This commit is contained in:
@@ -141,7 +141,7 @@
|
|||||||
|
|
||||||
<section name="AUTOPILOT">
|
<section name="AUTOPILOT">
|
||||||
<define name="BOOZ2_MODE_MANUAL" value="BOOZ2_AP_MODE_ATTITUDE_DIRECT"/>
|
<define name="BOOZ2_MODE_MANUAL" value="BOOZ2_AP_MODE_ATTITUDE_DIRECT"/>
|
||||||
<define name="BOOZ2_MODE_AUTO1" value="BOOZ2_AP_MODE_ATTITUDE_Z_HOLD"/>
|
<define name="BOOZ2_MODE_AUTO1" value="BOOZ2_AP_MODE_ATTITUDE_RC_CLIMB"/>
|
||||||
<define name="BOOZ2_MODE_AUTO2" value="BOOZ2_AP_MODE_HOVER_Z_HOLD"/>
|
<define name="BOOZ2_MODE_AUTO2" value="BOOZ2_AP_MODE_HOVER_Z_HOLD"/>
|
||||||
</section>
|
</section>
|
||||||
|
|
||||||
@@ -152,7 +152,7 @@
|
|||||||
|
|
||||||
<makefile>
|
<makefile>
|
||||||
# prevents motors from ever starting
|
# prevents motors from ever starting
|
||||||
ap.CFLAGS += -DKILL_MOTORS
|
#ap.CFLAGS += -DKILL_MOTORS
|
||||||
|
|
||||||
include $(PAPARAZZI_SRC)/conf/autopilot/booz2_autopilot.makefile
|
include $(PAPARAZZI_SRC)/conf/autopilot/booz2_autopilot.makefile
|
||||||
include $(PAPARAZZI_SRC)/conf/autopilot/booz2_test_progs.makefile
|
include $(PAPARAZZI_SRC)/conf/autopilot/booz2_test_progs.makefile
|
||||||
|
|||||||
@@ -52,9 +52,9 @@
|
|||||||
<define name="MAG_Y_SENS" value="5.10207664" integer="16"/>
|
<define name="MAG_Y_SENS" value="5.10207664" integer="16"/>
|
||||||
<define name="MAG_Z_SENS" value="-4.90788848" integer="16"/>
|
<define name="MAG_Z_SENS" value="-4.90788848" integer="16"/>
|
||||||
|
|
||||||
<define name="BODY_TO_IMU_PHI" value="ANGLE_BFP(RadOfDeg(10.66))"/>
|
<define name="BODY_TO_IMU_PHI" value="ANGLE_BFP_OF_REAL(RadOfDeg(10.66))"/>
|
||||||
<define name="BODY_TO_IMU_THETA" value="ANGLE_BFP(RadOfDeg(-0.7))"/>
|
<define name="BODY_TO_IMU_THETA" value="ANGLE_BFP_OF_REAL(RadOfDeg(-0.7))"/>
|
||||||
<define name="BODY_TO_IMU_PSI" value="ANGLE_BFP(RadOfDeg(0.))"/>
|
<define name="BODY_TO_IMU_PSI" value="ANGLE_BFP_OF_REAL(RadOfDeg(0.))"/>
|
||||||
|
|
||||||
</section>
|
</section>
|
||||||
|
|
||||||
@@ -106,8 +106,8 @@
|
|||||||
<define name="MAX_ERR_Z" value="BOOZ_POS_I_OF_F( 10.)"/>
|
<define name="MAX_ERR_Z" value="BOOZ_POS_I_OF_F( 10.)"/>
|
||||||
<define name="MIN_ERR_ZD" value="BOOZ_SPEED_I_OF_F(-10.)"/>
|
<define name="MIN_ERR_ZD" value="BOOZ_SPEED_I_OF_F(-10.)"/>
|
||||||
<define name="MAX_ERR_ZD" value="BOOZ_SPEED_I_OF_F( 10.)"/>
|
<define name="MAX_ERR_ZD" value="BOOZ_SPEED_I_OF_F( 10.)"/>
|
||||||
<define name="HOVER_KP" value="-300"/>
|
<define name="HOVER_KP" value="-500"/>
|
||||||
<define name="HOVER_KD" value="-150"/>
|
<define name="HOVER_KD" value="-250"/>
|
||||||
<!-- BOOZ_SPEED_I_OF_F(1.5) / (MAX_PPRZ/2) -->
|
<!-- BOOZ_SPEED_I_OF_F(1.5) / (MAX_PPRZ/2) -->
|
||||||
<define name="RC_CLIMB_COEF" value ="163"/>
|
<define name="RC_CLIMB_COEF" value ="163"/>
|
||||||
<!-- BOOZ_SPEED_I_OF_F(1.5) * 20% -->
|
<!-- BOOZ_SPEED_I_OF_F(1.5) * 20% -->
|
||||||
|
|||||||
@@ -165,7 +165,7 @@ void booz_ahrs_propagate(void) {
|
|||||||
INT32_RMAT_OF_EULERS(booz_ahrs.ltp_to_imu_rmat, booz_ahrs.ltp_to_imu_euler);
|
INT32_RMAT_OF_EULERS(booz_ahrs.ltp_to_imu_rmat, booz_ahrs.ltp_to_imu_euler);
|
||||||
|
|
||||||
/* Compute LTP to BODY quaternion */
|
/* Compute LTP to BODY quaternion */
|
||||||
INT32_QUAT_DIV(booz_ahrs.ltp_to_body_quat, booz_imu.body_to_imu_quat, booz_ahrs.ltp_to_imu_quat);
|
INT32_QUAT_COMP_INV(booz_ahrs.ltp_to_body_quat, booz_imu.body_to_imu_quat, booz_ahrs.ltp_to_imu_quat);
|
||||||
/* Compute LTP to BODY rotation matrix */
|
/* Compute LTP to BODY rotation matrix */
|
||||||
INT32_RMAT_COMP_INV(booz_ahrs.ltp_to_body_rmat, booz_ahrs.ltp_to_imu_rmat, booz_imu.body_to_imu_rmat);
|
INT32_RMAT_COMP_INV(booz_ahrs.ltp_to_body_rmat, booz_ahrs.ltp_to_imu_rmat, booz_imu.body_to_imu_rmat);
|
||||||
/* compute LTP to BODY eulers */
|
/* compute LTP to BODY eulers */
|
||||||
|
|||||||
@@ -168,25 +168,21 @@ struct FloatRates {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* _a2c = _a2b comp _b2c , aka _a2c = _b2c * _a2b */
|
/* _a2c = _a2b comp _b2c , aka _a2c = _b2c * _a2b */
|
||||||
#define FLOAT_QUAT_COMP(_a2c, _a2b, _b2c) FLOAT_QUAT_MULT(_a2c, _a2b, _b2c)
|
#define FLOAT_QUAT_COMP(_a2c, _a2b, _b2c) { \
|
||||||
|
(_a2c).qi = (_a2b).qi*(_b2c).qi - (_a2b).qx*(_b2c).qx - (_a2b).qy*(_b2c).qy - (_a2b).qz*(_b2c).qz; \
|
||||||
|
(_a2c).qx = (_a2b).qi*(_b2c).qx + (_a2b).qx*(_b2c).qi + (_a2b).qy*(_b2c).qz - (_a2b).qz*(_b2c).qy; \
|
||||||
|
(_a2c).qy = (_a2b).qi*(_b2c).qy - (_a2b).qx*(_b2c).qz + (_a2b).qy*(_b2c).qi + (_a2b).qz*(_b2c).qx; \
|
||||||
|
(_a2c).qz = (_a2b).qi*(_b2c).qz + (_a2b).qx*(_b2c).qy - (_a2b).qy*(_b2c).qx + (_a2b).qz*(_b2c).qi; \
|
||||||
|
}
|
||||||
|
|
||||||
/* _a2b = _a2b comp_inv _b2c , aka _a2b = inv(_b2c) * _a2c */
|
/* _a2b = _a2b comp_inv _b2c , aka _a2b = inv(_b2c) * _a2c */
|
||||||
#define FLOAT_QUAT_COMP_INV(_a2b, _a2c, _b2c) FLOAT_QUAT_DIV(_a2b, _a2c, _b2c)
|
#define FLOAT_QUAT_COMP_INV(_a2b, _a2c, _b2c) { \
|
||||||
|
(_a2b).qi = (_a2c).qi*(_b2c).qi + (_a2c).qx*(_b2c).qx + (_a2c).qy*(_b2c).qy + (_a2c).qz*(_b2c).qz; \
|
||||||
|
(_a2b).qx = -(_a2c).qi*(_b2c).qx + (_a2c).qx*(_b2c).qi - (_a2c).qy*(_b2c).qz + (_a2c).qz*(_b2c).qy; \
|
||||||
#define FLOAT_QUAT_MULT(_c, _a, _b) { \
|
(_a2b).qy = -(_a2c).qi*(_b2c).qy + (_a2c).qx*(_b2c).qz + (_a2c).qy*(_b2c).qi - (_a2c).qz*(_b2c).qx; \
|
||||||
(_c).qi = (_a).qi*(_b).qi - (_a).qx*(_b).qx - (_a).qy*(_b).qy - (_a).qz*(_b).qz; \
|
(_a2b).qz = -(_a2c).qi*(_b2c).qz - (_a2c).qx*(_b2c).qy + (_a2c).qy*(_b2c).qx + (_a2c).qz*(_b2c).qi; \
|
||||||
(_c).qx = (_a).qi*(_b).qx + (_a).qx*(_b).qi + (_a).qy*(_b).qz - (_a).qz*(_b).qy; \
|
|
||||||
(_c).qy = (_a).qi*(_b).qy - (_a).qx*(_b).qz + (_a).qy*(_b).qi + (_a).qz*(_b).qx; \
|
|
||||||
(_c).qz = (_a).qi*(_b).qz + (_a).qx*(_b).qy - (_a).qy*(_b).qx + (_a).qz*(_b).qi; \
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#define FLOAT_QUAT_DIV(b, a, c) { \
|
|
||||||
b.qi = c.qi*a.qi + c.qx*a.qx + c.qy*a.qy + c.qz*a.qz; \
|
|
||||||
b.qx = c.qx*a.qi - c.qi*a.qx - c.qz*a.qy + c.qy*a.qz; \
|
|
||||||
b.qy = c.qy*a.qi + c.qz*a.qx - c.qi*a.qy - c.qx*a.qz; \
|
|
||||||
b.qz = c.qz*a.qi - c.qy*a.qx + c.qx*a.qy - c.qi*a.qz; \
|
|
||||||
}
|
|
||||||
|
|
||||||
#define FLOAT_QUAT_VMULT(v_out, q, v_in) { \
|
#define FLOAT_QUAT_VMULT(v_out, q, v_in) { \
|
||||||
const float qi2 = q.qi*q.qi; \
|
const float qi2 = q.qi*q.qi; \
|
||||||
|
|||||||
@@ -287,34 +287,28 @@ struct Int64Vect3 {
|
|||||||
#define INT32_QUAT_NORMALISE(q) { \
|
#define INT32_QUAT_NORMALISE(q) { \
|
||||||
int32_t n; \
|
int32_t n; \
|
||||||
INT32_QUAT_NORM(n, q); \
|
INT32_QUAT_NORM(n, q); \
|
||||||
q.qi = q.qi * QUAT1_BFP_OF_REAL(1) / n; \
|
q.qi = q.qi * QUAT1_BFP_OF_REAL(1) / n; \
|
||||||
q.qx = q.qx * QUAT1_BFP_OF_REAL(1) / n; \
|
q.qx = q.qx * QUAT1_BFP_OF_REAL(1) / n; \
|
||||||
q.qy = q.qy * QUAT1_BFP_OF_REAL(1) / n; \
|
q.qy = q.qy * QUAT1_BFP_OF_REAL(1) / n; \
|
||||||
q.qz = q.qz * QUAT1_BFP_OF_REAL(1) / n; \
|
q.qz = q.qz * QUAT1_BFP_OF_REAL(1) / n; \
|
||||||
}
|
}
|
||||||
|
|
||||||
/* _a2c = _a2b comp _b2c , aka _a2c = _b2c * _a2b */
|
/* _a2c = _a2b comp _b2c , aka _a2c = _b2c * _a2b */
|
||||||
#define INT32_QUAT_COMP(_a2c, _a2b, _b2c) INT32_QUAT_MULT(_a2c, _a2b, _b2c)
|
#define INT32_QUAT_COMP(_a2c, _a2b, _b2c) { \
|
||||||
|
(_a2c).qi = ((_a2b).qi*(_b2c).qi - (_a2b).qx*(_b2c).qx - (_a2b).qy*(_b2c).qy - (_a2b).qz*(_b2c).qz)>>INT32_QUAT_FRAC; \
|
||||||
|
(_a2c).qx = ((_a2b).qi*(_b2c).qx + (_a2b).qx*(_b2c).qi + (_a2b).qy*(_b2c).qz - (_a2b).qz*(_b2c).qy)>>INT32_QUAT_FRAC; \
|
||||||
|
(_a2c).qy = ((_a2b).qi*(_b2c).qy - (_a2b).qx*(_b2c).qz + (_a2b).qy*(_b2c).qi + (_a2b).qz*(_b2c).qx)>>INT32_QUAT_FRAC; \
|
||||||
|
(_a2c).qz = ((_a2b).qi*(_b2c).qz + (_a2b).qx*(_b2c).qy - (_a2b).qy*(_b2c).qx + (_a2b).qz*(_b2c).qi)>>INT32_QUAT_FRAC; \
|
||||||
|
}
|
||||||
|
|
||||||
/* _a2b = _a2b comp_inv _b2c , aka _a2b = inv(_b2c) * _a2c */
|
/* _a2b = _a2b comp_inv _b2c , aka _a2b = inv(_b2c) * _a2c */
|
||||||
#define INT32_QUAT_COMP_INV(_a2b, _a2c, _b2c) INT32_QUAT_DIV(_a2b, _a2c, _b2c)
|
#define INT32_QUAT_COMP_INV(_a2b, _a2c, _b2c) { \
|
||||||
|
(_a2b).qi = ( (_a2c).qi*(_b2c).qi + (_a2c).qx*(_b2c).qx + (_a2c).qy*(_b2c).qy + (_a2c).qz*(_b2c).qz)>>INT32_QUAT_FRAC; \
|
||||||
|
(_a2b).qx = (-(_a2c).qi*(_b2c).qx + (_a2c).qx*(_b2c).qi - (_a2c).qy*(_b2c).qz + (_a2c).qz*(_b2c).qy)>>INT32_QUAT_FRAC; \
|
||||||
#define INT32_QUAT_MULT(c, a, b) { \
|
(_a2b).qy = (-(_a2c).qi*(_b2c).qy + (_a2c).qx*(_b2c).qz + (_a2c).qy*(_b2c).qi - (_a2c).qz*(_b2c).qx)>>INT32_QUAT_FRAC; \
|
||||||
c.qi = (a.qi*b.qi - a.qx*b.qx - a.qy*b.qy - a.qz*b.qz)>>INT32_QUAT_FRAC; \
|
(_a2b).qz = (-(_a2c).qi*(_b2c).qz - (_a2c).qx*(_b2c).qy + (_a2c).qy*(_b2c).qx + (_a2c).qz*(_b2c).qi)>>INT32_QUAT_FRAC; \
|
||||||
c.qx = (a.qi*b.qx + a.qx*b.qi + a.qy*b.qz - a.qz*b.qy)>>INT32_QUAT_FRAC; \
|
|
||||||
c.qy = (a.qi*b.qy - a.qx*b.qz + a.qy*b.qi + a.qz*b.qx)>>INT32_QUAT_FRAC; \
|
|
||||||
c.qz = (a.qi*b.qz + a.qx*b.qy - a.qy*b.qx + a.qz*b.qi)>>INT32_QUAT_FRAC; \
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#define INT32_QUAT_DIV(b, a, c) { \
|
|
||||||
b.qi = (c.qi*a.qi + c.qx*a.qx + c.qy*a.qy + c.qz*a.qz)>>IQUAT_RES; \
|
|
||||||
b.qx = (c.qx*a.qi - c.qi*a.qx - c.qz*a.qy + c.qy*a.qz)>>IQUAT_RES; \
|
|
||||||
b.qy = (c.qy*a.qi + c.qz*a.qx - c.qi*a.qy - c.qx*a.qz)>>IQUAT_RES; \
|
|
||||||
b.qz = (c.qz*a.qi - c.qy*a.qx + c.qx*a.qy - c.qi*a.qz)>>IQUAT_RES; \
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#define INT32_QUAT_VMULT(v_out, q, v_in) { \
|
#define INT32_QUAT_VMULT(v_out, q, v_in) { \
|
||||||
const int32_t qi2 = (q.qi*q.qi)>>INT32_QUAT_FRAC; \
|
const int32_t qi2 = (q.qi*q.qi)>>INT32_QUAT_FRAC; \
|
||||||
|
|||||||
@@ -165,7 +165,7 @@ static void test_3(void) {
|
|||||||
|
|
||||||
/* Compute LTP to BODY quaternion */
|
/* Compute LTP to BODY quaternion */
|
||||||
struct Int32Quat l2b_q;
|
struct Int32Quat l2b_q;
|
||||||
INT32_QUAT_DIV(l2b_q, b2i_q, l2i_q);
|
INT32_QUAT_COMP_INV(l2b_q, b2i_q, l2i_q);
|
||||||
DISPLAY_INT32_QUAT_AS_EULERS_DEG("l2b_q", l2b_q);
|
DISPLAY_INT32_QUAT_AS_EULERS_DEG("l2b_q", l2b_q);
|
||||||
|
|
||||||
/* Compute LTP to BODY rotation matrix */
|
/* Compute LTP to BODY rotation matrix */
|
||||||
@@ -344,36 +344,6 @@ static void test_6(void) {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void test_7(void) {
|
|
||||||
printf("\n");
|
|
||||||
struct FloatEulers ea2c;
|
|
||||||
EULERS_ASSIGN(ea2c, RadOfDeg(29.742755), RadOfDeg(-40.966522), RadOfDeg(69.467265));
|
|
||||||
DISPLAY_FLOAT_EULERS_DEG("ea2c", ea2c);
|
|
||||||
|
|
||||||
struct FloatEulers eb2c;
|
|
||||||
EULERS_ASSIGN(eb2c, RadOfDeg(0.), RadOfDeg(0.), RadOfDeg(90.));
|
|
||||||
DISPLAY_FLOAT_EULERS_DEG("eb2c", eb2c);
|
|
||||||
struct FloatRMat fa2c;
|
|
||||||
FLOAT_RMAT_OF_EULERS(fa2c, ea2c);
|
|
||||||
struct FloatRMat fb2c;
|
|
||||||
FLOAT_RMAT_OF_EULERS(fb2c, eb2c);
|
|
||||||
|
|
||||||
printf("\n");
|
|
||||||
test_rmat_comp_inv(fa2c, fb2c, 1);
|
|
||||||
|
|
||||||
struct FloatQuat qa2c;
|
|
||||||
FLOAT_QUAT_OF_EULERS(qa2c, ea2c);
|
|
||||||
struct FloatQuat qb2c;
|
|
||||||
FLOAT_QUAT_OF_EULERS(qb2c, eb2c);
|
|
||||||
|
|
||||||
printf("\n");
|
|
||||||
test_quat_comp_inv(qa2c, qb2c, 1);
|
|
||||||
printf("\n");
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
float test_rmat_comp(struct FloatRMat ma2b_f, struct FloatRMat mb2c_f, int display) {
|
float test_rmat_comp(struct FloatRMat ma2b_f, struct FloatRMat mb2c_f, int display) {
|
||||||
@@ -402,33 +372,6 @@ float test_rmat_comp(struct FloatRMat ma2b_f, struct FloatRMat mb2c_f, int displ
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
float test_rmat_comp_inv(struct FloatRMat ma2c_f, struct FloatRMat mb2c_f, int display) {
|
|
||||||
|
|
||||||
struct FloatRMat ma2b_f;
|
|
||||||
FLOAT_RMAT_COMP_INV(ma2b_f, ma2c_f, mb2c_f);
|
|
||||||
struct Int32RMat ma2c_i;
|
|
||||||
RMAT_BFP_OF_REAL(ma2c_i, ma2c_f);
|
|
||||||
struct Int32RMat mb2c_i;
|
|
||||||
RMAT_BFP_OF_REAL(mb2c_i, mb2c_f);
|
|
||||||
struct Int32RMat ma2b_i;
|
|
||||||
INT32_RMAT_COMP_INV(ma2b_i, ma2c_i, mb2c_i);
|
|
||||||
|
|
||||||
struct FloatRMat err;
|
|
||||||
RMAT_DIFF(err, ma2b_f, ma2b_i);
|
|
||||||
float norm_err = FLOAT_RMAT_NORM(err);
|
|
||||||
|
|
||||||
if (display) {
|
|
||||||
printf("rmap comp_inv\n");
|
|
||||||
DISPLAY_FLOAT_RMAT_AS_EULERS_DEG("a2cf", ma2b_f);
|
|
||||||
DISPLAY_INT32_RMAT_AS_EULERS_DEG("a2ci", ma2b_i);
|
|
||||||
}
|
|
||||||
|
|
||||||
return norm_err;
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
float test_quat_comp(struct FloatQuat qa2b_f, struct FloatQuat qb2c_f, int display) {
|
float test_quat_comp(struct FloatQuat qa2b_f, struct FloatQuat qb2c_f, int display) {
|
||||||
|
|
||||||
struct FloatQuat qa2c_f;
|
struct FloatQuat qa2c_f;
|
||||||
@@ -454,6 +397,63 @@ float test_quat_comp(struct FloatQuat qa2b_f, struct FloatQuat qb2c_f, int displ
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
static void test_7(void) {
|
||||||
|
printf("\n");
|
||||||
|
struct FloatEulers ea2c;
|
||||||
|
EULERS_ASSIGN(ea2c, RadOfDeg(29.742755), RadOfDeg(-40.966522), RadOfDeg(69.467265));
|
||||||
|
DISPLAY_FLOAT_EULERS_DEG("ea2c", ea2c);
|
||||||
|
|
||||||
|
struct FloatEulers eb2c;
|
||||||
|
EULERS_ASSIGN(eb2c, RadOfDeg(0.), RadOfDeg(0.), RadOfDeg(90.));
|
||||||
|
DISPLAY_FLOAT_EULERS_DEG("eb2c", eb2c);
|
||||||
|
struct FloatRMat fa2c;
|
||||||
|
FLOAT_RMAT_OF_EULERS(fa2c, ea2c);
|
||||||
|
struct FloatRMat fb2c;
|
||||||
|
FLOAT_RMAT_OF_EULERS(fb2c, eb2c);
|
||||||
|
|
||||||
|
printf("\n");
|
||||||
|
test_rmat_comp_inv(fa2c, fb2c, 1);
|
||||||
|
|
||||||
|
struct FloatQuat qa2c;
|
||||||
|
FLOAT_QUAT_OF_EULERS(qa2c, ea2c);
|
||||||
|
struct FloatQuat qb2c;
|
||||||
|
FLOAT_QUAT_OF_EULERS(qb2c, eb2c);
|
||||||
|
|
||||||
|
printf("\n");
|
||||||
|
test_quat_comp_inv(qa2c, qb2c, 1);
|
||||||
|
printf("\n");
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
float test_rmat_comp_inv(struct FloatRMat ma2c_f, struct FloatRMat mb2c_f, int display) {
|
||||||
|
|
||||||
|
struct FloatRMat ma2b_f;
|
||||||
|
FLOAT_RMAT_COMP_INV(ma2b_f, ma2c_f, mb2c_f);
|
||||||
|
struct Int32RMat ma2c_i;
|
||||||
|
RMAT_BFP_OF_REAL(ma2c_i, ma2c_f);
|
||||||
|
struct Int32RMat mb2c_i;
|
||||||
|
RMAT_BFP_OF_REAL(mb2c_i, mb2c_f);
|
||||||
|
struct Int32RMat ma2b_i;
|
||||||
|
INT32_RMAT_COMP_INV(ma2b_i, ma2c_i, mb2c_i);
|
||||||
|
|
||||||
|
struct FloatRMat err;
|
||||||
|
RMAT_DIFF(err, ma2b_f, ma2b_i);
|
||||||
|
float norm_err = FLOAT_RMAT_NORM(err);
|
||||||
|
|
||||||
|
if (display) {
|
||||||
|
printf("rmap comp_inv\n");
|
||||||
|
DISPLAY_FLOAT_RMAT_AS_EULERS_DEG("a2cf", ma2b_f);
|
||||||
|
DISPLAY_INT32_RMAT_AS_EULERS_DEG("a2ci", ma2b_i);
|
||||||
|
}
|
||||||
|
|
||||||
|
return norm_err;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
float test_quat_comp_inv(struct FloatQuat qa2c_f, struct FloatQuat qb2c_f, int display) {
|
float test_quat_comp_inv(struct FloatQuat qa2c_f, struct FloatQuat qb2c_f, int display) {
|
||||||
|
|
||||||
struct FloatQuat qa2b_f;
|
struct FloatQuat qa2b_f;
|
||||||
|
|||||||
Reference in New Issue
Block a user