10TEST(CONSTANT_VELOCITY_MODEL, STRAIGHT_LINE_MOVEMENT_TEST_1) {
12 const Eigen::Vector3d previous_pose(0, 0, 0);
13 const Eigen::Vector3d velocities(1, 0, 0);
14 const double delta_t = 1;
19 Eigen::Matrix3d pose_jacobian =
model.get_jacobian_pose(previous_pose, velocities, delta_t);
22 EXPECT_NEAR(next_pose(0), 1, 0.000001);
23 EXPECT_NEAR(next_pose(1), 0, 0.000001);
24 EXPECT_NEAR(next_pose(2), 0, 0.000001);
25 EXPECT_FLOAT_EQ(pose_jacobian(0, 0), 1);
26 EXPECT_FLOAT_EQ(pose_jacobian(0, 1), 0);
27 EXPECT_FLOAT_EQ(pose_jacobian(0, 2), 0);
28 EXPECT_FLOAT_EQ(pose_jacobian(1, 0), 0);
29 EXPECT_FLOAT_EQ(pose_jacobian(1, 1), 1);
30 EXPECT_FLOAT_EQ(pose_jacobian(1, 2), 1);
31 EXPECT_FLOAT_EQ(pose_jacobian(2, 0), 0);
32 EXPECT_FLOAT_EQ(pose_jacobian(2, 1), 0);
33 EXPECT_FLOAT_EQ(pose_jacobian(2, 2), 1);
39TEST(CONSTANT_VELOCITY_MODEL, STRAIGHT_LINE_MOVEMENT_TEST_2) {
41 const Eigen::Vector3d previous_pose(0, 0, M_PI / 4);
42 const Eigen::Vector3d velocities(2, 0, 0);
43 const double delta_t = 1;
48 Eigen::Matrix3d pose_jacobian =
model.get_jacobian_pose(previous_pose, velocities, delta_t);
51 EXPECT_NEAR(next_pose(0), 1.41, 0.01);
52 EXPECT_NEAR(next_pose(1), 1.41, 0.01);
53 EXPECT_NEAR(next_pose(2), M_PI / 4, 0.000001);
54 EXPECT_FLOAT_EQ(pose_jacobian(0, 0), 1);
55 EXPECT_FLOAT_EQ(pose_jacobian(0, 1), 0);
56 EXPECT_NEAR(pose_jacobian(0, 2), -1.41, 0.01);
57 EXPECT_FLOAT_EQ(pose_jacobian(1, 0), 0);
58 EXPECT_FLOAT_EQ(pose_jacobian(1, 1), 1);
59 EXPECT_NEAR(pose_jacobian(1, 2), 1.41, 0.01);
60 EXPECT_FLOAT_EQ(pose_jacobian(2, 0), 0);
61 EXPECT_FLOAT_EQ(pose_jacobian(2, 1), 0);
62 EXPECT_FLOAT_EQ(pose_jacobian(2, 2), 1);
68TEST(CONSTANT_VELOCITY_MODEL, BACKWARDS_MOVEMENT_TEST_1) {
70 const Eigen::Vector3d previous_pose(0, 0, 0.0);
71 const Eigen::Vector3d velocities(-1, 0.0, 0);
72 const double delta_t = 1;
77 Eigen::Matrix3d pose_jacobian =
model.get_jacobian_pose(previous_pose, velocities, delta_t);
80 EXPECT_NEAR(next_pose(0), -1.0, 0.000001);
81 EXPECT_NEAR(next_pose(1), 0, 0.000001);
82 EXPECT_NEAR(abs(next_pose(2)), 0.0, 0.000001);
83 EXPECT_FLOAT_EQ(pose_jacobian(0, 0), 1);
84 EXPECT_FLOAT_EQ(pose_jacobian(0, 1), 0);
85 EXPECT_NEAR(pose_jacobian(0, 2), 0, 0.01);
86 EXPECT_FLOAT_EQ(pose_jacobian(1, 0), 0);
87 EXPECT_FLOAT_EQ(pose_jacobian(1, 1), 1);
88 EXPECT_NEAR(pose_jacobian(1, 2), -1, 0.01);
89 EXPECT_FLOAT_EQ(pose_jacobian(2, 0), 0);
90 EXPECT_FLOAT_EQ(pose_jacobian(2, 1), 0);
91 EXPECT_FLOAT_EQ(pose_jacobian(2, 2), 1);
98TEST(CONSTANT_VELOCITY_MODEL, BACKWARDS_MOVEMENT_TEST_2) {
100 const Eigen::Vector3d previous_pose(0, 0, M_PI);
101 const Eigen::Vector3d velocities(1, 0.0, 0);
102 const double delta_t = 1;
107 Eigen::Matrix3d pose_jacobian =
model.get_jacobian_pose(previous_pose, velocities, delta_t);
110 EXPECT_NEAR(next_pose(0), -1.00, 0.000001);
111 EXPECT_NEAR(next_pose(1), 0, 0.000001);
112 EXPECT_NEAR(abs(next_pose(2)), M_PI, 0.000001);
113 EXPECT_FLOAT_EQ(pose_jacobian(0, 0), 1);
114 EXPECT_FLOAT_EQ(pose_jacobian(0, 1), 0);
115 EXPECT_NEAR(pose_jacobian(0, 2), 0, 0.01);
116 EXPECT_FLOAT_EQ(pose_jacobian(1, 0), 0);
117 EXPECT_FLOAT_EQ(pose_jacobian(1, 1), 1);
118 EXPECT_NEAR(pose_jacobian(1, 2), -1, 0.01);
119 EXPECT_FLOAT_EQ(pose_jacobian(2, 0), 0);
120 EXPECT_FLOAT_EQ(pose_jacobian(2, 1), 0);
121 EXPECT_FLOAT_EQ(pose_jacobian(2, 2), 1);
128TEST(CONSTANT_VELOCITY_MODEL, BACKWARDS_MOVEMENT_TEST_3) {
130 const Eigen::Vector3d previous_pose(0, 0, -M_PI);
131 const Eigen::Vector3d velocities(-1, 0.0, 0);
132 const double delta_t = 1;
137 Eigen::Matrix3d pose_jacobian =
model.get_jacobian_pose(previous_pose, velocities, delta_t);
140 EXPECT_NEAR(next_pose(0), 1.00, 0.000001);
141 EXPECT_NEAR(next_pose(1), 0, 0.000001);
142 EXPECT_NEAR(abs(next_pose(2)), M_PI, 0.000001);
143 EXPECT_FLOAT_EQ(pose_jacobian(0, 0), 1);
144 EXPECT_FLOAT_EQ(pose_jacobian(0, 1), 0);
145 EXPECT_NEAR(pose_jacobian(0, 2), 0, 0.01);
146 EXPECT_FLOAT_EQ(pose_jacobian(1, 0), 0);
147 EXPECT_FLOAT_EQ(pose_jacobian(1, 1), 1);
148 EXPECT_NEAR(pose_jacobian(1, 2), 1, 0.01);
149 EXPECT_FLOAT_EQ(pose_jacobian(2, 0), 0);
150 EXPECT_FLOAT_EQ(pose_jacobian(2, 1), 0);
151 EXPECT_FLOAT_EQ(pose_jacobian(2, 2), 1);
157TEST(CONSTANT_VELOCITY_MODEL, ORIENTATION_ANGLE_CAP_TEST_1) {
159 const Eigen::Vector3d previous_pose(0, 0, 2 * M_PI);
160 const Eigen::Vector3d velocities(0.0, 0.0, 0);
161 const double delta_t = 1;
166 Eigen::Matrix3d pose_jacobian =
model.get_jacobian_pose(previous_pose, velocities, delta_t);
169 EXPECT_NEAR(next_pose(0), 0.0, 0.001);
170 EXPECT_NEAR(next_pose(1), 0.0, 0.000001);
171 EXPECT_NEAR(next_pose(2), 0.0, 0.000001);
172 EXPECT_FLOAT_EQ(pose_jacobian(0, 0), 1);
173 EXPECT_FLOAT_EQ(pose_jacobian(0, 1), 0);
174 EXPECT_NEAR(pose_jacobian(0, 2), 0, 0.01);
175 EXPECT_FLOAT_EQ(pose_jacobian(1, 0), 0);
176 EXPECT_FLOAT_EQ(pose_jacobian(1, 1), 1);
177 EXPECT_NEAR(pose_jacobian(1, 2), 0, 0.01);
178 EXPECT_FLOAT_EQ(pose_jacobian(2, 0), 0);
179 EXPECT_FLOAT_EQ(pose_jacobian(2, 1), 0);
180 EXPECT_FLOAT_EQ(pose_jacobian(2, 2), 1);
186TEST(CONSTANT_VELOCITY_MODEL, ORIENTATION_ANGLE_CAP_TEST_2) {
188 const Eigen::Vector3d previous_pose(0, 0, 3 * M_PI);
189 const Eigen::Vector3d velocities(0.0, 0.0, 0);
190 const double delta_t = 1;
195 Eigen::Matrix3d pose_jacobian =
model.get_jacobian_pose(previous_pose, velocities, delta_t);
198 EXPECT_NEAR(next_pose(0), 0.0, 0.001);
199 EXPECT_NEAR(next_pose(1), 0.0, 0.000001);
200 EXPECT_NEAR(abs(next_pose(2)), M_PI, 0.000001);
201 EXPECT_FLOAT_EQ(pose_jacobian(0, 0), 1);
202 EXPECT_FLOAT_EQ(pose_jacobian(0, 1), 0);
203 EXPECT_NEAR(pose_jacobian(0, 2), 0, 0.01);
204 EXPECT_FLOAT_EQ(pose_jacobian(1, 0), 0);
205 EXPECT_FLOAT_EQ(pose_jacobian(1, 1), 1);
206 EXPECT_NEAR(pose_jacobian(1, 2), 0, 0.01);
207 EXPECT_FLOAT_EQ(pose_jacobian(2, 0), 0);
208 EXPECT_FLOAT_EQ(pose_jacobian(2, 1), 0);
209 EXPECT_FLOAT_EQ(pose_jacobian(2, 2), 1);
215TEST(CONSTANT_VELOCITY_MODEL, ORIENTATION_ANGLE_CAP_TEST_3) {
217 const Eigen::Vector3d previous_pose(0, 0, -3 * M_PI);
218 const Eigen::Vector3d velocities(0.0, 0.0, 0);
219 const double delta_t = 1;
224 Eigen::Matrix3d pose_jacobian =
model.get_jacobian_pose(previous_pose, velocities, delta_t);
227 EXPECT_NEAR(next_pose(0), 0.0, 0.001);
228 EXPECT_NEAR(next_pose(1), 0.0, 0.000001);
229 EXPECT_NEAR(abs(next_pose(2)), M_PI, 0.000001);
230 EXPECT_FLOAT_EQ(pose_jacobian(0, 0), 1);
231 EXPECT_FLOAT_EQ(pose_jacobian(0, 1), 0);
232 EXPECT_NEAR(pose_jacobian(0, 2), 0, 0.01);
233 EXPECT_FLOAT_EQ(pose_jacobian(1, 0), 0);
234 EXPECT_FLOAT_EQ(pose_jacobian(1, 1), 1);
235 EXPECT_NEAR(pose_jacobian(1, 2), 0, 0.01);
236 EXPECT_FLOAT_EQ(pose_jacobian(2, 0), 0);
237 EXPECT_FLOAT_EQ(pose_jacobian(2, 1), 0);
238 EXPECT_FLOAT_EQ(pose_jacobian(2, 2), 1);
244TEST(CONSTANT_VELOCITY_MODEL, ORIENTATION_ANGLE_CAP_TEST_4) {
246 const Eigen::Vector3d previous_pose(0, 0, 1.5 * M_PI);
247 const Eigen::Vector3d velocities(0.0, 0.0, 0);
248 const double delta_t = 1;
253 Eigen::Matrix3d pose_jacobian =
model.get_jacobian_pose(previous_pose, velocities, delta_t);
256 EXPECT_NEAR(next_pose(0), 0.0, 0.001);
257 EXPECT_NEAR(next_pose(1), 0.0, 0.000001);
258 EXPECT_NEAR(next_pose(2), -M_PI / 2, 0.000001);
259 EXPECT_FLOAT_EQ(pose_jacobian(0, 0), 1);
260 EXPECT_FLOAT_EQ(pose_jacobian(0, 1), 0);
261 EXPECT_NEAR(pose_jacobian(0, 2), 0, 0.01);
262 EXPECT_FLOAT_EQ(pose_jacobian(1, 0), 0);
263 EXPECT_FLOAT_EQ(pose_jacobian(1, 1), 1);
264 EXPECT_NEAR(pose_jacobian(1, 2), 0, 0.01);
265 EXPECT_FLOAT_EQ(pose_jacobian(2, 0), 0);
266 EXPECT_FLOAT_EQ(pose_jacobian(2, 1), 0);
267 EXPECT_FLOAT_EQ(pose_jacobian(2, 2), 1);
273TEST(CONSTANT_VELOCITY_MODEL, ORIENTATION_ANGLE_CAP_TEST_5) {
275 const Eigen::Vector3d previous_pose(0, 0, -2.5 * M_PI);
276 const Eigen::Vector3d velocities(0.0, 0.0, 0);
277 const double delta_t = 1;
282 Eigen::Matrix3d pose_jacobian =
model.get_jacobian_pose(previous_pose, velocities, delta_t);
285 EXPECT_NEAR(next_pose(0), 0.0, 0.001);
286 EXPECT_NEAR(next_pose(1), 0.0, 0.000001);
287 EXPECT_NEAR(next_pose(2), -M_PI / 2, 0.000001);
288 EXPECT_FLOAT_EQ(pose_jacobian(0, 0), 1);
289 EXPECT_FLOAT_EQ(pose_jacobian(0, 1), 0);
290 EXPECT_NEAR(pose_jacobian(0, 2), 0, 0.01);
291 EXPECT_FLOAT_EQ(pose_jacobian(1, 0), 0);
292 EXPECT_FLOAT_EQ(pose_jacobian(1, 1), 1);
293 EXPECT_NEAR(pose_jacobian(1, 2), 0, 0.01);
294 EXPECT_FLOAT_EQ(pose_jacobian(2, 0), 0);
295 EXPECT_FLOAT_EQ(pose_jacobian(2, 1), 0);
296 EXPECT_FLOAT_EQ(pose_jacobian(2, 2), 1);
302TEST(CONSTANT_VELOCITY_MODEL, CURVILINEAR_MOVEMENT_TEST_1) {
304 const Eigen::Vector3d previous_pose(1, 2, M_PI / 4);
305 const Eigen::Vector3d velocities(3, 3, M_PI / 16);
306 const double delta_t = 1;
311 Eigen::Matrix3d pose_jacobian =
model.get_jacobian_pose(previous_pose, velocities, delta_t);
314 EXPECT_NEAR(next_pose(0), 1, 0.01);
315 EXPECT_NEAR(next_pose(1), 6.24, 0.01);
316 EXPECT_NEAR(next_pose(2), 0.98, 0.01);
317 EXPECT_FLOAT_EQ(pose_jacobian(0, 0), 1);
318 EXPECT_FLOAT_EQ(pose_jacobian(0, 1), 0);
319 EXPECT_NEAR(pose_jacobian(0, 2), -4.24, 0.01);
320 EXPECT_FLOAT_EQ(pose_jacobian(1, 0), 0);
321 EXPECT_FLOAT_EQ(pose_jacobian(1, 1), 1);
322 EXPECT_NEAR(pose_jacobian(1, 2), 0, 0.01);
323 EXPECT_FLOAT_EQ(pose_jacobian(2, 0), 0);
324 EXPECT_FLOAT_EQ(pose_jacobian(2, 1), 0);
325 EXPECT_FLOAT_EQ(pose_jacobian(2, 2), 1);
331TEST(CONSTANT_VELOCITY_MODEL, CURVILINEAR_MOVEMENT_TEST_2) {
333 const Eigen::Vector3d previous_pose(1, 2, -M_PI / 4);
334 const Eigen::Vector3d velocities(3, -0.5, -M_PI / 8);
335 const double delta_t = 1;
340 Eigen::Matrix3d pose_jacobian =
model.get_jacobian_pose(previous_pose, velocities, delta_t);
343 EXPECT_NEAR(next_pose(0), 2.76, 0.01);
344 EXPECT_NEAR(next_pose(1), -0.48, 0.01);
345 EXPECT_NEAR(next_pose(2), -3 * M_PI / 8, 0.000001);
346 EXPECT_FLOAT_EQ(pose_jacobian(0, 0), 1);
347 EXPECT_FLOAT_EQ(pose_jacobian(0, 1), 0);
348 EXPECT_NEAR(pose_jacobian(0, 2), 2.48, 0.01);
349 EXPECT_FLOAT_EQ(pose_jacobian(1, 0), 0);
350 EXPECT_FLOAT_EQ(pose_jacobian(1, 1), 1);
351 EXPECT_NEAR(pose_jacobian(1, 2), 1.76, 0.01);
352 EXPECT_FLOAT_EQ(pose_jacobian(2, 0), 0);
353 EXPECT_FLOAT_EQ(pose_jacobian(2, 1), 0);
354 EXPECT_FLOAT_EQ(pose_jacobian(2, 2), 1);
361TEST(CONSTANT_VELOCITY_MODEL, CURVILINEAR_MOVEMENT_TEST_3) {
363 const Eigen::Vector3d previous_pose(1, 2, -M_PI / 2);
364 const Eigen::Vector3d velocities(3, 1.5, M_PI / 4);
365 const double delta_t = 2;
370 Eigen::Matrix3d pose_jacobian =
model.get_jacobian_pose(previous_pose, velocities, delta_t);
373 EXPECT_NEAR(next_pose(0), 4, 0.01);
374 EXPECT_NEAR(next_pose(1), -4, 0.01);
375 EXPECT_NEAR(next_pose(2), 0.0, 0.01);
376 EXPECT_FLOAT_EQ(pose_jacobian(0, 0), 1);
377 EXPECT_FLOAT_EQ(pose_jacobian(0, 1), 0);
378 EXPECT_NEAR(pose_jacobian(0, 2), 6, 0.01);
379 EXPECT_FLOAT_EQ(pose_jacobian(1, 0), 0);
380 EXPECT_FLOAT_EQ(pose_jacobian(1, 1), 1);
381 EXPECT_NEAR(pose_jacobian(1, 2), 3, 0.01);
382 EXPECT_FLOAT_EQ(pose_jacobian(2, 0), 0);
383 EXPECT_FLOAT_EQ(pose_jacobian(2, 1), 0);
384 EXPECT_FLOAT_EQ(pose_jacobian(2, 2), 1);
std::shared_ptr< IVehicleModel > model