15 template <
class GRAPH_T>
    28     m1.insertObservation(from);
    29     m2.insertObservation(to);
    35         initial_pose = *initial_pose_in;
    39         params.icp.Align(&m1, &m2, initial_pose, info);
    42     rel_edge->copyFrom(*pdf);
    45     if (icp_info) *icp_info = info;
    49 template <
class GRAPH_T>
    59         from.
hasRangeImage, 
"Laser scan doesn't contain valid range image");
    61         to.
hasRangeImage, 
"Laser scan doesn't contain valid range image");
    78         params.icp.Align3D(&m1, &m2, initial_pose, info);
    84     if (fabs(pdf->getMeanVal().z()) < 0.1)
    86         rel_edge->copyFrom(*pdf);
    94     if (icp_info) *icp_info = info;
    99 template <
class GRAPH_T>
   105     size_t map_size = m->
size();
   110         size_t conservative_keep_point_every = map_size / low_lim;
   112             std::min(keep_point_every, conservative_keep_point_every);
   116     std::vector<bool> deletion_mask(map_size, 
true);
   117     for (
size_t i = 0; i != map_size; ++i)
   119         if (i % keep_point_every == 0)
   121             deletion_mask[i] = 
false;
   132 template <
class GRAPH_T>
   139     bool success = 
false;
   146     if (scan3D_in->hasRangeImage)
   148         scan3D_in->convertTo2DScan(**scan2D_out, 
params.conversion_params);
   153         std::cout << 
"No valid rangeImage found" << std::endl;
   161 template <
class GRAPH_T>
   167         "3D=>2D LaserScan Conversion Sensor label       = %s\n",
   170         "3D=>2D LaserScan Conversion angle sup          = %.2f deg\n",
   173         "3D=>2D LaserScan Conversion angle inf          = %.2f deg\n",
   176         "3D=>2D LaserScan Conversion oversampling ratio = %.2f\n",
   179         "3D=>2D LaserScan Conversion Z minimum          = %.2f\n",
   186 template <
class GRAPH_T>
   192     conversion_params.sensorLabel = source.
read_string(
   193         section, 
"conversion_sensor_label", 
"KINECT_TO_2D_SCAN", 
false);
   195         source.
read_double(section, 
"conversion_angle_sup", 10, 
false));
   197         source.
read_double(section, 
"conversion_angle_inf", 10, 
false));
   198     conversion_params.oversampling_ratio = source.
read_double(
   199         section, 
"conversion_oversampling_ratio", 1.1, 
false);
   201         section, 
"conversion_z_min", 0, 
false);  
   204     icp.options.loadFromConfigFile(source, 
"ICP");
   206     has_read_config = 
true;
 
void dumpToTextStream(std::ostream &out) const override
This method should clearly display all the contents of the structure in textual form, sending it to a std::ostream. 
 
std::string read_string(const std::string §ion, const std::string &name, const std::string &defaultValue, bool failIfNotFound=false) const
 
std::string std::string format(std::string_view fmt, ARGS &&... args)
 
bool convert3DTo2DRangeScan(mrpt::obs::CObservation3DRangeScan::Ptr &scan3D_in, mrpt::obs::CObservation2DRangeScan::Ptr *scan2D_out)
Wrapper around the CObservation3DRangeScan::convertTo2DScan corresponding method. ...
 
void getICPEdge(const mrpt::obs::CObservation2DRangeScan &from, const mrpt::obs::CObservation2DRangeScan &to, constraint_t *rel_edge, const mrpt::poses::CPose2D *initial_pose=nullptr, mrpt::slam::CICP::TReturnInfo *icp_info=nullptr)
Align the 2D range scans provided and fill the potential edge that can transform the one into the oth...
 
std::string sensorLabel
The sensor label that will have the newly created observation. 
 
mrpt::obs::T3DPointsTo2DScanParams conversion_params
Struct holding the parameters of 3D to the corresponding 2D range scan conversion. 
 
double oversampling_ratio
(Default=1.2=120%) How many more laser scans rays to create (read docs for CObservation3DRangeScan::c...
 
double angle_sup
(Default=5 degrees) [Only if use_origin_sensor_pose=false] The upper & lower half-FOV angle (in radia...
 
A range or depth 3D scan measurement, as from a time-of-flight range camera or a structured-light dep...
 
void decimatePointsMap(mrpt::maps::CPointsMap *m, size_t keep_point_every=4, size_t low_lim=0)
Reduce the size of the given CPointsMap by keeping one out of "keep_point_every" points. 
 
mrpt::vision::TStereoCalibParams params
 
A cloud of points in 2D or 3D, which can be built from a sequence of laser scans. ...
 
double z_min
(Default:-inf, +inf) [Only if use_origin_sensor_pose=true] Only obstacle points with Z coordinates wi...
 
static Ptr Create(Args &&... args)
 
TConfigParams options
The options employed by the ICP align. 
 
typename GRAPH_T::constraint_t constraint_t
 
A cloud of points in 2D or 3D, which can be built from a sequence of laser scans or other sensors...
 
This class allows loading and storing values and vectors of different types from a configuration text...
 
constexpr double DEG2RAD(const double x)
Degrees to radians. 
 
bool hasRangeImage
true means the field rangeImage contains valid data 
 
void loadFromConfigFile(const mrpt::config::CConfigFileBase &source, const std::string §ion) override
This method load the options from a ".ini"-like file or memory-stored string list. 
 
double read_double(const std::string §ion, const std::string &name, double defaultValue, bool failIfNotFound=false) const
 
virtual void dumpToTextStream(std::ostream &out) const
This method should clearly display all the contents of the structure in textual form, sending it to a std::ostream. 
 
#define ASSERTDEBMSG_(f, __ERROR_MSG)
 
A "CObservation"-derived class that represents a 2D range scan measurement (typically from a laser sc...
 
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). 
 
mrpt::vision::TStereoCalibResults out
 
constexpr double RAD2DEG(const double x)
Radians to degrees. 
 
The ICP algorithm return information. 
 
size_t size() const
Save the point cloud as a PCL PCD file, in either ASCII or binary format. 
 
void applyDeletionMask(const std::vector< bool > &mask)
Remove from the map the points marked in a bool's array as "true". 
 
bool insertObservation(const mrpt::obs::CObservation &obs, const mrpt::poses::CPose3D *robotPose=nullptr)
Insert the observation information into this map.