22 #include <gtest/gtest.h> 41 0.910f, 0.900f, 0.910f, 0.900f, 0.900f, 0.890f, 0.890f,
42 0.880f, 0.890f, 0.880f, 0.880f, 0.880f, 0.880f, 0.880f,
43 0.880f, 0.870f, 0.880f, 0.870f, 0.870f, 0.870f, 0.880f,
44 0.880f, 0.880f, 0.880f, 0.880f, 0.880f, 0.880f, 0.880f,
45 0.880f, 0.880f, 0.880f, 0.880f, 0.880f, 0.880f, 0.880f,
46 0.880f, 0.890f, 0.880f, 0.880f, 0.880f, 0.890f, 0.880f,
47 0.890f, 0.890f, 0.880f, 0.890f, 0.890f, 0.880f, 0.890f,
48 0.890f, 0.890f, 0.890f, 0.890f, 0.890f, 0.900f, 0.900f,
49 0.900f, 0.900f, 0.900f, 0.910f, 0.910f, 0.910f, 0.910f,
50 0.920f, 0.920f, 0.920f, 0.920f, 0.920f, 0.930f, 0.930f,
51 0.930f, 0.930f, 0.940f, 0.940f, 0.950f, 0.950f, 0.950f,
52 0.950f, 0.960f, 0.960f, 0.970f, 0.970f, 0.970f, 0.980f,
53 0.980f, 0.990f, 1.000f, 1.000f, 1.000f, 1.010f, 1.010f,
54 1.020f, 1.030f, 1.030f, 1.030f, 1.040f, 1.050f, 1.060f,
55 1.050f, 1.060f, 1.070f, 1.070f, 1.080f, 1.080f, 1.090f,
56 1.100f, 1.110f, 1.120f, 1.120f, 1.130f, 1.140f, 1.140f,
57 1.160f, 1.170f, 1.180f, 1.180f, 1.190f, 1.200f, 1.220f,
58 1.220f, 1.230f, 1.230f, 1.240f, 1.250f, 1.270f, 1.280f,
59 1.290f, 1.300f, 1.320f, 1.320f, 1.350f, 1.360f, 1.370f,
60 1.390f, 1.410f, 1.410f, 1.420f, 1.430f, 1.450f, 1.470f,
61 1.490f, 1.500f, 1.520f, 1.530f, 1.560f, 1.580f, 1.600f,
62 1.620f, 1.650f, 1.670f, 1.700f, 1.730f, 1.750f, 1.780f,
63 1.800f, 1.830f, 1.850f, 1.880f, 1.910f, 1.940f, 1.980f,
64 2.010f, 2.060f, 2.090f, 2.130f, 2.180f, 2.220f, 2.250f,
65 2.300f, 2.350f, 2.410f, 2.460f, 2.520f, 2.570f, 2.640f,
66 2.700f, 2.780f, 2.850f, 2.930f, 3.010f, 3.100f, 3.200f,
67 3.300f, 3.390f, 3.500f, 3.620f, 3.770f, 3.920f, 4.070f,
68 4.230f, 4.430f, 4.610f, 4.820f, 5.040f, 5.290f, 5.520f,
69 8.970f, 8.960f, 8.950f, 8.930f, 8.940f, 8.930f, 9.050f,
70 9.970f, 9.960f, 10.110f, 13.960f, 18.870f, 19.290f, 81.910f,
71 20.890f, 48.750f, 48.840f, 48.840f, 19.970f, 19.980f, 19.990f,
72 15.410f, 20.010f, 19.740f, 17.650f, 17.400f, 14.360f, 12.860f,
73 11.260f, 11.230f, 8.550f, 8.630f, 9.120f, 9.120f, 8.670f,
74 8.570f, 7.230f, 7.080f, 7.040f, 6.980f, 6.970f, 5.260f,
75 5.030f, 4.830f, 4.620f, 4.440f, 4.390f, 4.410f, 4.410f,
76 4.410f, 4.430f, 4.440f, 4.460f, 4.460f, 4.490f, 4.510f,
77 4.540f, 3.970f, 3.820f, 3.730f, 3.640f, 3.550f, 3.460f,
78 3.400f, 3.320f, 3.300f, 3.320f, 3.320f, 3.340f, 2.790f,
79 2.640f, 2.600f, 2.570f, 2.540f, 2.530f, 2.510f, 2.490f,
80 2.490f, 2.480f, 2.470f, 2.460f, 2.460f, 2.460f, 2.450f,
81 2.450f, 2.450f, 2.460f, 2.460f, 2.470f, 2.480f, 2.490f,
82 2.490f, 2.520f, 2.510f, 2.550f, 2.570f, 2.610f, 2.640f,
83 2.980f, 3.040f, 3.010f, 2.980f, 2.940f, 2.920f, 2.890f,
84 2.870f, 2.830f, 2.810f, 2.780f, 2.760f, 2.740f, 2.720f,
85 2.690f, 2.670f, 2.650f, 2.630f, 2.620f, 2.610f, 2.590f,
86 2.560f, 2.550f, 2.530f, 2.510f, 2.500f, 2.480f, 2.460f,
87 2.450f, 2.430f, 2.420f, 2.400f, 2.390f, 2.380f, 2.360f,
88 2.350f, 2.340f, 2.330f, 2.310f, 2.300f, 2.290f, 2.280f,
89 2.270f, 2.260f, 2.250f, 2.240f, 2.230f, 2.230f, 2.220f,
90 2.210f, 2.200f, 2.190f, 2.180f, 2.170f, 1.320f, 1.140f,
91 1.130f, 1.130f, 1.120f, 1.120f, 1.110f, 1.110f, 1.110f,
92 1.110f, 1.100f, 1.110f, 1.100f};
94 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
95 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
96 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
97 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
98 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
99 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
100 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
101 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
102 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
103 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
104 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
105 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
106 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
107 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
108 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
109 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1};
112 0.720f, 0.720f, 0.720f, 0.720f, 0.720f, 0.720f, 0.710f,
113 0.720f, 0.710f, 0.710f, 0.710f, 0.710f, 0.710f, 0.710f,
114 0.710f, 0.710f, 0.710f, 0.710f, 0.710f, 0.710f, 0.720f,
115 0.720f, 0.720f, 0.720f, 0.730f, 0.730f, 0.730f, 0.730f,
116 0.730f, 0.730f, 0.730f, 0.740f, 0.740f, 0.740f, 0.740f,
117 0.740f, 0.740f, 0.750f, 0.750f, 0.750f, 0.750f, 0.750f,
118 0.750f, 0.750f, 0.750f, 0.760f, 0.760f, 0.760f, 0.760f,
119 0.760f, 0.760f, 0.760f, 0.760f, 0.770f, 0.770f, 0.770f,
120 0.770f, 0.780f, 0.780f, 0.780f, 0.790f, 0.790f, 0.800f,
121 0.800f, 0.800f, 0.800f, 0.800f, 0.800f, 0.810f, 0.810f,
122 0.820f, 0.820f, 0.830f, 0.830f, 0.840f, 0.840f, 0.850f,
123 0.850f, 0.860f, 0.860f, 0.860f, 0.870f, 0.870f, 0.880f,
124 0.890f, 0.890f, 0.900f, 0.900f, 0.910f, 0.920f, 0.930f,
125 0.930f, 0.940f, 0.940f, 0.940f, 0.950f, 0.960f, 0.960f,
126 0.970f, 0.980f, 0.990f, 1.000f, 1.010f, 1.020f, 1.030f,
127 1.040f, 1.050f, 1.060f, 1.070f, 1.080f, 1.080f, 1.100f,
128 1.100f, 1.120f, 1.120f, 1.140f, 1.140f, 1.170f, 1.160f,
129 1.180f, 1.190f, 1.210f, 1.220f, 1.240f, 1.250f, 1.280f,
130 1.290f, 1.300f, 1.320f, 1.340f, 1.350f, 1.380f, 1.390f,
131 1.420f, 1.440f, 1.460f, 1.470f, 1.500f, 1.520f, 1.550f,
132 1.570f, 1.600f, 1.630f, 1.670f, 1.690f, 1.730f, 1.760f,
133 1.790f, 1.820f, 1.870f, 1.900f, 1.940f, 1.970f, 2.030f,
134 2.080f, 2.130f, 2.170f, 2.230f, 2.280f, 2.340f, 2.400f,
135 2.490f, 2.550f, 2.630f, 2.700f, 2.810f, 2.880f, 3.010f,
136 3.090f, 3.240f, 3.340f, 3.500f, 3.620f, 3.810f, 3.950f,
137 4.180f, 4.340f, 4.620f, 8.170f, 8.140f, 8.150f, 8.120f,
138 8.110f, 8.100f, 8.100f, 8.300f, 9.040f, 9.130f, 9.130f,
139 13.030f, 18.050f, 19.150f, 81.910f, 20.070f, 47.980f, 48.040f,
140 48.030f, 19.140f, 19.180f, 19.180f, 19.190f, 14.550f, 19.210f,
141 16.850f, 16.840f, 7.800f, 7.770f, 7.770f, 7.750f, 7.770f,
142 7.760f, 7.780f, 7.760f, 8.320f, 8.350f, 8.350f, 8.090f,
143 7.720f, 7.730f, 6.430f, 6.360f, 6.290f, 6.260f, 6.230f,
144 6.220f, 6.160f, 5.800f, 4.510f, 4.410f, 4.240f, 4.140f,
145 4.000f, 3.910f, 3.790f, 3.680f, 3.660f, 3.680f, 3.680f,
146 3.700f, 3.710f, 3.730f, 3.730f, 3.760f, 3.770f, 3.790f,
147 3.820f, 3.850f, 3.900f, 3.940f, 3.980f, 3.250f, 3.180f,
148 3.140f, 3.070f, 3.030f, 2.970f, 2.930f, 2.880f, 2.850f,
149 2.790f, 2.760f, 2.710f, 2.680f, 2.660f, 2.670f, 2.690f,
150 2.710f, 2.720f, 2.740f, 2.760f, 2.770f, 2.780f, 2.800f,
151 2.170f, 2.120f, 2.090f, 2.060f, 2.020f, 2.010f, 1.990f,
152 1.980f, 1.970f, 1.960f, 1.950f, 1.950f, 1.940f, 1.940f,
153 1.950f, 1.940f, 1.940f, 1.950f, 1.930f, 1.940f, 1.940f,
154 1.940f, 1.940f, 1.940f, 1.950f, 1.960f, 1.960f, 1.980f,
155 1.980f, 2.000f, 2.010f, 2.030f, 2.060f, 2.090f, 2.120f,
156 2.190f, 2.560f, 2.540f, 2.530f, 2.520f, 2.500f, 2.490f,
157 2.470f, 2.460f, 2.450f, 2.440f, 2.420f, 2.410f, 2.400f,
158 2.390f, 2.380f, 2.370f, 2.360f, 2.350f, 2.340f, 2.340f,
159 2.330f, 2.320f, 2.310f, 2.300f, 2.290f, 2.290f, 2.290f,
160 2.280f, 2.270f, 2.260f, 2.260f, 2.250f, 2.240f, 2.240f,
161 2.230f, 2.230f, 2.220f, 2.220f, 2.210f, 2.210f, 2.200f,
162 2.200f, 2.190f, 2.190f, 2.190f, 2.180f, 2.180f, 2.170f,
163 2.170f, 2.170f, 2.160f, 2.160f};
165 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
166 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
167 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
168 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
169 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
170 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
171 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
172 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
173 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
174 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
175 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
176 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
177 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
178 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
179 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
180 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1};
182 #define SCANS_SIZE (sizeof(SCAN_RANGES_1) / sizeof(SCAN_RANGES_1[0])) 218 ICP.
Align(&m1, &m2, initialPose, &runningTime, (
void*)&info);
233 EXPECT_NEAR(good_pose.
distanceTo(pdf->getMeanVal()), 0, 0.02);
238 CSphere::Ptr sph = mrpt::make_aligned_shared<CSphere>(0.5);
239 sph->setLocation(0, 0, 0);
240 sph->setColor(1, 0, 0);
243 CDisk::Ptr pln = mrpt::make_aligned_shared<opengl::CDisk>();
244 pln->setDiskRadius(2);
246 pln->setColor(0.8, 0, 0);
250 CDisk::Ptr pln = mrpt::make_aligned_shared<opengl::CDisk>();
251 pln->setDiskRadius(2);
254 pln->setColor(0.9, 0, 0);
286 mrpt::make_aligned_shared<CGridPlaneXY>(-20, 20, -20, 20, 0, 1);
287 plane1->setColor(0.3, 0.3, 0.3);
288 scene1->insert(plane1);
289 scene2->insert(plane1);
290 scene3->insert(plane1);
294 scene1->insert(world);
298 mrpt::make_aligned_shared<CAngularObservationMesh>();
300 mrpt::make_aligned_shared<CAngularObservationMesh>();
302 CAngularObservationMesh::trace2DSetOfRays(
304 CAngularObservationMesh::TDoubleRange::CreateFromAperture(
306 CAngularObservationMesh::TDoubleRange::CreateFromAperture(
308 CAngularObservationMesh::trace2DSetOfRays(
310 CAngularObservationMesh::TDoubleRange::CreateFromAperture(
312 CAngularObservationMesh::TDoubleRange::CreateFromAperture(
319 origin1->setScale(0.6f);
320 scene1->insert(origin1);
321 scene2->insert(origin1);
326 origin2->setScale(0.6f);
327 scene1->insert(origin2);
328 scene2->insert(origin2);
334 aom1->generatePointCloud(&M1);
335 aom2->generatePointCloud(&M2);
351 scene2->insert(PTNS1);
352 scene2->insert(PTNS2);
368 &run_time, &icp_info);
380 <<
"ICP output: mean= " <<
mean << endl
void changeCoordinatesReference(const mrpt::poses::CPose2D &b)
Replace each point by (pose compounding operator).
double distanceTo(const CPoseOrPoint< OTHERCLASS > &b) const
Returns the Euclidean distance to another pose/point:
mrpt::math::CVectorDouble getAsVectorVal() const
Return the pose or point as a 1xN vector with all the components (see derived classes for each implem...
TICPAlgorithm ICP_algorithm
The algorithm to use (default: icpClassic).
mrpt::poses::CPosePDF::Ptr Align(const mrpt::maps::CMetricMap *m1, const mrpt::maps::CMetricMap *m2, const mrpt::poses::CPose2D &grossEst, float *runningTime=nullptr, void *info=nullptr)
The method for aligning a pair of metric maps, aligning only 2D + orientation.
mrpt::img::TColorf color
Color of points.
mrpt::poses::CPose3DPDF::Ptr Align3D(const mrpt::maps::CMetricMap *m1, const mrpt::maps::CMetricMap *m2, const mrpt::poses::CPose3D &grossEst, float *runningTime=nullptr, void *info=nullptr)
The method for aligning a pair of metric maps, aligning the full 6D pose.
Several implementations of ICP (Iterative closest point) algorithms for aligning two point maps or a ...
double DEG2RAD(const double x)
Degrees to radians.
virtual void getAs3DObject(mrpt::opengl::CSetOfObjects::Ptr &outObj) const override
Returns a 3D object representing the map.
A cloud of points in 2D or 3D, which can be built from a sequence of laser scans. ...
void generateObjects(CSetOfObjects::Ptr &world)
TEST_F(ICPTests, AlignScans_icpClassic)
void align2scans(const TICPAlgorithm icp_method)
double smallestThresholdDist
The size for threshold such that iterations will stop, since it is considered precise enough...
TConfigParams options
The options employed by the ICP align.
#define ASSERT_(f)
Defines an assertion mechanism.
This base provides a set of functions for maths stuff.
CPose3D viewpoint2(0.5, -0.2, 2.6, DEG2RAD(-5), DEG2RAD(100), DEG2RAD(-7))
unsigned int maxIterations
Maximum number of iterations to run.
This namespace contains representation of robot actions and observations.
bool doRANSAC
Perform a RANSAC step, mrpt::tfest::se2_l2_robust(), after the ICP convergence, to obtain a better es...
Classes for 2D/3D geometry representation, both of single values and probability density distribution...
TICPAlgorithm
The ICP algorithm selection, used in mrpt::slam::CICP::options mrpt_slam_grp.
const size_t HOW_MANY_YAWS
This is the global namespace for all Mobile Robot Programming Toolkit (MRPT) libraries.
A "CObservation"-derived class that represents a 2D range scan measurement (typically from a laser sc...
static void generateObjects(CSetOfObjects::Ptr &world)
TRenderOptions renderOptions
A class used to store a 2D pose, including the 2D coordinate point and a heading (phi) angle...
A class used to store a 3D pose (a 3D translation + a rotation in 3D).
double ALFA
The scale factor for thresholds everytime convergence is achieved.
CSetOfObjects::Ptr CornerXYZ(float scale=1.0)
Returns three arrows representing a X,Y,Z 3D corner.
CPose3D SCAN2_POSE_ERROR(0.15, -0.07, 0.10, -0.03, 0.1, 0.1)
A RGB color - floats in the range [0,1].
The ICP algorithm return information.
The namespace for 3D scene representation and rendering.
float aperture
The "aperture" or field-of-view of the range finder, in radians (typically M_PI = 180 degrees)...
void loadFromVectors(size_t nRays, const float *scanRanges, const char *scanValidity)
double thresholdDist
Initial threshold distance for two points to become a correspondence.
bool insertObservation(const mrpt::obs::CObservation *obs, const mrpt::poses::CPose3D *robotPose=NULL)
Insert the observation information into this map.
const size_t HOW_MANY_PITCHS
EIGEN_STRONG_INLINE double mean() const
Computes the mean of the entire matrix.
bool rightToLeft
The scanning direction: true=counterclockwise; false=clockwise.
CPose3D viewpoint1(-0.3, 0.7, 3, DEG2RAD(5), DEG2RAD(80), DEG2RAD(3))