6 const Eigen::VectorXd& state,
const std::vector<int> matched_landmarks)
const {
7 Eigen::VectorXd matched_landmarks_coordinates(matched_landmarks.size() * 2);
8 for (
int i = 0; i < static_cast<int>(matched_landmarks.size()); i++) {
9 matched_landmarks_coordinates(2 * i) = state(matched_landmarks[i]);
10 matched_landmarks_coordinates(2 * i + 1) = state(matched_landmarks[i] + 1);
13 matched_landmarks_coordinates);
22 const Eigen::VectorXd& state,
const std::vector<int>& matched_landmarks)
const {
23 Eigen::MatrixXd jacobian = Eigen::MatrixXd::Zero(matched_landmarks.size() * 2, state.size());
24 double car_x = state(0);
25 double car_y = state(1);
26 double car_orientation = state(2);
28 int num_landmarks =
static_cast<int>(matched_landmarks.size());
30 for (
int i = 0; i < num_landmarks; ++i) {
31 jacobian(2 * i, 0) = -cos(car_orientation);
32 jacobian(2 * i + 1, 0) = sin(car_orientation);
33 jacobian(2 * i, 1) = -sin(car_orientation);
34 jacobian(2 * i + 1, 1) = -cos(car_orientation);
35 jacobian(2 * i, 2) = -sin(car_orientation) * (state(matched_landmarks[i]) - car_x) +
36 cos(car_orientation) * (state(matched_landmarks[i] + 1) - car_y);
37 jacobian(2 * i + 1, 2) = -cos(car_orientation) * (state(matched_landmarks[i]) - car_x) -
38 sin(car_orientation) * (state(matched_landmarks[i] + 1) - car_y);
39 jacobian(2 * i, matched_landmarks[i]) = cos(car_orientation);
40 jacobian(2 * i + 1, matched_landmarks[i]) = -sin(car_orientation);
41 jacobian(2 * i, matched_landmarks[i] + 1) = sin(car_orientation);
42 jacobian(2 * i + 1, matched_landmarks[i] + 1) = cos(car_orientation);
48 const Eigen::VectorXd& state,
const Eigen::VectorXd& new_landmarks)
const {
49 int num_landmarks = new_landmarks.size() / 2;
50 Eigen::MatrixXd gv = Eigen::MatrixXd::Zero(num_landmarks * 2, 3);
51 for (
int i = 0; i < num_landmarks; i++) {
54 gv(2 * i, 2) = -new_landmarks(2 * i) * sin(state(2)) - new_landmarks(2 * i + 1) * cos(state(2));
58 new_landmarks(2 * i) * cos(state(2)) - new_landmarks(2 * i + 1) * sin(state(2));
64 const Eigen::VectorXd& state,
const Eigen::VectorXd& new_landmarks)
const {
65 int num_landmarks = new_landmarks.size() / 2;
66 Eigen::MatrixXd gz = Eigen::MatrixXd::Zero(num_landmarks * 2, num_landmarks * 2);
67 for (
int i = 0; i < num_landmarks; i++) {
68 gz(2 * i, 2 * i) = cos(state(2));
69 gz(2 * i, 2 * i + 1) = -sin(state(2));
70 gz(2 * i + 1, 2 * i) = sin(state(2));
71 gz(2 * i + 1, 2 * i + 1) = cos(state(2));