|
|
|
@ -12,6 +12,7 @@ public:
@@ -12,6 +12,7 @@ public:
|
|
|
|
|
private: |
|
|
|
|
bool testConstrainTilt(); |
|
|
|
|
bool testConstrainPIDu(); |
|
|
|
|
bool testThrAttMapping(); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
}; |
|
|
|
@ -20,6 +21,7 @@ bool ControlMathTest::run_tests()
@@ -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()
@@ -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) |
|
|
|
|