39 #include <gtest/gtest.h>
44 TEST(IntegratorTest, RungeKutta)
47 const auto horizon = 0.4;
49 const auto N =
static_cast<unsigned int>(horizon / dt);
54 const arma::vec x0 = { 0.0, 0.0, 0.0 };
56 const arma::mat xt = rk4.
solve(cart, x0, ut, horizon);
59 ASSERT_DOUBLE_EQ(xt(0, 0), 0.01);
60 ASSERT_DOUBLE_EQ(xt(0, 1), 0.02);
61 ASSERT_DOUBLE_EQ(xt(0, 2), 0.03);
62 ASSERT_DOUBLE_EQ(xt(0, 3), 0.04);
64 ASSERT_DOUBLE_EQ(xt(1, 0), 0.0);
65 ASSERT_DOUBLE_EQ(xt(1, 1), 0.0);
66 ASSERT_DOUBLE_EQ(xt(1, 2), 0.0);
67 ASSERT_DOUBLE_EQ(xt(1, 3), 0.0);
69 ASSERT_DOUBLE_EQ(xt(2, 0), 0.0);
70 ASSERT_DOUBLE_EQ(xt(2, 1), 0.0);
71 ASSERT_DOUBLE_EQ(xt(2, 2), 0.0);
72 ASSERT_DOUBLE_EQ(xt(2, 3), 0.0);
75 TEST(IntegratorTest, OmniPoseChange)
78 const arma::vec vb = { 1.0, 0.5, 0.5 };
79 const arma::vec x0(3, arma::fill::zeros);
90 ASSERT_NEAR(pose(0), 0.0987, 1e-4);
91 ASSERT_NEAR(pose(1), 0.0525, 1e-4);
92 ASSERT_NEAR(pose(2), 0.0500, 1e-4);
95 TEST(IntegratorTest, OmniTrajectory)
97 const auto horizon = 0.5;
99 const auto steps =
static_cast<unsigned int>(horizon / dt);
100 const arma::vec vb = { 1.0, 0.5, 0.5 };
101 const arma::vec x0 = { 1.0, 0.0, 0.0 };
106 arma::mat traj(3, steps, arma::fill::zeros);
109 for (
unsigned int i = 0; i < steps; i++)
125 ASSERT_NEAR(traj(0, 0), 1.0987, 1e-4);
126 ASSERT_NEAR(traj(0, 1), 1.1947, 1e-4);
127 ASSERT_NEAR(traj(0, 2), 1.2876, 1e-4);
128 ASSERT_NEAR(traj(0, 3), 1.3774, 1e-4);
129 ASSERT_NEAR(traj(0, 4), 1.4637, 1e-4);
131 ASSERT_NEAR(traj(1, 0), 0.0525, 1e-4);
132 ASSERT_NEAR(traj(1, 1), 0.1098, 1e-4);
133 ASSERT_NEAR(traj(1, 2), 0.1719, 1e-4);
134 ASSERT_NEAR(traj(1, 3), 0.2385, 1e-4);
135 ASSERT_NEAR(traj(1, 4), 0.3096, 1e-4);
137 ASSERT_NEAR(traj(2, 0), 0.0500, 1e-4);
138 ASSERT_NEAR(traj(2, 1), 0.1000, 1e-4);
139 ASSERT_NEAR(traj(2, 2), 0.1500, 1e-4);
140 ASSERT_NEAR(traj(2, 3), 0.2000, 1e-4);
141 ASSERT_NEAR(traj(2, 4), 0.2500, 1e-4);