20 #include <gtest/gtest.h>
22 #include <Eigen/Geometry>
30 auto wind_mean_velocity = Eigen::Vector3d(0, 10, 0);
31 double wind_variance = 0.0;
33 Eigen::Vector3d expected_wind = Eigen::Vector3d(0, 10, 0);
35 Eigen::Vector3d actual_wind = vtolDynamicsSim.
calculateWind();
36 ASSERT_EQ(actual_wind, expected_wind);
41 Eigen::Vector3d airSpeed;
42 double result, expected;
44 std::vector<std::pair<Eigen::Vector3d, double>> dataset;
45 dataset.push_back((std::make_pair(Eigen::Vector3d(0, 0, 0), 0.0)));
47 dataset.push_back((std::make_pair(Eigen::Vector3d(10, 1, 1), 0.099669)));
48 dataset.push_back((std::make_pair(Eigen::Vector3d(1, 10, 1), 0.785398)));
49 dataset.push_back((std::make_pair(Eigen::Vector3d(1, 1, 10), 1.471128)));
50 dataset.push_back((std::make_pair(Eigen::Vector3d(1, 2, 3), 1.2490)));
52 dataset.push_back((std::make_pair(Eigen::Vector3d(-10, 1, 1), 3.041924)));
53 dataset.push_back((std::make_pair(Eigen::Vector3d(-1, 10, 1), 2.356194)));
54 dataset.push_back((std::make_pair(Eigen::Vector3d(-1, 1, 10), 1.670465)));
55 dataset.push_back((std::make_pair(Eigen::Vector3d(-1, 2, 3), 1.892547)));
57 dataset.push_back((std::make_pair(Eigen::Vector3d(10, 1, -1), -0.099669)));
58 dataset.push_back((std::make_pair(Eigen::Vector3d(1, 10, -1), -0.785398)));
59 dataset.push_back((std::make_pair(Eigen::Vector3d(1, 1, -10), -1.471128)));
60 dataset.push_back((std::make_pair(Eigen::Vector3d(1, 2, -3), -1.249046)));
62 for(
auto pair : dataset){
64 EXPECT_NEAR(result, pair.second, 0.0001);
70 Eigen::Vector3d airSpeed;
71 double result, expected;
73 std::vector<std::pair<Eigen::Vector3d, double>> dataset;
74 dataset.push_back((std::make_pair(Eigen::Vector3d(0, 0, 0), 0.0)));
76 dataset.push_back((std::make_pair(Eigen::Vector3d(10, 1, 1), 0.099177)));
77 dataset.push_back((std::make_pair(Eigen::Vector3d(1, 10, 1), 1.430307)));
78 dataset.push_back((std::make_pair(Eigen::Vector3d(1, 1, 10), 0.099177)));
79 dataset.push_back((std::make_pair(Eigen::Vector3d(1, 2, 3), 0.563943)));
81 dataset.push_back((std::make_pair(Eigen::Vector3d(10, -1, 1), -0.099177)));
82 dataset.push_back((std::make_pair(Eigen::Vector3d(1, -10, 1), -1.430307)));
83 dataset.push_back((std::make_pair(Eigen::Vector3d(1, -1, 10), -0.099177)));
84 dataset.push_back((std::make_pair(Eigen::Vector3d(1, -2, 3), -0.563943)));
86 dataset.push_back((std::make_pair(Eigen::Vector3d(10, 1, -1), 0.099177)));
87 dataset.push_back((std::make_pair(Eigen::Vector3d(1, 10, -1), 1.430307)));
88 dataset.push_back((std::make_pair(Eigen::Vector3d(1, 1, -10), 0.099177)));
89 dataset.push_back((std::make_pair(Eigen::Vector3d(1, 2, -3), 0.563943)));
91 for(
auto pair : dataset){
93 EXPECT_NEAR(result, pair.second, 0.001);
99 Eigen::MatrixXd table(8, 1);
100 table << 5, 10, 15, 20, 25, 30, 35, 40;
112 TEST(CommonMath, findPrevRowIdxInMonotonicSequenceIncreasing){
114 Eigen::MatrixXd table(8, 1);
115 table << 5, 10, 15, 20, 25, 30, 35, 40;
127 TEST(CommonMath, findPrevRowIdxInMonotonicSequenceDecreasing){
129 Eigen::MatrixXd table(8, 1);
130 table << 40, 35, 30, 25, 20, 15, 10, 5;
142 TEST(calculateCLPolynomial, test_normal_scalar){
145 Eigen::MatrixXd table(2, 2);
148 double airSpeedMod = 0.5;
149 Eigen::VectorXd polynomialCoeffs(1);
152 ASSERT_EQ(polynomialCoeffs[0], airSpeedMod);
155 TEST(calculateCLPolynomial, test_normal_vector){
157 Eigen::VectorXd polynomialCoeffs(2);
159 Eigen::MatrixXd table(2, 3);
162 double airSpeedMod = 0.5;
164 Eigen::VectorXd expectedPolynomialCoeffs(2);
165 expectedPolynomialCoeffs << 0.5, 1.5;
168 ASSERT_EQ(polynomialCoeffs[0], expectedPolynomialCoeffs[0]);
169 ASSERT_EQ(polynomialCoeffs[1], expectedPolynomialCoeffs[1]);
172 TEST(calculateCLPolynomial, test_wrong_input_size){
175 Eigen::MatrixXd table(1, 2);
177 double airSpeedMod = 0.5;
178 Eigen::VectorXd polynomialCoeffs(1);
183 TEST(calculateCLPolynomial, test_wrong_table){
186 Eigen::MatrixXd table(2, 2);
189 double airSpeedMod = 0.5;
190 Eigen::VectorXd polynomialCoeffs(1);
197 ASSERT_EQ(vtolDynamicsSim.
init(), 0);
198 Eigen::VectorXd calculatedpolynomialCoeffs(7);
199 Eigen::VectorXd expectedPolynomialCoeffs(7);
200 Eigen::VectorXd diff(7);
204 expectedPolynomialCoeffs << -3.9340e-11, 8.2040e-09, 1.9350e-07, -3.0750e-05,
205 -4.2090e-04, 0.055200, 0.44380;
207 for(
size_t idx = 0; idx < expectedPolynomialCoeffs.size(); idx++){
208 EXPECT_NEAR(calculatedpolynomialCoeffs[idx], expectedPolynomialCoeffs[idx], 0.00001);
212 expectedPolynomialCoeffs << -1.5820e-11, 8.0740e-09, 9.4100e-08, -3.1150e-05,
213 -2.8150e-04, 0.055940, 0.38260;
215 for(
size_t idx = 0; idx < expectedPolynomialCoeffs.size(); idx++){
216 EXPECT_NEAR(calculatedpolynomialCoeffs[idx], expectedPolynomialCoeffs[idx], 0.00001);
220 expectedPolynomialCoeffs << 7.7000e-12, 7.9440e-09, -5.3000e-09, -3.1550e-05,
221 -1.4210e-04, 0.056680, 0.32140;
223 for(
size_t idx = 0; idx < expectedPolynomialCoeffs.size(); idx++){
224 EXPECT_NEAR(calculatedpolynomialCoeffs[idx], expectedPolynomialCoeffs[idx], 0.00001);
228 expectedPolynomialCoeffs << -5.9110e-11, 7.8790e-09, 2.5740e-07, -2.9610e-05,
229 -4.8380e-04, 0.054580, 0.46370;
231 for(
size_t idx = 0; idx < expectedPolynomialCoeffs.size(); idx++){
232 EXPECT_NEAR(calculatedpolynomialCoeffs[idx], expectedPolynomialCoeffs[idx], 0.00001);
239 Eigen::VectorXd calculatedpolynomialCoeffs(7);
240 double airSpeedMod = 5;
248 Eigen::VectorXd calculatedpolynomialCoeffs(7);
249 double airSpeedMod = 5;
257 Eigen::VectorXd poly(7);
258 poly << 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 1.7;
260 double expected_output = 3.1859;
263 EXPECT_NEAR(actual_output, expected_output, 0.001);
268 ASSERT_EQ(vtolDynamicsSim.
init(), 0);
269 Eigen::MatrixXd x(1, 3);
270 Eigen::MatrixXd y(1, 4);
271 Eigen::MatrixXd
f(4, 3);
274 double actual_result;
275 double expected_result;
286 expected_result = 4.0;
288 EXPECT_NEAR(actual_result, expected_result, 0.001);
292 expected_result = 3.9250;
294 EXPECT_NEAR(actual_result, expected_result, 0.001);
299 ASSERT_EQ(vtolDynamicsSim.
init(), 0);
302 double rudder_position;
306 std::vector<DataSet> data_set;
309 data_set.push_back({.rudder_position = 0, .airspeed = 5, .expected = -1.5009e-04});
310 data_set.push_back({.rudder_position = 0, .airspeed = 5.1, .expected = -1.2303e-04});
311 data_set.push_back({.rudder_position = 0, .airspeed = 8.5, .expected = 5.9762e-04});
312 data_set.push_back({.rudder_position = 0, .airspeed = 8.66025, .expected = 6.0903e-04});
313 data_set.push_back({.rudder_position = 0, .airspeed = 10, .expected = 7.0445e-04});
314 data_set.push_back({.rudder_position = 0, .airspeed = 20, .expected = 9.2322e-04});
315 data_set.push_back({.rudder_position = 0, .airspeed = 40, .expected = -0.0013107});
316 data_set.push_back({.rudder_position = -20, .airspeed = 5, .expected = -0.034155});
317 data_set.push_back({.rudder_position = 0, .airspeed = 5, .expected = -1.5009e-04});
318 data_set.push_back({.rudder_position = 20, .airspeed = 5, .expected = 0.037053});
320 for(
auto test_case : data_set){
321 result = vtolDynamicsSim.
calculateCSRudder(test_case.rudder_position, test_case.airspeed);
322 EXPECT_NEAR(result, test_case.expected, 0.001);
328 ASSERT_EQ(vtolDynamicsSim.
init(), 0);
335 std::vector<DataSet> data_set;
338 data_set.push_back({.aos_degree = 0, .airspeed = 5, .expected = -0.0032540});
339 data_set.push_back({.aos_degree = 0, .airspeed = 10, .expected = -0.0040036});
340 data_set.push_back({.aos_degree = 0, .airspeed = 15, .expected = -0.0037597});
341 data_set.push_back({.aos_degree = 0, .airspeed = 20, .expected = -0.0033221});
344 for(
auto test_case : data_set){
345 result = vtolDynamicsSim.
calculateCSBeta(test_case.aos_degree, test_case.airspeed);
346 EXPECT_NEAR(result, test_case.expected, 0.0000001);
352 ASSERT_EQ(vtolDynamicsSim.
init(), 0);
353 double Cmx_aileron, airspeedNorm, aileron_pos, dynamicPressure;
354 double characteristicLength = 1.5;
358 for(aileron_pos = -2e1; aileron_pos <= 2e1; aileron_pos += 4){
360 Cmx_aileron *= 0.5 * dynamicPressure * characteristicLength;
361 std::cout << aileron_pos <<
" Cmx_aileron = " << Cmx_aileron << std::endl;
367 ASSERT_EQ(vtolDynamicsSim.
init(), 0);
368 Eigen::Vector3d Faero, Maero;
370 Eigen::Vector3d airspeed(0.000001, -9.999999, 0.000001);
371 double AoA = 0.958191;
372 double AoS = -1.570796;
373 std::array<double, 3> servos{0.0, 0.0, 0.0};
375 Eigen::Vector3d extectedFaero(-4.8133e-07, 2.9513e+01, -6.0493e-06);
376 Eigen::Vector3d extectedMaero(0.21470, 0.69480, -0.31633);
380 for(
size_t idx = 0; idx < 3; idx++){
381 EXPECT_NEAR(Faero[idx], extectedFaero[idx], 0.001);
382 EXPECT_NEAR(Maero[idx], extectedMaero[idx], 0.001);
388 ASSERT_EQ(vtolDynamicsSim.
init(), 0);
389 Eigen::Vector3d expectedResult, Faero, Maero;
391 Eigen::Vector3d airspeed(5, 5, 5);
394 std::array<double, 3> servos{0.5, 0.0, 0.0};
396 Eigen::Vector3d extectedFaero(7.4133, -4.3077, -6.6924);
397 Eigen::Vector3d extectedMaero(0.333818, 1.754507, -0.037038);
401 for(
size_t idx = 0; idx < 3; idx++){
402 EXPECT_NEAR(Faero[idx], extectedFaero[idx], 0.02);
403 EXPECT_NEAR(Maero[idx], extectedMaero[idx], 0.02);
409 ASSERT_EQ(vtolDynamicsSim.
init(), 0);
410 Eigen::Vector3d expectedResult, Faero, Maero;
412 Eigen::Vector3d airspeed(5, 5, 5);
415 std::array<double, 3> servos{0.0, 5.0, 0.0};
417 Eigen::Vector3d extectedFaero(7.4133, -4.3077, -6.6924);
418 Eigen::Vector3d extectedMaero(0.190243, 1.220935, -0.037038);
422 for(
size_t idx = 0; idx < 3; idx++){
423 EXPECT_NEAR(Faero[idx], extectedFaero[idx], 0.02);
424 EXPECT_NEAR(Maero[idx], extectedMaero[idx], 0.02);
430 ASSERT_EQ(vtolDynamicsSim.
init(), 0);
431 Eigen::Vector3d diff, expectedResult, Faero, Maero;
433 Eigen::Vector3d airspeed(5, 5, 5);
434 double AoA = 27.0 * 3.1415 / 180.0;
436 std::array<double, 3> servos{0.0, 0.0, 0.0};
438 Eigen::Vector3d extectedFaero(6.0625, -7.7260, -17.5536);
439 Eigen::Vector3d extectedMaero(0.16512, 1.26568, -0.11093);
443 for(
size_t idx = 0; idx < 3; idx++){
444 EXPECT_NEAR(Faero[idx], extectedFaero[idx], 0.04);
445 EXPECT_NEAR(Maero[idx], extectedMaero[idx], 0.04);
451 ASSERT_EQ(vtolDynamicsSim.
init(), 0);
452 Eigen::Vector3d expectedResult, Faero, Maero;
454 Eigen::Vector3d airspeed(2.93128, 0.619653, 0.266774);
455 double AoA = 45 * 3.1415 / 180.0;
456 double AoS = 11.8888 * 3.1415 / 180.0;
457 std::array<double, 3> servos{0.0, 0.0, 0.0};
459 Eigen::Vector3d extectedFaero(-2.28665, -0.92928, -2.66499);
460 Eigen::Vector3d extectedMaero(0.017652, 0.074924, -0.024468);
464 for(
size_t idx = 0; idx < 3; idx++){
465 EXPECT_NEAR(Faero[idx], extectedFaero[idx], 0.04);
466 EXPECT_NEAR(Maero[idx], extectedMaero[idx], 0.04);
470 TEST(thruster, thrusterFirstZeroCmd){
472 ASSERT_EQ(vtolDynamicsSim.
init(), 0);
474 actualThrust, actualTorque, actualRpm,
475 expectedThrust, expectedTorque, expectedRpm;
481 vtolDynamicsSim.
thruster(control, actualThrust, actualTorque, actualRpm);
482 EXPECT_NEAR(actualThrust, expectedThrust, 0.001);
483 EXPECT_NEAR(actualTorque, expectedTorque, 0.00001);
484 EXPECT_NEAR(actualRpm, expectedRpm, 0.00001);
486 TEST(thruster, thrusterSecond){
488 ASSERT_EQ(vtolDynamicsSim.
init(), 0);
490 actualThrust, actualTorque, actualRpm,
491 expectedThrust, expectedTorque, expectedRpm;
493 control = 134.254698;
494 expectedThrust = 3.590800;
495 expectedTorque = 0.013696;
496 expectedRpm = 732.298;
497 vtolDynamicsSim.
thruster(control, actualThrust, actualTorque, actualRpm);
498 EXPECT_NEAR(actualThrust, expectedThrust, 0.0001);
499 EXPECT_NEAR(actualTorque, expectedTorque, 0.000001);
500 EXPECT_NEAR(actualRpm, expectedRpm, 0.001);
504 ASSERT_EQ(vtolDynamicsSim.
init(), 0);
506 actualThrust, actualTorque, actualRpm,
507 expectedThrust, expectedTorque, expectedRpm;
509 control = 500.004648;
510 expectedThrust = 15.8930;
511 expectedTorque = 0.27273;
512 expectedRpm = 2727.3;
513 vtolDynamicsSim.
thruster(control, actualThrust, actualTorque, actualRpm);
514 EXPECT_NEAR(actualThrust, expectedThrust, 0.001);
515 EXPECT_NEAR(actualTorque, expectedTorque, 0.00001);
516 EXPECT_NEAR(actualRpm, expectedRpm, 0.2);
524 std::vector<double> motors,
525 Eigen::Vector3d Maero,
526 Eigen::Vector3d Faero,
527 Eigen::Vector3d initialLinearVelocity,
528 Eigen::Vector3d initialAngularVelocity,
529 Eigen::Vector3d initialPosition,
530 Eigen::Quaterniond initialAttitude,
531 Eigen::Vector3d& expectedAngAccel,
532 Eigen::Vector3d& expectedLinAccel,
533 Eigen::Vector3d& angularAcceleration,
534 Eigen::Vector3d& linearAcceleration){
536 ASSERT_EQ(vtolDynamicsSim.
init(), 0);
546 double dt = 0.002500;
547 std::vector<double> motors{0, 0, 0, 0, 0};
548 Eigen::Quaterniond initAttitude(1, 0.2, 0.10, 0.05);
549 Eigen::Vector3d angAccel, linAccel, diff,
550 Faero(0.0, 0.0, 0.0),
551 Maero(0.0, 0.0, 0.0),
552 initialLinVel(0, 0, 0),
555 expectedAngAccel(0.0, 0.0, 0.0),
556 expectedLinAccel(2.5377e-16, -5.0753e-16, 9.8066e+00);
559 initialLinVel, initAngVel, initPose, initAttitude,
560 expectedAngAccel, expectedLinAccel,
563 for(
size_t idx = 0; idx < 3; idx++){
564 EXPECT_NEAR(angAccel[idx], expectedAngAccel[idx], 1e-04);
565 EXPECT_NEAR(linAccel[idx], expectedLinAccel[idx], 1e-04);
570 double dt = 0.002500;
571 std::vector<double> motors{0, 0, 0, 0, 0};
572 Eigen::Quaterniond initAttitude(1, 0.00, 0.00, 0.00);
573 Eigen::Vector3d angAccel, linAccel, diff,
574 Faero(0.0, 0.0, 0.0),
575 Maero(0.0, 0.0, 0.0),
576 initialLinVel(0, 0, 0),
577 initAngVel(0.3, 0.2, 0.1),
579 expectedAngAccel(-1.9719e-02, 2.9589e-02, -8.3459e-04),
580 expectedLinAccel(9.9127e-19, 1.9825e-18, 9.8066e+00);
583 initialLinVel, initAngVel, initPose, initAttitude,
584 expectedAngAccel, expectedLinAccel,
587 for(
size_t idx = 0; idx < 3; idx++){
588 EXPECT_NEAR(angAccel[idx], expectedAngAccel[idx], 6e-05);
589 EXPECT_NEAR(linAccel[idx], expectedLinAccel[idx], 6e-05);
594 double dt = 0.002500;
595 std::vector<double> motors{0, 0, 0, 0, 0};
596 Eigen::Quaterniond initAttitude(1, 0.00, 0.00, 0.00);
597 Eigen::Vector3d angAccel, linAccel, diff,
598 Faero(5.7448e-01, 2.9513e+01, 6.1333e-01),
599 Maero(0.0, 0.0, 0.0),
600 initialLinVel(0, 0, 0),
601 initAngVel(0.0, 0.0, 0.0),
603 expectedAngAccel(0.0, 0.0, 0.0),
604 expectedLinAccel(0.082069, 4.216143, 9.894269);
607 initialLinVel, initAngVel, initPose, initAttitude,
608 expectedAngAccel, expectedLinAccel,
611 for(
size_t idx = 0; idx < 3; idx++){
612 EXPECT_NEAR(angAccel[idx], expectedAngAccel[idx], 6e-05);
613 EXPECT_NEAR(linAccel[idx], expectedLinAccel[idx], 6e-05);
618 double dt = 0.002500;
619 std::vector<double> motors{0, 0, 0, 0, 0};
620 Eigen::Quaterniond initAttitude(1, 0.00, 0.00, 0.00);
621 Eigen::Vector3d angAccel, linAccel, diff,
622 Faero(0.0, 0.0, 0.0),
623 Maero(-0.214696, -0.694801, -0.316328),
624 initialLinVel(0, 0, 0),
625 initAngVel(0.0, 0.0, 0.0),
627 expectedAngAccel(-0.34251, -1.07821, -0.25057),
628 expectedLinAccel(7.7443e-21, -3.8722e-21, 9.8066e+00);
631 initialLinVel, initAngVel, initPose, initAttitude,
632 expectedAngAccel, expectedLinAccel,
635 for(
size_t idx = 0; idx < 3; idx++){
636 EXPECT_NEAR(angAccel[idx], expectedAngAccel[idx], 6e-05);
637 EXPECT_NEAR(linAccel[idx], expectedLinAccel[idx], 6e-05);
642 double dt = 0.002500;
643 std::vector<double> motors{700, 700, 700, 700, 0};
644 Eigen::Quaterniond initAttitude(1, 0.00, 0.00, 0.00);
645 Eigen::Vector3d angAccel, linAccel, diff,
646 Faero(0.0, 0.0, 0.0),
647 Maero(0.0, 0.0, 0.0),
648 initialLinVel(0, 0, 0),
649 initAngVel(0.0, 0.0, 0.0),
651 expectedAngAccel(0.00000, 0.00000, 0.00000),
652 expectedLinAccel(0.00000, 0.00000, -6.36769);
655 initialLinVel, initAngVel, initPose, initAttitude,
656 expectedAngAccel, expectedLinAccel,
659 for(
size_t idx = 0; idx < 3; idx++){
660 EXPECT_NEAR(angAccel[idx], expectedAngAccel[idx], 6e-05);
661 EXPECT_NEAR(linAccel[idx], expectedLinAccel[idx], 6e-05);
666 double dt = 0.002500;
667 std::vector<double> motors{700, 680, 660, 640, 0};
668 Eigen::Quaterniond initAttitude(1, 0.00, 0.00, 0.00);
669 Eigen::Vector3d angAccel, linAccel, diff,
670 Faero(0.0, 0.0, 0.0),
671 Maero(0.0, 0.0, 0.0),
672 initialLinVel(0, 0, 0),
673 initAngVel(0.0, 0.0, 0.0),
675 expectedAngAccel(0.1354, 1.2944, 0.10723),
676 expectedLinAccel(-1.3753e-04, 1.2938e-05, -5.0505e+00);
679 initialLinVel, initAngVel, initPose, initAttitude,
680 expectedAngAccel, expectedLinAccel,
683 for(
size_t idx = 0; idx < 3; idx++){
684 EXPECT_NEAR(angAccel[idx], expectedAngAccel[idx], 6e-05);
685 EXPECT_NEAR(linAccel[idx], expectedLinAccel[idx], 6e-05);
690 double dt = 0.002500;
691 std::vector<double> motors{0, 0, 0, 0, 500};
692 Eigen::Quaterniond initAttitude(1, 0.00, 0.00, 0.00);
693 Eigen::Vector3d angAccel, linAccel, diff,
694 Faero(0.0, 0.0, 0.0),
695 Maero(0.0, 0.0, 0.0),
696 initialLinVel(0, 0, 0),
697 initAngVel(0.0, 0.0, 0.0),
699 expectedAngAccel(-0.43508, 0.00000, 0.00000),
700 expectedLinAccel(2.2705e+00, 3.8722e-21, 9.8066e+00);
703 initialLinVel, initAngVel, initPose, initAttitude,
704 expectedAngAccel, expectedLinAccel,
707 for(
size_t idx = 0; idx < 3; idx++){
708 EXPECT_NEAR(angAccel[idx], expectedAngAccel[idx], 6e-05);
709 EXPECT_NEAR(linAccel[idx], expectedLinAccel[idx], 6e-05);
714 double dt = 0.002500;
715 std::vector<double> motors{600, 550, 450, 500, 650};
716 Eigen::Quaterniond initAttitude(1, 0, 0, 0);
718 Eigen::Vector3d angAccel, linAccel, diff,
719 Faero(15.0, 10.0, 5.0),
720 Maero(5.0, 10.0, 15.0),
721 initialLinVel(15, 3, 1),
722 initAngVel(0.5, 0.4, 0.3),
724 expectedAngAccel(5.1203, 16.15784, 11.9625),
725 expectedLinAccel(5.60908, 1.44474, 0.80233);
728 initialLinVel, initAngVel, initPose, initAttitude,
729 expectedAngAccel, expectedLinAccel,
732 for(
size_t idx = 0; idx < 3; idx++){
733 EXPECT_NEAR(angAccel[idx], expectedAngAccel[idx], 1e-03);
734 EXPECT_NEAR(linAccel[idx], expectedLinAccel[idx], 1e-03);
739 double dt = 0.002500;
740 std::vector<double> motors{600, 550, 450, 500, 650};
741 Eigen::Quaterniond initAttitude(0.9833, 0.1436, 0.106, 0.03427);
743 Eigen::Vector3d angAccel, linAccel, diff,
744 Faero(15.0, 10.0, 5.0),
745 Maero(5.0, 10.0, 15.0),
746 initialLinVel(15, 3, 1),
747 initAngVel(0.5, 0.4, 0.3),
749 expectedAngAccel(5.1202, 16.15784, 11.9625),
750 expectedLinAccel(3.45031, 4.40765, 0.68005);
753 initialLinVel, initAngVel, initPose, initAttitude,
754 expectedAngAccel, expectedLinAccel,
757 for(
size_t idx = 0; idx < 3; idx++){
758 EXPECT_NEAR(angAccel[idx], expectedAngAccel[idx], 1e-03);
759 EXPECT_NEAR(linAccel[idx], expectedLinAccel[idx], 1e-03);
764 int main(
int argc,
char *argv[]){
765 testing::InitGoogleTest(&argc, argv);
767 return RUN_ALL_TESTS();