21 static constexpr 
unsigned FRBITS = 9;
    31     if (
auto* o = dynamic_cast<const mrpt::obs::CObservation2DRangeScan*>(&obs);
    37     if (
auto* o = dynamic_cast<const mrpt::obs::CObservation3DRangeScan*>(&obs);
    58     pts.insertionOptions.addToExistingPointsMap = 
true;
    59     pts.insertionOptions.disableDeletion = 
true;
    60     pts.insertionOptions.fuseWithExisting = 
false;
    61     pts.insertionOptions.insertInvalidPoints = 
false;
    62     pts.insertionOptions.minDistBetweenLaserPoints = .0;  
    64     pts.loadFromRangeScan(o, &robotPose);
    66     const auto sensorPose3D = robotPose + o.
sensorPose;
    75     const float maxValidRange)
    84     for (std::size_t idx = 0; idx < xs.size();
   107     const auto sensorPose3D = robotPose + o.
sensorPose;
   128     if (maxFreeCertainty == .0f) maxFreeCertainty = maxCertainty;
   130     const voxelType logodd_observation_free =
   131         std::max<voxelType>(1, 
p2l(maxFreeCertainty));
   132     const voxelType logodd_observation_occupied =
   133         3 * std::max<voxelType>(1, 
p2l(maxCertainty));
   138         logodd_observation_occupied;
   157     const int Acx = trg_cx - cx;
   158     const int Acy = trg_cy - cy;
   159     const int Acz = trg_cz - cz;
   161     const int Acx_ = std::abs(Acx);
   162     const int Acy_ = std::abs(Acy);
   163     const int Acz_ = std::abs(Acz);
   165     const int nStepsRay = 
mrpt::max3(Acx_, Acy_, Acz_);
   166     if (!nStepsRay) 
return;  
   168     const float N_1 = 1.0f / nStepsRay;
   171     const int frAcx = (Acx < 0 ? -1 : +1) * 
round((Acx_ << 
FRBITS) * N_1);
   172     const int frAcy = (Acy < 0 ? -1 : +1) * 
round((Acy_ << 
FRBITS) * N_1);
   173     const int frAcz = (Acz < 0 ? -1 : +1) * 
round((Acz_ << 
FRBITS) * N_1);
   180     for (
int nStep = 0; nStep < nStepsRay; nStep++)
   183             cx, cy, cz, logodd_observation_free, logodd_thres_free);
   199         trg_cx, trg_cy, trg_cz, logodd_observation_occupied,
   200         logodd_thres_occupied);
 
void loadFromConfigFile(const mrpt::config::CConfigFileBase &source, const std::string §ion) override
This method load the options from a ".ini" file. 
 
uint8_t decimation
(Default:1) If !=1, split the range image in blocks of DxD (D=decimation), and only generates one poi...
 
uint32_t LF_decimation
[LikelihoodField] The decimation of the points in a scan, default=1 == no decimation ...
 
const mrpt::aligned_std_vector< float > & getPointsBufferRef_y() const
Provides a direct access to a read-only reference of the internal point buffer. 
 
uint16_t decimation
Decimation for insertPointCloud() or 2D range scans (Default: 1) 
 
A range or depth 3D scan measurement, as from a time-of-flight range camera or a structured-light dep...
 
void internal_insertObservationScan2D(const mrpt::obs::CObservation2DRangeScan &o, const mrpt::poses::CPose3D &robotPose)
 
A cloud of points in 2D or 3D, which can be built from a sequence of laser scans. ...
 
float LF_stdHit
[LikelihoodField] The laser range "sigma" used in computations; Default value = 0.35 
 
float LF_maxCorrsDistance
[LikelihoodField] The max. 
 
uint16_t decimation_3d_range
Specify the decimation of 3D range scans. 
 
TInsertionOptions insertionOptions
With this struct options are provided to the observation insertion process. 
 
static void updateCell_fast_occupied(cell_t *theCell, const cell_t logodd_obs, const cell_t thres)
Performs Bayesian fusion of a new observation of a cell. 
 
bool LF_useSquareDist
[LikelihoodField] (Default:false) Use exp(dist^2/std^2) instead of exp(dist^2/std^2) ...
 
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...
 
bool internal_insertObservation(const mrpt::obs::CObservation &obs, const mrpt::poses::CPose3D *robotPose=nullptr) override
Insert the observation information into this map. 
 
