6 #include <gtest/gtest.h> 15 for (
double x = 0.0; x < 0.05 ; x += 0.01)
17 geometry_msgs::Point p;
24 for (
double y = -0.15; y <= 0.15; y += 0.01)
26 geometry_msgs::Point p;
33 for (
double x = 0.0; x < 0.05 ; x += 0.001)
35 geometry_msgs::Point p;
43 TEST(TestICP, test_already_aligned)
45 std::vector<geometry_msgs::Point> source;
46 std::vector<geometry_msgs::Point> target;
54 EXPECT_NEAR(0.0, transform.translation.x, 1e-6);
55 EXPECT_NEAR(0.0, transform.translation.y, 1e-6);
56 EXPECT_NEAR(0.0, transform.rotation.x, 1e-8);
57 EXPECT_NEAR(0.0, transform.rotation.y, 1e-8);
58 EXPECT_NEAR(0.0, transform.rotation.z, 1e-6);
59 EXPECT_NEAR(1.0, transform.rotation.w, 1e-6);
62 TEST(TestICP, test_shifted)
64 std::vector<geometry_msgs::Point> source;
65 std::vector<geometry_msgs::Point> target;
74 EXPECT_NEAR(-0.1, transform.translation.x, 0.002);
75 EXPECT_NEAR(-0.1, transform.translation.y, 0.002);
76 EXPECT_NEAR(0.0, transform.rotation.x, 1e-8);
77 EXPECT_NEAR(0.0, transform.rotation.y, 1e-8);
78 EXPECT_NEAR(0.0, transform.rotation.z, 1e-8);
79 EXPECT_NEAR(1.0, transform.rotation.w, 1e-8);
82 TEST(TestICP, test_rotated)
84 std::vector<geometry_msgs::Point> source;
85 std::vector<geometry_msgs::Point> target;
94 EXPECT_NEAR(0.0, transform.translation.x, 0.002);
95 EXPECT_NEAR(0.0, transform.translation.y, 0.002);
96 EXPECT_NEAR(0.0, transform.rotation.x, 1e-8);
97 EXPECT_NEAR(0.0, transform.rotation.y, 1e-8);
99 EXPECT_NEAR(-0.2, theta, 1e-2);
102 TEST(TestICP, test_shifted_rotated)
104 std::vector<geometry_msgs::Point> source, source_t;
105 std::vector<geometry_msgs::Point> target;
113 EXPECT_NEAR(0.0, transform.rotation.x, 1e-8);
114 EXPECT_NEAR(0.0, transform.rotation.y, 1e-8);
116 EXPECT_NEAR(-0.3, theta, 1e-3);
119 transform.translation.x,
120 transform.translation.y,
123 for (
size_t i = 0; i < source.size(); i++)
125 EXPECT_NEAR(source[i].x, source_t[i].x, 0.002);
126 EXPECT_NEAR(source[i].y, source_t[i].y, 0.002);
131 int main(
int argc,
char **argv)
133 testing::InitGoogleTest(&argc, argv);
134 return RUN_ALL_TESTS();
void getIdealTarget(std::vector< geometry_msgs::Point > &points)
std::vector< geometry_msgs::Point > transform(const std::vector< geometry_msgs::Point > &points, double x, double y, double theta)
Transform a vector of points in 2d.
TEST(TestICP, test_already_aligned)
double alignICP(const std::vector< geometry_msgs::Point > source, const std::vector< geometry_msgs::Point > target, geometry_msgs::Transform &transform, size_t max_iterations=10, double min_delta_rmsd=0.000001)
Perform Iterative Closest Point (ICP) algorithm to align two point clouds in a two dimensional plane...
double thetaFromQuaternion(const geometry_msgs::Quaternion &q)
Get the 2d rotation from a quaternion.
int main(int argc, char **argv)