10 #ifndef CRandomFieldGridMap2D_H 11 #define CRandomFieldGridMap2D_H 23 #if EIGEN_VERSION_AT_LEAST(3,1,0) // eigen 3.1+ 24 #include <Eigen/SparseCore> 25 #include <Eigen/SparseCholesky> 35 #if defined(MRPT_IS_X86_AMD64) 46 kf_mean (kfmean_dm_mean),
47 kf_std (kfstd_dmmeanw),
49 last_updated(
mrpt::system::
now()),
50 updated_std (kfstd_dmmeanw)
81 #if defined(MRPT_IS_X86_AMD64) 120 static
bool ENABLE_GMRF_PROFILER;
149 double x_min = -2,
double x_max = 2,
150 double y_min = -2,
double y_max = 2,
151 double resolution = 0.1
170 virtual
void saveAsBitmapFile(const
std::
string &filName) const;
173 virtual
void getAsBitmapFile(
mrpt::utils::CImage &out_img) const;
185 TInsertionOptionsCommon();
188 void internal_loadFromConfigFile_common(
190 const std::string §ion);
232 virtual void resize(
double new_x_min,
double new_x_max,
double new_y_min,
double new_y_max,
const TRandomFieldCell& defaultValueNewCells,
double additionalMarginMeters = 1.0f )
MRPT_OVERRIDE;
235 virtual
void setSize(const
double x_min, const
double x_max, const
double y_min, const
double y_max, const
double resolution, const
TRandomFieldCell * fill_value = NULL);
241 virtual
void saveMetricMapRepresentationToFile(const
std::
string &filNamePrefix) const MRPT_OVERRIDE;
246 virtual
void saveAsMatlab3DGraph(const
std::
string &filName) const;
250 void getAsMatlab3DGraphScript(
std::
string &out_script) const;
253 virtual
void getAs3DObject(
mrpt::opengl::CSetOfObjectsPtr &outObj ) const MRPT_OVERRIDE;
256 virtual
void getAs3DObject (
mrpt::opengl::CSetOfObjectsPtr &meanObj,
mrpt::opengl::CSetOfObjectsPtr &varObj ) const;
265 void insertIndividualReading(
266 const
double sensorReading,
267 const
mrpt::math::TPoint2D & point,
268 const
bool update_map = true,
269 const
bool time_invariant = true
278 virtual void predictMeasurement(
281 double &out_predict_response,
282 double &out_predict_response_variance,
283 bool do_sensor_normalization,
296 void updateMapEstimation();
298 void enableVerbose(
bool enable_verbose) { m_rfgm_verbose = enable_verbose; }
332 #if EIGEN_VERSION_AT_LEAST(3,1,0) 333 std::vector<Eigen::Triplet<double> > H_prior;
360 void insertObservation_KernelDM_DMV(
369 void insertObservation_KF(
377 void insertObservation_KF2(
385 void insertObservation_GMRF(
double normReading,
const mrpt::math::TPoint2D &point,
const bool update_map,
const bool time_invariant);
388 void updateMapEstimation_GMRF();
391 double computeConfidenceCellValue_DM_DMV (
const TRandomFieldCell *cell )
const;
402 void recoverMeanAndCov()
const;
408 bool exist_relation_between2cells(
414 const
size_t seed_cxo,
415 const
size_t seed_cyo,
416 const
size_t objective_cxo,
417 const
size_t objective_cyo);
std::multimap< size_t, size_t > cell_interconnections
uint64_t TTimeStamp
A system independent time type, it holds the the number of 100-nanosecond intervals since January 1...
std::string GMRF_gridmap_image_file
image name of the occupancy_gridmap
Gaussian kernel-based estimator (see discussion in mrpt::maps::CRandomFieldGridMap2D) ...
Parameters for CMetricMap::compute3DMatchingRatio()
float sigma
The sigma of the "Parzen"-kernel Gaussian.
static void fill(bimap< enum_t, std::string > &m_map)
This class is a "CSerializable" wrapper for "CMatrixTemplateNumeric<double>".
#define MRPT_OVERRIDE
C++11 "override" for virtuals:
float KF_defaultCellMeanValue
The default value for the mean of cells' concentration.
uint16_t GMRF_constraintsSize
[mrGMRF_G only] The size of the Gaussian window to impose fixed restrictions between cells...
double GMRF_constraintsSigma
[mrGMRF_G only] The sigma of the Gaussian window to impose fixed restrictions between cells...
void clear()
Erase all the contents of the map.
mrpt::math::CMatrixD m_cov
The whole covariance matrix, used for the Kalman Filter map representation.
Gaussian Markov Random Field, Gaussian prior weights between neighboring cells up to a certain distan...
Column vector, like Eigen::MatrixX*, but automatically initialized to zeros since construction...
std::vector< float > m_DM_gaussWindow
mrpt::system::TTimeStamp now()
A shortcut for system::getCurrentTime.
mrpt::system::TTimeStamp last_updated
[Dynamic maps only] The timestamp of the last time the cell was updated
Double mean + variance Gaussian kernel-based estimator (see discussion in mrpt::maps::CRandomFieldGri...
TMapRepresentation
The type of map representation to be used, see CRandomFieldGridMap2D for a discussion.
double gmrf_mean
[GMRF only] The mean value of this cell
Only specializations of this class are defined for each enum type of interest.
double GMRF_lambdaPrior
The information (Lambda) of fixed map constraints.
std::vector< float > gauss_val
float cutoffRadius
The cutoff radius for updating cells.
void enableVerbose(bool enable_verbose)
This class allows loading and storing values and vectors of different types from a configuration text...
#define DEFINE_VIRTUAL_SERIALIZABLE(class_name)
This declaration must be inserted in virtual CSerializable classes definition:
TMapRepresentation m_mapType
The map representation type of this map, as passed in the constructor.
double dm_mean_w
[Kernel-methods only] The cumulative weights (concentration = alpha * dm_mean / dm_mean_w + (1-alpha)...
Parameters common to any derived class.
float KF_observationModelNoise
The sensor model noise (in normalized concentration units).
TInsertionOptionsCommon * m_insertOptions_common
Common options to all random-field grid maps: pointer that is set to the derived-class instance of "i...
This base class is used to provide a unified interface to files,memory buffers,..Please see the deriv...
TRandomFieldCell(double kfmean_dm_mean=1e-20, double kfstd_dmmeanw=0)
Constructor.
A 2D grid of dynamic size which stores any kind of data at each cell.
#define DEFINE_SERIALIZABLE_PRE_CUSTOM_BASE_LINKAGE(class_name, base_name, _LINKAGE_)
This declaration must be inserted in all CSerializable classes definition, before the class declarati...
double kf_mean
[KF-methods only] The mean value of this cell
The contents of each cell in a CRandomFieldGridMap2D map.
CMatrixTemplateNumeric< double > CMatrixDouble
Declares a matrix of double numbers (non serializable).
size_t m_average_normreadings_count
"Brute-force" Kalman filter (see discussion in mrpt::maps::CRandomFieldGridMap2D) ...
A bidirectional version of std::map, declared as bimap<KEY,VALUE> and which actually contains two std...
EIGEN_STRONG_INLINE void setSize(size_t row, size_t col)
Changes the size of matrix, maintaining its previous content as possible and padding with zeros where...
double GMRF_lambdaObs
The initial information (Lambda) of each observation (this information will decrease with time) ...
double dm_sigma_omega
[DM/DM+V methods] The scaling parameter for the confidence "alpha" values (see the IROS 2009 paper; s...
(see discussion in mrpt::maps::CRandomFieldGridMap2D)
bool m_hasToRecoverMeanAndCov
Only for the KF2 implementation.
double updated_std
[Dynamic maps only] The std cell value that was updated (to be used in the Forgetting_curve ...
A class for storing an occupancy grid map.
This is the global namespace for all Mobile Robot Programming Toolkit (MRPT) libraries.
CRandomFieldGridMap2D represents a 2D grid map where each cell is associated one real-valued property...
bool isEnabledVerbose() const
Gaussian Markov Random Field, squared differences prior weights between 4 neighboring cells (see disc...
float KF_covSigma
The "sigma" for the initial covariance value between cells (in meters).
Declares a virtual base class for all metric maps storage classes.
bool GMRF_skip_variance
(Default:false) Skip the computation of the variance, just compute the mean
bool m_rfgm_run_update_upon_clear
double m_average_normreadings_var
double dmv_var_mean
[Kernel DM-V only] The cumulative weighted variance of this cell
bool GMRF_use_occupancy_information
whether to use information of an occupancy_gridmap map for buidling the GMRF
std::string GMRF_simplemap_file
simplemap_file name of the occupancy_gridmap
uint16_t KF_W_size
[mrKalmanApproximate] The size of the window of neighbor cells.
float cell2float(const TRandomFieldCell &c) const MRPT_OVERRIDE
mrpt::math::CMatrixD m_stackedCov
The compressed band diagonal matrix for the KF2 implementation.
void insert(const KEY &k, const VALUE &v)
Insert a new pair KEY<->VALUE in the bi-map.
double dm_mean
[Kernel-methods only] The cumulative weighted readings of this cell
size_t GMRF_gridmap_image_cx
Pixel coordinates of the origin for the occupancy_gridmap.
#define DEFINE_SERIALIZABLE_POST_CUSTOM_BASE_LINKAGE(class_name, base_name, _LINKAGE_)
double GMRF_gridmap_image_res
occupancy_gridmap resolution: size of each pixel (m)
float KF_initialCellStd
The initial standard deviation of each cell's concentration (will be stored both at each cell's struc...
size_t GMRF_gridmap_image_cy
Pixel coordinates of the origin for the occupancy_gridmap.
utils::CDynamicGrid< TRandomFieldCell > BASE
bool m_rfgm_verbose
Enable verbose debug output for Random Field grid map operations (Default: false) ...
double kf_std
[KF-methods only] The standard deviation value of this cell
double GMRF_lambdaObsLoss
The loss of information of the observations with each iteration.
std::vector< std::vector< TobservationGMRF > > activeObs
maps::CRandomFieldGridMap2D::TMapRepresentation enum_t