14TEST(ODOMETRY_SUBSCRIBER, CONVERSION_TEST) {
22 double steering_angle = 0;
23 std::pair<double, double> velocity_data =
25 EXPECT_NEAR(velocity_data.first, 1.6210, 0.0001);
26 EXPECT_DOUBLE_EQ(velocity_data.second, 0);
33 steering_angle = M_PI / 8;
36 EXPECT_GE(velocity_data.first, 1.6210);
37 EXPECT_LE(velocity_data.first, 1.6210 * 2);
38 EXPECT_LE(velocity_data.second, M_PI);
39 EXPECT_GE(velocity_data.second, M_PI / 8);
46 steering_angle = -M_PI / 8;
49 EXPECT_GE(velocity_data.first, 1.6210);
50 EXPECT_LE(velocity_data.first, 1.6210 * 2);
51 EXPECT_GE(velocity_data.second, -M_PI);
52 EXPECT_LE(velocity_data.second, -M_PI / 8);
59TEST(BicycleModelTest, TestCgVelocityToWheels) {
66 Eigen::Vector3d cg_velocities(10.0, 2.0, 0.1);
69 ASSERT_EQ(observations.size(), 6);
71 EXPECT_NEAR(observations(0), 325.584, 0.01);
72 EXPECT_NEAR(observations(1), 325.584, 0.01);
73 EXPECT_NEAR(observations(2), 324.004, 0.01);
74 EXPECT_NEAR(observations(3), 324.004, 0.01);
75 EXPECT_NEAR(observations(4), 0.02450, 0.001);
76 EXPECT_NEAR(observations(5), 1296.02, 0.01);
84TEST(BicycleModelTest, TestCgVelocityToWheelsNegativeVx) {
91 Eigen::Vector3d cg_velocities(-10.0, 2.0, 0.1);
95 ASSERT_EQ(observations.size(), 6);
97 EXPECT_NEAR(observations(0), -325.584, 0.01);
98 EXPECT_NEAR(observations(1), -325.584, 0.01);
99 EXPECT_NEAR(observations(2), -324.004, 0.01);
100 EXPECT_NEAR(observations(3), -324.004, 0.01);
101 EXPECT_NEAR(observations(4), 0.02450, 0.001);
102 EXPECT_NEAR(observations(5), -1296.02, 0.01);
110TEST(BicycleModelTest, TestCgVelocityToWheelsZeroVx) {
117 Eigen::Vector3d cg_velocities(0.0, -2.0, -0.1);
121 ASSERT_EQ(observations.size(), 6);
123 EXPECT_NEAR(observations(0), 68.4366, 0.01);
124 EXPECT_NEAR(observations(1), 68.4366, 0.01);
125 EXPECT_NEAR(observations(2), 60.47888, 0.01);
126 EXPECT_NEAR(observations(3), 60.47888, 0.01);
127 EXPECT_NEAR(observations(4), -0.1243, 0.001);
128 EXPECT_NEAR(observations(5), 241.91552, 0.01);
136TEST(BicycleModelTest, TestCgVelocityToWheelsZeroVy) {
143 Eigen::Vector3d cg_velocities(0.0, 0.0, 0.0);
147 ASSERT_EQ(observations.size(), 6);
149 EXPECT_NEAR(observations(0), 0, 0.01);
150 EXPECT_NEAR(observations(1), 0, 0.01);
151 EXPECT_NEAR(observations(2), 0, 0.01);
152 EXPECT_NEAR(observations(3), 0, 0.01);
153 EXPECT_NEAR(observations(4), 0, 0.001);
154 EXPECT_NEAR(observations(5), 0, 0.01);
162TEST(BicycleModelTest, TestJacobianCgVelocityToWheels) {
174 Eigen::Vector3d cg_velocities(10.0, 2.0, 0.1);
180 ASSERT_EQ(jacobian.rows(), 6);
181 ASSERT_EQ(jacobian.cols(), 3);
183 EXPECT_NEAR(jacobian(0, 0), 31.1199, 0.01);
184 EXPECT_NEAR(jacobian(0, 1), 6.69077, 0.01);
185 EXPECT_NEAR(jacobian(0, 2), 10.0362, 0.01);
186 EXPECT_NEAR(jacobian(1, 0), 31.1199, 0.01);
187 EXPECT_NEAR(jacobian(1, 1), 6.69077, 0.01);
188 EXPECT_NEAR(jacobian(1, 2), 10.0362, 0.01);
189 EXPECT_NEAR(jacobian(2, 0), 31.2715, 0.01);
190 EXPECT_NEAR(jacobian(2, 1), 5.94159, 0.01);
191 EXPECT_NEAR(jacobian(2, 2), -5.9416, 0.01);
192 EXPECT_NEAR(jacobian(3, 0), 31.2715, 0.01);
193 EXPECT_NEAR(jacobian(3, 1), 5.94159, 0.01);
194 EXPECT_NEAR(jacobian(3, 2), -5.9416, 0.01);
195 EXPECT_NEAR(jacobian(4, 0), -0.002355, 0.01);
196 EXPECT_NEAR(jacobian(4, 1), -0.00047, 0.01);
197 EXPECT_NEAR(jacobian(4, 2), 0.24499, 0.01);
198 EXPECT_NEAR(jacobian(5, 0), 125.086, 0.01);
199 EXPECT_NEAR(jacobian(5, 1), 23.7664, 0.01);
200 EXPECT_NEAR(jacobian(5, 2), -23.7664, 0.01);
209TEST(BicycleModelTest, TestJacobianCgVelocityToWheelsZeroVy) {
221 Eigen::Vector3d cg_velocities(-10.0, 0, -0.1);
227 ASSERT_EQ(jacobian.rows(), 6);
228 ASSERT_EQ(jacobian.cols(), 3);
230 EXPECT_NEAR(jacobian(0, 0), 31.8274082, 0.01);
231 EXPECT_NEAR(jacobian(0, 1), 0.47741112, 0.01);
232 EXPECT_NEAR(jacobian(0, 2), 0.71611668, 0.01);
233 EXPECT_NEAR(jacobian(1, 0), 31.8274082, 0.01);
234 EXPECT_NEAR(jacobian(1, 1), 0.47741112, 0.01);
235 EXPECT_NEAR(jacobian(1, 2), 0.71611668, 0.01);
236 EXPECT_NEAR(jacobian(2, 0), 31.8293971, 0.01);
237 EXPECT_NEAR(jacobian(2, 1), -0.3182939, 0.01);
238 EXPECT_NEAR(jacobian(2, 2), 0.31829397, 0.01);
239 EXPECT_NEAR(jacobian(3, 0), 31.8293971, 0.01);
240 EXPECT_NEAR(jacobian(3, 1), -0.3182939, 0.01);
241 EXPECT_NEAR(jacobian(3, 2), 0.31829397, 0.01);
242 EXPECT_NEAR(jacobian(4, 0), -0.00149966, 0.01);
243 EXPECT_NEAR(jacobian(4, 1), 0.0, 0.01);
244 EXPECT_NEAR(jacobian(4, 2), 0.24984, 0.01);
245 EXPECT_NEAR(jacobian(5, 0), 127.3175884, 0.01);
246 EXPECT_NEAR(jacobian(5, 1), -1.27316, 0.01);
247 EXPECT_NEAR(jacobian(5, 2), 1.27316, 0.01);
std::pair< double, double > wheels_velocities_to_cg(double rl_rpm, double fl_rpm, double rr_rpm, double fr_rpm, double steering_angle) override
assumes a bicycle model and a set of parameters about the vehicle to calculate the velocities of the ...