const mrpt::aligned_std_vector< float > & getPointsBufferRef_z() const
Provides a direct access to a read-only reference of the internal point buffer. 
 
int y2idx(coord_t y) const
 
bool isOutOfBounds(const int cx, const int cy, const int cz) const
 
int x2idx(coord_t x) const
Transform a coordinate values into voxel indexes. 
 
int32_t rayTracing_decimation
[rayTracing] One out of "rayTracing_decimation" rays will be simulated and compared only: set to 1 to...
 
void unprojectInto(mrpt::obs::CObservation3DRangeScan &src_obs, POINTMAP &dest_pointcloud, const mrpt::obs::T3DPointsProjectionParams &projectParams, const mrpt::obs::TRangeImageFilterParams &filterParams)
 
void insertRay(const mrpt::math::TPoint3D &sensor, const mrpt::math::TPoint3D &end, bool endIsOccupied=true)
Increases the freeness of a ray segment, and the occupancy of the voxel at its end point (unless endI...
 
void changeCoordinatesReference(const CPose3D &p)
makes: this = p (+) this 
 
string iniFile(myDataDir+string("benchmark-options.ini"))
 
void OnPostSuccesfulInsertObs(const mrpt::obs::CObservation &) override
See base class. 
 
bool m_is_empty
True upon construction; used by isEmpty() 
 
TPoint3D_< double > TPoint3D
Lightweight 3D point. 
 
float LF_zHit
[LikelihoodField] 
 
float maxFreenessUpdateCertainty
A value in the range [0.5,1] for updating a free voxel. 
 
#define MRPT_LOAD_CONFIG_VAR( variableName, variableType, configFileObject, sectionNameStr)
An useful macro for loading variables stored in a INI-like file under a key with the same name that t...
 
void internal_insertObservationScan3D(const mrpt::obs::CObservation3DRangeScan &o, const mrpt::poses::CPose3D &robotPose)
 
const_iterator end() const
 
void saveToConfigFile(mrpt::config::CConfigFileBase &c, const std::string &s) const override
This method saves the options to a ".ini"-like file or memory-stored string list. ...
 
A "CObservation"-derived class that represents a 2D range scan measurement (typically from a laser sc...
 
mrpt::poses::CPose3D sensorPose
The 6D pose of the sensor on the robot. 
 
A class used to store a 3D pose (a 3D translation + a rotation in 3D). 
 
Declares a class that represents any robot's observation. 
 
float maxOccupancyUpdateCertainty
A value in the range [0.5,1] used for updating voxel with a Bayesian approach (default 0...
 
Used in CObservation3DRangeScan::unprojectInto() 
 
static constexpr unsigned FRBITS
 
void insertPointCloud(const mrpt::math::TPoint3D &sensorCenter, const mrpt::maps::CPointsMap &pts, const float maxValidRange=std::numeric_limits< float >::max())
Calls insertRay() for each point in the point cloud, using as sensor central point (the origin of all...
 
TLikelihoodMethod likelihoodMethod
The selected method to compute an observation likelihood. 
 
float LF_maxRange
[LikelihoodField] The max. 
 
#define MRPT_SAVE_CONFIG_VAR_COMMENT(variableName, __comment)
 
A generic provider of log-odds grid-map maintainance functions. 
 
TInsertionOptions insertionOptions
The options used when inserting observations in the map. 
 
grid_t m_grid
The actual 3D voxels container. 
 
static voxelType p2l(const float p)
Scales a real valued probability in [0,1] to an integer representation of: log(p)-log(1-p) in the val...
 
int z2idx(coord_t z) const
 
static void updateCell_fast_free(cell_t *theCell, const cell_t logodd_obs, const cell_t thres)
Performs Bayesian fusion of a new observation of a cell. 
 
const mrpt::aligned_std_vector< float > & getPointsBufferRef_x() const
Provides a direct access to a read-only reference of the internal point buffer. 
 
float rayTracing_stdHit
[rayTracing] The laser range sigma. 
 
const T max3(const T &A, const T &B, const T &C)
 
OccGridCellTraits::cellType voxelType
The type of the map voxels: 
 
mrpt::poses::CPose3D sensorPose
The 6D pose of the sensor on the robot at the moment of starting the scan. 
 
bool takeIntoAccountSensorPoseOnRobot
(Default: false) If false, local (sensor-centric) coordinates of points are generated. 
 
float maxRange
The maximum range allowed by the device, in meters (e.g. 
 
int round(const T value)
Returns the closer integer (int) to x.