52 unsigned int window_size) {
58 for (
unsigned int i = 1; i <= num_poses; i++) {
59 gtsam::Key key = gtsam::Symbol(
'x', i);
64 for (
unsigned int j = 1; j <= num_landmarks; j++) {
65 gtsam::Key key = gtsam::Symbol(
'l', j);
70 for (
unsigned int i = 1; i <= num_poses; i++) {
71 gtsam::Key key = gtsam::Symbol(
'x', i);
72 gtsam::Key key2 = gtsam::Symbol(
'x', i + 1);
74 key, key2, gtsam::Pose2(3, 1, 0),
75 gtsam::noiseModel::Diagonal::Sigmas(gtsam::Vector3(0.2, 0.2, 0.2))));
79 for (
unsigned int landmark_index = 1; landmark_index <= num_landmarks; landmark_index++) {
80 gtsam::Key key = gtsam::Symbol(
'l', landmark_index);
81 for (
unsigned int pose_index = 1; pose_index <= num_poses; ++pose_index) {
82 factor_graph.add(gtsam::BearingRangeFactor<gtsam::Pose2, gtsam::Point2>(
83 gtsam::Symbol(
'x', pose_index), key, gtsam::Rot2(0), 1,
84 gtsam::noiseModel::Diagonal::Sigmas(gtsam::Vector2(0.1, 0.1))));
89 gtsam::Values optimized_values;
91 EXPECT_NO_THROW(optimized_values =
95 EXPECT_EQ(optimized_values.size(), num_poses + num_landmarks);
96 for (
unsigned int i = 1; i <= num_poses; i++) {
97 EXPECT_TRUE(optimized_values.exists(gtsam::Symbol(
'x', i)));
99 for (
unsigned int j = 1; j <= num_landmarks; j++) {
100 EXPECT_TRUE(optimized_values.exists(gtsam::Symbol(
'l', j)));
104 for (
int i = 1; i <= static_cast<int>(num_poses - window_size); i++) {
105 gtsam::Pose2 optimized_pose = optimized_values.at<gtsam::Pose2>(gtsam::Symbol(
'x', i));
106 gtsam::Pose2 old_pose = old_values.at<gtsam::Pose2>(gtsam::Symbol(
'x', i));
107 EXPECT_TRUE(optimized_pose.equals(old_pose));
111 for (
unsigned int i = num_poses - window_size + 1; i <= num_poses; i++) {
112 gtsam::Pose2 optimized_pose = optimized_values.at<gtsam::Pose2>(gtsam::Symbol(
'x', i));
113 gtsam::Pose2 old_pose = old_values.at<gtsam::Pose2>(gtsam::Symbol(
'x', i));
114 EXPECT_FALSE(optimized_pose.equals(old_pose) && num_landmarks != 0);
117 for (
unsigned int landmark_index = 1; landmark_index <= num_landmarks; landmark_index++) {
118 gtsam::Point2 optimized_landmark =
119 optimized_values.at<gtsam::Point2>(gtsam::Symbol(
'l', landmark_index));
120 gtsam::Point2 old_landmark = old_values.at<gtsam::Point2>(gtsam::Symbol(
'l', landmark_index));
121 EXPECT_FALSE(optimized_landmark.x() == old_landmark.x() && num_poses != 0);
122 EXPECT_FALSE(optimized_landmark.y() == old_landmark.y() && num_poses != 0);