15TEST(CONSTANT_ACCELERATION_TURNRATE_MODEL, STRAIGHT_LINE_MOVEMENT_TEST_1) {
17 Eigen::Vector3d previous_pose(0, 0, 0);
18 Eigen::Vector4d motion_data(1, 0, 0, 0);
24 Eigen::Matrix3d pose_jacobian =
model.get_jacobian_pose(previous_pose, motion_data, delta_t);
27 EXPECT_NEAR(next_pose(0), 1, 0.000001);
28 EXPECT_NEAR(next_pose(1), 0, 0.000001);
29 EXPECT_NEAR(next_pose(2), 0, 0.000001);
30 EXPECT_FLOAT_EQ(pose_jacobian(0, 0), 1);
31 EXPECT_FLOAT_EQ(pose_jacobian(0, 1), 0);
32 EXPECT_FLOAT_EQ(pose_jacobian(0, 2), 0);
33 EXPECT_FLOAT_EQ(pose_jacobian(1, 0), 0);
34 EXPECT_FLOAT_EQ(pose_jacobian(1, 1), 1);
35 EXPECT_FLOAT_EQ(pose_jacobian(1, 2), 1);
36 EXPECT_FLOAT_EQ(pose_jacobian(2, 0), 0);
37 EXPECT_FLOAT_EQ(pose_jacobian(2, 1), 0);
38 EXPECT_FLOAT_EQ(pose_jacobian(2, 2), 1);
46TEST(CONSTANT_ACCELERATION_TURNRATE_MODEL, STRAIGHT_LINE_MOVEMENT_TEST_2) {
48 Eigen::Vector3d previous_pose(0, 0, M_PI / 4);
49 Eigen::Vector4d motion_data(2, 0, 0, 0);
55 Eigen::Matrix3d pose_jacobian =
model.get_jacobian_pose(previous_pose, motion_data, delta_t);
58 EXPECT_NEAR(next_pose(0), 1.41, 0.01);
59 EXPECT_NEAR(next_pose(1), 1.41, 0.01);
60 EXPECT_NEAR(next_pose(2), M_PI / 4, 0.000001);
61 EXPECT_FLOAT_EQ(pose_jacobian(0, 0), 1);
62 EXPECT_FLOAT_EQ(pose_jacobian(0, 1), 0);
63 EXPECT_NEAR(pose_jacobian(0, 2), -1.41, 0.01);
64 EXPECT_FLOAT_EQ(pose_jacobian(1, 0), 0);
65 EXPECT_FLOAT_EQ(pose_jacobian(1, 1), 1);
66 EXPECT_NEAR(pose_jacobian(1, 2), 1.41, 0.01);
67 EXPECT_FLOAT_EQ(pose_jacobian(2, 0), 0);
68 EXPECT_FLOAT_EQ(pose_jacobian(2, 1), 0);
69 EXPECT_FLOAT_EQ(pose_jacobian(2, 2), 1);
76TEST(CONSTANT_ACCELERATION_TURNRATE_MODEL, BACKWARDS_MOVEMENT_TEST_1) {
78 Eigen::Vector3d previous_pose(0, 0, 0.0);
79 Eigen::Vector4d motion_data(-1, 0.0, 0, 0);
85 Eigen::Matrix3d pose_jacobian =
model.get_jacobian_pose(previous_pose, motion_data, delta_t);
88 EXPECT_NEAR(next_pose(0), -1.0, 0.000001);
89 EXPECT_NEAR(next_pose(1), 0, 0.000001);
90 EXPECT_NEAR(abs(next_pose(2)), 0.0, 0.000001);
91 EXPECT_FLOAT_EQ(pose_jacobian(0, 0), 1);
92 EXPECT_FLOAT_EQ(pose_jacobian(0, 1), 0);
93 EXPECT_NEAR(pose_jacobian(0, 2), 0, 0.01);
94 EXPECT_FLOAT_EQ(pose_jacobian(1, 0), 0);
95 EXPECT_FLOAT_EQ(pose_jacobian(1, 1), 1);
96 EXPECT_NEAR(pose_jacobian(1, 2), -1, 0.01);
97 EXPECT_FLOAT_EQ(pose_jacobian(2, 0), 0);
98 EXPECT_FLOAT_EQ(pose_jacobian(2, 1), 0);
99 EXPECT_FLOAT_EQ(pose_jacobian(2, 2), 1);
106TEST(CONSTANT_ACCELERATION_TURNRATE_MODEL, BACKWARDS_MOVEMENT_TEST_2) {
108 Eigen::Vector3d previous_pose(0, 0, M_PI);
109 Eigen::Vector4d motion_data(1, 0.0, 0, 0);
115 Eigen::Matrix3d pose_jacobian =
model.get_jacobian_pose(previous_pose, motion_data, delta_t);
118 EXPECT_NEAR(next_pose(0), -1.00, 0.000001);
119 EXPECT_NEAR(next_pose(1), 0, 0.000001);
120 EXPECT_NEAR(abs(next_pose(2)), M_PI, 0.000001);
121 EXPECT_FLOAT_EQ(pose_jacobian(0, 0), 1);
122 EXPECT_FLOAT_EQ(pose_jacobian(0, 1), 0);
123 EXPECT_NEAR(pose_jacobian(0, 2), 0, 0.01);
124 EXPECT_FLOAT_EQ(pose_jacobian(1, 0), 0);
125 EXPECT_FLOAT_EQ(pose_jacobian(1, 1), 1);
126 EXPECT_NEAR(pose_jacobian(1, 2), -1, 0.01);
127 EXPECT_FLOAT_EQ(pose_jacobian(2, 0), 0);
128 EXPECT_FLOAT_EQ(pose_jacobian(2, 1), 0);
129 EXPECT_FLOAT_EQ(pose_jacobian(2, 2), 1);
136TEST(CONSTANT_ACCELERATION_TURNRATE_MODEL, BACKWARDS_MOVEMENT_TEST_3) {
138 Eigen::Vector3d previous_pose(0, 0, -M_PI);
139 Eigen::Vector4d motion_data(-1, 0.0, 0, 0);
145 Eigen::Matrix3d pose_jacobian =
model.get_jacobian_pose(previous_pose, motion_data, delta_t);
148 EXPECT_NEAR(next_pose(0), 1.00, 0.000001);
149 EXPECT_NEAR(next_pose(1), 0, 0.000001);
150 EXPECT_NEAR(abs(next_pose(2)), M_PI, 0.000001);
151 EXPECT_FLOAT_EQ(pose_jacobian(0, 0), 1);
152 EXPECT_FLOAT_EQ(pose_jacobian(0, 1), 0);
153 EXPECT_NEAR(pose_jacobian(0, 2), 0, 0.01);
154 EXPECT_FLOAT_EQ(pose_jacobian(1, 0), 0);
155 EXPECT_FLOAT_EQ(pose_jacobian(1, 1), 1);
156 EXPECT_NEAR(pose_jacobian(1, 2), 1, 0.01);
157 EXPECT_FLOAT_EQ(pose_jacobian(2, 0), 0);
158 EXPECT_FLOAT_EQ(pose_jacobian(2, 1), 0);
159 EXPECT_FLOAT_EQ(pose_jacobian(2, 2), 1);
166TEST(CONSTANT_ACCELERATION_TURNRATE_MODEL, ORIENTATION_ANGLE_CAP_TEST_1) {
168 Eigen::Vector3d previous_pose(0, 0, 2 * M_PI);
169 Eigen::Vector4d motion_data(0.0, 0.0, 0, 0);
175 Eigen::Matrix3d pose_jacobian =
model.get_jacobian_pose(previous_pose, motion_data, delta_t);
178 EXPECT_NEAR(next_pose(0), 0.0, 0.001);
179 EXPECT_NEAR(next_pose(1), 0.0, 0.000001);
180 EXPECT_NEAR(next_pose(2), 0.0, 0.000001);
181 EXPECT_FLOAT_EQ(pose_jacobian(0, 0), 1);
182 EXPECT_FLOAT_EQ(pose_jacobian(0, 1), 0);
183 EXPECT_NEAR(pose_jacobian(0, 2), 0, 0.01);
184 EXPECT_FLOAT_EQ(pose_jacobian(1, 0), 0);
185 EXPECT_FLOAT_EQ(pose_jacobian(1, 1), 1);
186 EXPECT_NEAR(pose_jacobian(1, 2), 0, 0.01);
187 EXPECT_FLOAT_EQ(pose_jacobian(2, 0), 0);
188 EXPECT_FLOAT_EQ(pose_jacobian(2, 1), 0);
189 EXPECT_FLOAT_EQ(pose_jacobian(2, 2), 1);
196TEST(CONSTANT_ACCELERATION_TURNRATE_MODEL, ORIENTATION_ANGLE_CAP_TEST_2) {
198 Eigen::Vector3d previous_pose(0, 0, 3 * M_PI);
199 Eigen::Vector4d motion_data(0.0, 0.0, 0, 0);
205 Eigen::Matrix3d pose_jacobian =
model.get_jacobian_pose(previous_pose, motion_data, delta_t);
208 EXPECT_NEAR(next_pose(0), 0.0, 0.001);
209 EXPECT_NEAR(next_pose(1), 0.0, 0.000001);
210 EXPECT_NEAR(abs(next_pose(2)), M_PI, 0.000001);
211 EXPECT_FLOAT_EQ(pose_jacobian(0, 0), 1);
212 EXPECT_FLOAT_EQ(pose_jacobian(0, 1), 0);
213 EXPECT_NEAR(pose_jacobian(0, 2), 0, 0.01);
214 EXPECT_FLOAT_EQ(pose_jacobian(1, 0), 0);
215 EXPECT_FLOAT_EQ(pose_jacobian(1, 1), 1);
216 EXPECT_NEAR(pose_jacobian(1, 2), 0, 0.01);
217 EXPECT_FLOAT_EQ(pose_jacobian(2, 0), 0);
218 EXPECT_FLOAT_EQ(pose_jacobian(2, 1), 0);
219 EXPECT_FLOAT_EQ(pose_jacobian(2, 2), 1);
226TEST(CONSTANT_ACCELERATION_TURNRATE_MODEL, ORIENTATION_ANGLE_CAP_TEST_3) {
228 Eigen::Vector3d previous_pose(0, 0, -3 * M_PI);
229 Eigen::Vector4d motion_data(0.0, 0.0, 0, 0);
235 Eigen::Matrix3d pose_jacobian =
model.get_jacobian_pose(previous_pose, motion_data, delta_t);
238 EXPECT_NEAR(next_pose(0), 0.0, 0.001);
239 EXPECT_NEAR(next_pose(1), 0.0, 0.000001);
240 EXPECT_NEAR(abs(next_pose(2)), M_PI, 0.000001);
241 EXPECT_FLOAT_EQ(pose_jacobian(0, 0), 1);
242 EXPECT_FLOAT_EQ(pose_jacobian(0, 1), 0);
243 EXPECT_NEAR(pose_jacobian(0, 2), 0, 0.01);
244 EXPECT_FLOAT_EQ(pose_jacobian(1, 0), 0);
245 EXPECT_FLOAT_EQ(pose_jacobian(1, 1), 1);
246 EXPECT_NEAR(pose_jacobian(1, 2), 0, 0.01);
247 EXPECT_FLOAT_EQ(pose_jacobian(2, 0), 0);
248 EXPECT_FLOAT_EQ(pose_jacobian(2, 1), 0);
249 EXPECT_FLOAT_EQ(pose_jacobian(2, 2), 1);
256TEST(CONSTANT_ACCELERATION_TURNRATE_MODEL, ORIENTATION_ANGLE_CAP_TEST_4) {
258 Eigen::Vector3d previous_pose(0, 0, 1.5 * M_PI);
259 Eigen::Vector4d motion_data(0.0, 0.0, 0, 0);
265 Eigen::Matrix3d pose_jacobian =
model.get_jacobian_pose(previous_pose, motion_data, delta_t);
268 EXPECT_NEAR(next_pose(0), 0.0, 0.001);
269 EXPECT_NEAR(next_pose(1), 0.0, 0.000001);
270 EXPECT_NEAR(next_pose(2), -M_PI / 2, 0.000001);
271 EXPECT_FLOAT_EQ(pose_jacobian(0, 0), 1);
272 EXPECT_FLOAT_EQ(pose_jacobian(0, 1), 0);
273 EXPECT_NEAR(pose_jacobian(0, 2), 0, 0.01);
274 EXPECT_FLOAT_EQ(pose_jacobian(1, 0), 0);
275 EXPECT_FLOAT_EQ(pose_jacobian(1, 1), 1);
276 EXPECT_NEAR(pose_jacobian(1, 2), 0, 0.01);
277 EXPECT_FLOAT_EQ(pose_jacobian(2, 0), 0);
278 EXPECT_FLOAT_EQ(pose_jacobian(2, 1), 0);
279 EXPECT_FLOAT_EQ(pose_jacobian(2, 2), 1);
286TEST(CONSTANT_ACCELERATION_TURNRATE_MODEL, ORIENTATION_ANGLE_CAP_TEST_5) {
288 Eigen::Vector3d previous_pose(0, 0, -2.5 * M_PI);
289 Eigen::Vector4d motion_data(0.0, 0.0, 0, 0);
295 Eigen::Matrix3d pose_jacobian =
model.get_jacobian_pose(previous_pose, motion_data, delta_t);
298 EXPECT_NEAR(next_pose(0), 0.0, 0.001);
299 EXPECT_NEAR(next_pose(1), 0.0, 0.000001);
300 EXPECT_NEAR(next_pose(2), -M_PI / 2, 0.000001);
301 EXPECT_FLOAT_EQ(pose_jacobian(0, 0), 1);
302 EXPECT_FLOAT_EQ(pose_jacobian(0, 1), 0);
303 EXPECT_NEAR(pose_jacobian(0, 2), 0, 0.01);
304 EXPECT_FLOAT_EQ(pose_jacobian(1, 0), 0);
305 EXPECT_FLOAT_EQ(pose_jacobian(1, 1), 1);
306 EXPECT_NEAR(pose_jacobian(1, 2), 0, 0.01);
307 EXPECT_FLOAT_EQ(pose_jacobian(2, 0), 0);
308 EXPECT_FLOAT_EQ(pose_jacobian(2, 1), 0);
309 EXPECT_FLOAT_EQ(pose_jacobian(2, 2), 1);
316TEST(CONSTANT_ACCELERATION_TURNRATE_MODEL, CURVILINEAR_MOVEMENT_TEST_1) {
318 Eigen::Vector3d previous_pose(1, 2, M_PI / 4);
319 Eigen::Vector4d motion_data(3, 0, M_PI / 16, 0);
325 Eigen::Matrix3d pose_jacobian =
model.get_jacobian_pose(previous_pose, motion_data, delta_t);
328 EXPECT_NEAR(next_pose(0), 2.9, 0.01);
329 EXPECT_NEAR(next_pose(1), 4.316, 0.01);
330 EXPECT_NEAR(next_pose(2), 0.98, 0.01);
331 EXPECT_FLOAT_EQ(pose_jacobian(0, 0), 1);
332 EXPECT_FLOAT_EQ(pose_jacobian(0, 1), 0);
333 EXPECT_NEAR(pose_jacobian(0, 2), -2.315, 0.01);
334 EXPECT_FLOAT_EQ(pose_jacobian(1, 0), 0);
335 EXPECT_FLOAT_EQ(pose_jacobian(1, 1), 1);
336 EXPECT_NEAR(pose_jacobian(1, 2), 1.9, 0.01);
337 EXPECT_FLOAT_EQ(pose_jacobian(2, 0), 0);
338 EXPECT_FLOAT_EQ(pose_jacobian(2, 1), 0);
339 EXPECT_FLOAT_EQ(pose_jacobian(2, 2), 1);
346TEST(CONSTANT_ACCELERATION_TURNRATE_MODEL, CURVILINEAR_MOVEMENT_TEST_2) {
348 Eigen::Vector3d previous_pose(1, 2, -M_PI / 4);
349 Eigen::Vector4d motion_data(3, 0, -M_PI / 8, 0);
355 Eigen::Matrix3d pose_jacobian =
model.get_jacobian_pose(previous_pose, motion_data, delta_t);
358 EXPECT_NEAR(next_pose(0), 2.656, 0.01);
359 EXPECT_NEAR(next_pose(1), -0.48, 0.01);
360 EXPECT_NEAR(next_pose(2), -3 * M_PI / 8, 0.000001);
361 EXPECT_FLOAT_EQ(pose_jacobian(0, 0), 1);
362 EXPECT_FLOAT_EQ(pose_jacobian(0, 1), 0);
363 EXPECT_NEAR(pose_jacobian(0, 2), 2.48, 0.01);
364 EXPECT_FLOAT_EQ(pose_jacobian(1, 0), 0);
365 EXPECT_FLOAT_EQ(pose_jacobian(1, 1), 1);
366 EXPECT_NEAR(pose_jacobian(1, 2), 1.656, 0.01);
367 EXPECT_FLOAT_EQ(pose_jacobian(2, 0), 0);
368 EXPECT_FLOAT_EQ(pose_jacobian(2, 1), 0);
369 EXPECT_FLOAT_EQ(pose_jacobian(2, 2), 1);
376TEST(CONSTANT_ACCELERATION_TURNRATE_MODEL, CURVILINEAR_MOVEMENT_TEST_3) {
378 Eigen::Vector3d previous_pose(1, 2, -M_PI / 2);
379 Eigen::Vector4d motion_data(3, 0, M_PI / 4, 0);
385 Eigen::Matrix3d pose_jacobian =
model.get_jacobian_pose(previous_pose, motion_data, delta_t);
388 EXPECT_NEAR(next_pose(0), 4.820, 0.01);
389 EXPECT_NEAR(next_pose(1), -1.820, 0.01);
390 EXPECT_NEAR(next_pose(2), 0.0, 0.01);
391 EXPECT_FLOAT_EQ(pose_jacobian(0, 0), 1);
392 EXPECT_FLOAT_EQ(pose_jacobian(0, 1), 0);
393 EXPECT_NEAR(pose_jacobian(0, 2), 3.820, 0.01);
394 EXPECT_FLOAT_EQ(pose_jacobian(1, 0), 0);
395 EXPECT_FLOAT_EQ(pose_jacobian(1, 1), 1);
396 EXPECT_NEAR(pose_jacobian(1, 2), 3.820, 0.01);
397 EXPECT_FLOAT_EQ(pose_jacobian(2, 0), 0);
398 EXPECT_FLOAT_EQ(pose_jacobian(2, 1), 0);
399 EXPECT_FLOAT_EQ(pose_jacobian(2, 2), 1);
std::shared_ptr< IVehicleModel > model