5 #define FILTER_ITERATIONS 10000 8 template <WorldFrame::WorldFrame FRAME>
10 float Ax,
float Ay,
float Az,
11 float Mx,
float My,
float Mz,
12 double& q0,
double& q1,
double& q2,
double& q3) {
14 float Gx = 0.0, Gy = 0.0, Gz = 0.0;
32 template <WorldFrame::WorldFrame FRAME>
34 float Ax,
float Ay,
float Az,
35 double& q0,
double& q1,
double& q2,
double& q3) {
37 float Gx = 0.0, Gy = 0.0, Gz = 0.0;
55 #define TEST_STATIONARY_ENU(in_am, exp_result) \ 56 TEST(MadgwickTest, Stationary_ENU_ ## in_am){ \ 57 double q0 = .5, q1 = .5, q2 = .5, q3 = .5; \ 58 filterStationary<WorldFrame::ENU>(in_am, q0, q1, q2, q3); \ 59 ASSERT_IS_NORMALIZED(q0, q1, q2, q3); \ 60 ASSERT_QUAT_EQUAL(q0, q1, q2, q3, exp_result); } \ 61 TEST(MadgwickTest, Stationary_ENU_NM_ ## in_am){ \ 62 double q0 = .5, q1 = .5, q2 = .5, q3 = .5; \ 63 filterStationary<WorldFrame::ENU>(ACCEL_ONLY(in_am), q0, q1, q2, q3); \ 64 ASSERT_IS_NORMALIZED(q0, q1, q2, q3); \ 65 ASSERT_QUAT_EQUAL_EX_Z(q0, q1, q2, q3, exp_result); } 67 #define TEST_STATIONARY_NED(in_am, exp_result) \ 68 TEST(MadgwickTest, Stationary_NED_ ## in_am){ \ 69 double q0 = .5, q1 = .5, q2 = .5, q3 = .5; \ 70 filterStationary<WorldFrame::NED>(in_am, q0, q1, q2, q3); \ 71 ASSERT_IS_NORMALIZED(q0, q1, q2, q3); \ 72 ASSERT_QUAT_EQUAL(q0, q1, q2, q3, exp_result); } \ 73 TEST(MadgwickTest, Stationary_NED_NM_ ## in_am){ \ 74 double q0 = .5, q1 = .5, q2 = .5, q3 = .5; \ 75 filterStationary<WorldFrame::NED>(ACCEL_ONLY(in_am), q0, q1, q2, q3); \ 76 ASSERT_IS_NORMALIZED(q0, q1, q2, q3); \ 77 ASSERT_QUAT_EQUAL_EX_Z(q0, q1, q2, q3, exp_result); } 79 #define TEST_STATIONARY_NWU(in_am, exp_result) \ 80 TEST(MadgwickTest, Stationary_NWU_ ## in_am){ \ 81 double q0 = .5, q1 = .5, q2 = .5, q3 = .5; \ 82 filterStationary<WorldFrame::NWU>(in_am, q0, q1, q2, q3); \ 83 ASSERT_IS_NORMALIZED(q0, q1, q2, q3); \ 84 ASSERT_QUAT_EQUAL(q0, q1, q2, q3, exp_result); } \ 85 TEST(MadgwickTest, Stationary_NWU_NM_ ## in_am){ \ 86 double q0 = .5, q1 = .5, q2 = .5, q3 = .5; \ 87 filterStationary<WorldFrame::NWU>(ACCEL_ONLY(in_am), q0, q1, q2, q3); \ 88 ASSERT_IS_NORMALIZED(q0, q1, q2, q3); \ 89 ASSERT_QUAT_EQUAL_EX_Z(q0, q1, q2, q3, exp_result); } 109 TEST(MadgwickTest, TestQuatEqNoZ) {
118 int main(
int argc,
char **argv){
119 testing::InitGoogleTest(&argc, argv);
120 return RUN_ALL_TESTS();
int main(int argc, char **argv)
#define QUAT_WEST_NORTH_DOWN_RSD_ENU
#define QUAT_NE_NW_UP_RSD_ENU
#define QUAT_WEST_NORTH_DOWN_RSD_NED
void setOrientation(double q0, double q1, double q2, double q3)
void madgwickAHRSupdate(float gx, float gy, float gz, float ax, float ay, float az, float mx, float my, float mz, float dt)
void getOrientation(double &q0, double &q1, double &q2, double &q3)
#define TEST_STATIONARY_NWU(in_am, exp_result)
#define AM_NORTH_EAST_DOWN
static bool quat_eq_ex_z(T q0, T q1, T q2, T q3, T qr0, T qr1, T qr2, T qr3)
void setAlgorithmGain(double gain)
#define TEST_STATIONARY_ENU(in_am, exp_result)
void madgwickAHRSupdateIMU(float gx, float gy, float gz, float ax, float ay, float az, float dt)
void setWorldFrame(WorldFrame::WorldFrame frame)
TEST(MadgwickTest, TestQuatEqNoZ)
#define FILTER_ITERATIONS
void filterStationary(float Ax, float Ay, float Az, float Mx, float My, float Mz, double &q0, double &q1, double &q2, double &q3)
#define AM_WEST_NORTH_DOWN_RSD
#define QUAT_NE_NW_UP_RSD_NWU
#define QUAT_NE_NW_UP_RSD_NED
void setDriftBiasGain(double zeta)
#define TEST_STATIONARY_NED(in_am, exp_result)
#define QUAT_WEST_NORTH_DOWN_RSD_NWU