diff --git a/src/modules/mc_pos_control/mc_pos_control_tests/test_controlmath.cpp b/src/modules/mc_pos_control/mc_pos_control_tests/test_controlmath.cpp index d999b4aa42..2facb40fcf 100644 --- a/src/modules/mc_pos_control/mc_pos_control_tests/test_controlmath.cpp +++ b/src/modules/mc_pos_control/mc_pos_control_tests/test_controlmath.cpp @@ -12,6 +12,7 @@ public: private: bool testConstrainTilt(); bool testConstrainPIDu(); + bool testThrAttMapping(); }; @@ -20,6 +21,7 @@ bool ControlMathTest::run_tests() { ut_run_test(testConstrainTilt); ut_run_test(testConstrainPIDu); + ut_run_test(testThrAttMapping); return (_tests_failed == 0); } @@ -212,4 +214,45 @@ bool ControlMathTest::testConstrainPIDu() return true; } +bool ControlMathTest::testThrAttMapping() +{ + + /* expected: zero roll, zero pitch, zero yaw, full thr mag + * reasone: thrust pointing full upward + */ + matrix::Vector3f thr{0.0f, 0.0f, -1.0f}; + float yaw = 0.0f; + vehicle_attitude_setpoint_s att = ControlMath::thrustToAttitude(thr, yaw); + ut_compare("", att.roll_body, EPS); + ut_assert_true(att.pitch_body < EPS); + ut_assert_true(att.yaw_body < EPS); + ut_assert_true(att.thrust - 1.0f < EPS); + + /* expected: same as before but with 90 yaw + * reason: only yaw changed + */ + yaw = M_PI_2_F; + att = ControlMath::thrustToAttitude(thr, yaw); + ut_assert_true(att.roll_body < EPS); + ut_assert_true(att.pitch_body < EPS); + ut_assert_true(att.yaw_body - M_PI_2_F < EPS); + ut_assert_true(att.thrust - 1.0f < EPS); + + /* expected: same as before but roll 180 + * reason: thrust points straight down and order Euler + * order is: 1. roll, 2. pitch, 3. yaw + */ + thr = matrix::Vector3f(0.0f, 0.0f, 1.0f); + att = ControlMath::thrustToAttitude(thr, yaw); + ut_assert_true(fabsf(att.roll_body) - M_PI_F < EPS); + ut_assert_true(fabsf(att.pitch_body) < EPS); + ut_assert_true(att.yaw_body - M_PI_2_F < EPS); + ut_assert_true(att.thrust - 1.0f < EPS); + + /* TODO: find a good way to test it */ + + + return true; +} + ut_declare_test_c(test_controlmath, ControlMathTest)