7 const Eigen::Vector3d &previous_pose,
const Eigen::VectorXd &motion_data,
8 const double delta_t) {
9 Eigen::Vector3d pose_difference;
10 if (::abs(motion_data(2)) < 0.0001) {
11 pose_difference(0) = (motion_data(0) * delta_t + motion_data(3) * ::pow(delta_t, 2) / 2) *
12 ::cos(previous_pose(2));
13 pose_difference(1) = (motion_data(0) * delta_t + motion_data(3) * ::pow(delta_t, 2) / 2) *
14 ::sin(previous_pose(2));
17 ((motion_data(0) * motion_data(2) + motion_data(3) * motion_data(2) * delta_t) *
18 ::sin(previous_pose(2) + motion_data(2) * delta_t) +
19 motion_data(3) * ::cos(previous_pose(2) + motion_data(2) * delta_t) -
20 motion_data(0) * motion_data(2) * ::sin(previous_pose(2)) -
21 motion_data(3) * ::cos(previous_pose(2))) /
22 ::pow(motion_data(2), 2);
24 ((-motion_data(0) * motion_data(2) - motion_data(3) * motion_data(2) * delta_t) *
25 ::cos(previous_pose(2) + motion_data(2) * delta_t) +
26 motion_data(3) * ::sin(previous_pose(2) + motion_data(2) * delta_t) +
27 motion_data(0) * motion_data(2) * ::cos(previous_pose(2)) -
28 motion_data(3) * ::sin(previous_pose(2))) /
29 ::pow(motion_data(2), 2);
32 return pose_difference;
36 const Eigen::Vector3d &previous_pose,
const Eigen::VectorXd &motion_data,
37 const double delta_t) {
38 Eigen::Matrix3d jacobian = Eigen::Matrix3d::Identity();
39 if (::abs(motion_data(2)) < 0.001) {
40 jacobian(0, 2) = -(motion_data(0) * delta_t + motion_data(3) * ::pow(delta_t, 2) / 2) *
41 ::sin(previous_pose(2));
42 jacobian(1, 2) = (motion_data(0) * delta_t + motion_data(3) * ::pow(delta_t, 2) / 2) *
43 ::cos(previous_pose(2));
46 (-motion_data(3) * ::sin(previous_pose(2) + motion_data(2) * delta_t) +
47 (motion_data(0) * motion_data(2) + motion_data(3) * motion_data(2) * delta_t) *
48 ::cos(previous_pose(2) + motion_data(2) * delta_t) +
49 motion_data(3) * ::sin(previous_pose(2)) -
50 motion_data(0) * motion_data(2) * ::cos(previous_pose(2))) /
51 (motion_data(2) * motion_data(2));
52 jacobian(1, 2) = ((motion_data(0) + motion_data(3) * delta_t) * motion_data(2) *
53 ::sin(previous_pose(2) + motion_data(2) * delta_t) +
54 motion_data(3) * ::cos(previous_pose(2) + motion_data(2) * delta_t) -
55 motion_data(0) * motion_data(2) * ::sin(previous_pose(2)) -
56 motion_data(3) * ::cos(previous_pose(2))) /
57 (motion_data(2) * motion_data(2));
63 const Eigen::Vector3d &previous_pose,
const Eigen::VectorXd &motion_data,
64 const double delta_t) {
65 Eigen::MatrixXd jacobian = Eigen::MatrixXd::Zero(3, 4);
66 if (::abs(motion_data(2)) < 0.001) {
67 jacobian(0, 0) = ::cos(previous_pose(2)) * delta_t;
68 jacobian(0, 3) = ::cos(previous_pose(2)) * ::pow(delta_t, 2) / 2;
69 jacobian(1, 0) = ::sin(previous_pose(2)) * delta_t;
70 jacobian(1, 3) = ::sin(previous_pose(2)) * ::pow(delta_t, 2) / 2;
73 (::sin(motion_data(2) * delta_t + previous_pose(2)) - ::sin(previous_pose(2))) /
75 jacobian(0, 2) = -(((-delta_t * motion_data(0) - ::pow(delta_t, 2) * motion_data(3)) *
76 ::pow(motion_data(2), 2) +
78 ::cos(motion_data(2) * delta_t + previous_pose(2)) +
79 (motion_data(0) + 2 * motion_data(3) * delta_t) * motion_data(2) *
80 ::sin(delta_t * motion_data(2) + previous_pose(2)) -
81 ::sin(previous_pose(2)) * motion_data(0) * motion_data(2) -
82 2 * motion_data(3) * ::cos(previous_pose(2))) /
83 ::pow(motion_data(2), 3);
84 jacobian(0, 3) = delta_t * motion_data(2) * ::sin(motion_data(2) * delta_t + previous_pose(2)) +
85 ::cos(motion_data(2) * delta_t + previous_pose(2) - ::cos(previous_pose(2))) /
86 ::pow(motion_data(2), 2);
88 -(::cos(motion_data(2) * delta_t + previous_pose(2)) - ::cos(previous_pose(2))) /
90 jacobian(1, 2) = (((delta_t * motion_data(0) + ::pow(delta_t, 2) * motion_data(3)) *
91 ::pow(motion_data(2), 2) -
93 ::sin(motion_data(2) * delta_t + previous_pose(2)) +
94 (motion_data(0) + 2 * motion_data(3) * delta_t) * motion_data(2) *
95 ::cos(delta_t * motion_data(2) + previous_pose(2)) -
96 ::cos(previous_pose(2)) * motion_data(0) * motion_data(2) +
97 2 * motion_data(3) * ::sin(previous_pose(2))) /
98 ::pow(motion_data(2), 3);
99 jacobian(1, 3) = delta_t * motion_data(2) * ::cos(motion_data(2) * delta_t + previous_pose(2)) +
100 ::sin(motion_data(2) * delta_t + previous_pose(2) - ::sin(previous_pose(2))) /
101 ::pow(motion_data(2), 2);
103 jacobian(2, 2) = delta_t;