87 Eigen::VectorXi associations_first = Eigen::VectorXi::Ones(4) * -1;
88 Eigen::VectorXi associations_second = Eigen::VectorXi::Ones(4) * -1;
89 EXPECT_CALL(*mock_motion_model_ptr, get_pose_difference)
91 .WillRepeatedly(testing::Return(Eigen::Vector3d(1.1, 0.0, 0.0)));
92 EXPECT_CALL(*mock_motion_model_ptr, get_jacobian_motion_data)
94 .WillRepeatedly(testing::Return(Eigen::Matrix3d::Identity() * 0.1));
96 EXPECT_CALL(*mock_data_association_ptr, associate)
98 .WillOnce(testing::Return(associations_first))
99 .WillOnce(testing::Return(associations_second));
101 Eigen::VectorXd eigen_cones_start(8);
102 eigen_cones_start << 3.0, 1.0, 3.0, -1.0, 6.0, 1.0, 6.0, -1.0;
103 Eigen::VectorXd eigen_cones_end(8);
104 eigen_cones_end << -1.0, 1.0, -1.0, -1.0, 2.0, 1.0, 2.0, -1.0;
106 EXPECT_CALL(*mock_landmark_filter_ptr, filter)
108 .WillOnce(testing::Return(eigen_cones_start))
109 .WillOnce(testing::Return(eigen_cones_end));
110 EXPECT_CALL(*mock_landmark_filter_ptr, delete_landmarks).Times(2);
112 EXPECT_CALL(*mock_loop_closure_ptr, detect)
117 velocities.
timestamp_ = solver->_last_pose_update_ + rclcpp::Duration(1, 0);
122 std::vector<common_lib::structures::Cone> cones_start, cones_end;
124 cones_start.push_back(
127 cones_start.push_back(
138 solver->add_observations(cones_start, rclcpp::Clock().now());
139 solver->add_velocities(velocities);
140 velocities.
timestamp_ += rclcpp::Duration(1, 0);
141 solver->add_velocities(velocities);
142 velocities.
timestamp_ += rclcpp::Duration(1, 0);
143 solver->add_velocities(velocities);
144 velocities.
timestamp_ += rclcpp::Duration(1, 0);
145 solver->add_velocities(velocities);
146 velocities.
timestamp_ += rclcpp::Duration(1, 0);
147 solver->add_velocities(velocities);
149 const std::vector<common_lib::structures::Cone> map_before_observations =
150 solver->get_map_estimate();
152 solver->add_observations(cones_end, rclcpp::Clock().now());
154 const std::vector<common_lib::structures::Cone> map_after_observations =
155 solver->get_map_estimate();
158 EXPECT_NEAR(pose_before_observations.
position.
x, 4.4, 0.5);
159 EXPECT_NEAR(pose_after_observations.
position.
x, 4.4, 0.2);
160 EXPECT_EQ(map_before_observations.size(), 4);
161 EXPECT_EQ(map_after_observations.size(), 8);
162 EXPECT_NEAR(map_before_observations[0].position.x, 3.0, 0.2);
163 EXPECT_NEAR(map_before_observations[1].position.x, 3.0, 0.2);
164 EXPECT_NEAR(map_before_observations[2].position.x, 6.0, 0.2);
165 EXPECT_NEAR(map_before_observations[3].position.x, 6.0, 0.2);
166 EXPECT_NEAR(map_after_observations[0].position.x, 3.0, 0.2);
167 EXPECT_NEAR(map_after_observations[1].position.x, 3.0, 0.2);
168 EXPECT_NEAR(map_after_observations[2].position.x, 6.0, 0.2);
169 EXPECT_NEAR(map_after_observations[3].position.x, 6.0, 0.2);
170 EXPECT_NEAR(map_before_observations[0].position.y, 1.0, 0.2);
171 EXPECT_NEAR(map_before_observations[1].position.y, -1.0, 0.2);
172 EXPECT_NEAR(map_before_observations[2].position.y, 1.0, 0.2);
173 EXPECT_NEAR(map_before_observations[3].position.y, -1.0, 0.2);
174 EXPECT_NEAR(map_after_observations[0].position.y, 1.0, 0.2);
175 EXPECT_NEAR(map_after_observations[1].position.y, -1.0, 0.2);
176 EXPECT_NEAR(map_after_observations[2].position.y, 1.0, 0.2);
177 EXPECT_NEAR(map_after_observations[3].position.y, -1.0, 0.2);