template class mrpt::maps::CVoxelMapBase

Overview

An mrpt CMetricMap wrapper for Bonxai ‘s VoxelMap container.

Refer to Davide Faconti’s Bonxai repository for publication and algorithm details, but in short, this is a sparse generic container for voxels, not needing redimensioning when the map grows, and with efficient insertion and update operations.

Users normally use the derived classes, not this generic base template. This base class implements all common aspects to CMetricMap that do not depend on the specific contents to be stored at each voxel.

No multi-threading protection is applied at all in the API.

See also:

CMetricMap, the example in “MRPT/mrpt_examples_cpp/maps_voxelmap_simple”,

#include <mrpt/maps/CVoxelMapBase.h>

template <typename node_t>
class CVoxelMapBase: public mrpt::maps::CMetricMap
{
public:
    // typedefs

    typedef CVoxelMapBase<node_t> myself_t;
    typedef node_t voxel_node_t;

    // structs

    struct Impl;

    // construction

    CVoxelMapBase(double resolution, uint8_t inner_bits = 2, uint8_t leaf_bits = 3);
    CVoxelMapBase(const CVoxelMapBase& o);
    CVoxelMapBase(CVoxelMapBase&& o);

    // methods

    CVoxelMapBase& operator = (const CVoxelMapBase&);
    CVoxelMapBase& operator = (CVoxelMapBase&& o);
    const Bonxai::VoxelGrid<node_t>& grid() const;
    virtual std::string asString() const;
    virtual void getVisualizationInto(mrpt::viz::CSetOfObjects& o) const;
    virtual void getAsOctoMapVoxels(mrpt::viz::COctoMapVoxels& gl_obj) const = 0;
    virtual void saveMetricMapRepresentationToFile(const std::string& filNamePrefix) const;
};

// direct descendants

template <typename voxel_node_t, typename occupancy_t = int8_t>
class CVoxelMapOccupancyBase;

Inherited Members

public:
    // typedefs

    typedef std::shared_ptr<CObject> Ptr;
    typedef std::shared_ptr<const CObject> ConstPtr;
    typedef std::unique_ptr<CObject> UniquePtr;
    typedef std::unique_ptr<const CObject> ConstUniquePtr;
    typedef std::shared_ptr<CSerializable> Ptr;
    typedef std::shared_ptr<const CSerializable> ConstPtr;
    typedef std::shared_ptr<CMetricMap> Ptr;
    typedef std::shared_ptr<const CMetricMap> ConstPtr;

    // fields

    TMapGenericParams genericMapParams;

    // methods

    mrpt::rtti::CObject::Ptr duplicateGetSmartPtr() const;
    static const mrpt::rtti::TRuntimeClassId& GetRuntimeClassIdStatic();
    virtual const mrpt::rtti::TRuntimeClassId* GetRuntimeClass() const;
    virtual CObject* clone() const = 0;
    virtual const mrpt::rtti::TRuntimeClassId* GetRuntimeClass() const;
    static const mrpt::rtti::TRuntimeClassId& GetRuntimeClassIdStatic();
    virtual std::string asString() const = 0;
    Visualizable& operator = (const Visualizable&);
    Visualizable& operator = (Visualizable&&);
    virtual void getVisualizationInto(mrpt::viz::CSetOfObjects& o) const = 0;
    std::shared_ptr<mrpt::viz::CSetOfObjects> getVisualization() const;
    virtual const mrpt::rtti::TRuntimeClassId* GetRuntimeClass() const;
    static const mrpt::rtti::TRuntimeClassId& GetRuntimeClassIdStatic();
    void clear();
    virtual bool isEmpty() const = 0;
    virtual auto boundingBox() const;
    void loadFromSimpleMap(const mrpt::maps::CSimpleMap& Map);
    bool insertObservation(const mrpt::obs::CObservation& obs, const std::optional<const mrpt::poses::CPose3D>& robotPose = std::nullopt);
    bool insertObservationPtr(const mrpt::obs::CObservation::Ptr& obs, const std::optional<const mrpt::poses::CPose3D>& robotPose = std::nullopt);
    double computeObservationLikelihood(const mrpt::obs::CObservation& obs, const mrpt::poses::CPose3D& takenFrom) const;
    virtual bool canComputeObservationLikelihood(const mrpt::obs::CObservation& obs) const;
    double computeObservationsLikelihood(const mrpt::obs::CSensoryFrame& sf, const mrpt::poses::CPose3D& takenFrom);
    bool canComputeObservationsLikelihood(const mrpt::obs::CSensoryFrame& sf) const;

    virtual void determineMatching2D(
        const mrpt::maps::CMetricMap* otherMap,
        const mrpt::poses::CPose2D& otherMapPose,
        mrpt::tfest::TMatchingPairList& correspondences,
        const TMatchingParams& params,
        TMatchingExtraResults& extraResults
        ) const;

    virtual void determineMatching3D(
        const mrpt::maps::CMetricMap* otherMap,
        const mrpt::poses::CPose3D& otherMapPose,
        mrpt::tfest::TMatchingPairList& correspondences,
        const TMatchingParams& params,
        TMatchingExtraResults& extraResults
        ) const;

    virtual float compute3DMatchingRatio(const mrpt::maps::CMetricMap* otherMap, const mrpt::poses::CPose3D& otherMapPose, const TMatchingRatioParams& params) const;
    virtual void saveMetricMapRepresentationToFile(const std::string& filNamePrefix) const = 0;
    virtual void auxParticleFilterCleanUp();
    virtual float squareDistanceToClosestCorrespondence(float x0, float y0) const;

Construction

CVoxelMapBase(double resolution, uint8_t inner_bits = 2, uint8_t leaf_bits = 3)

Constructor, defines the resolution of the voxelmap (length of each voxel side, in meters).

Methods

virtual std::string asString() const

Returns a short description of the map.

virtual void getVisualizationInto(mrpt::viz::CSetOfObjects& o) const

Returns a 3D object representing the map.

See also:

renderingOptions

virtual void getAsOctoMapVoxels(mrpt::viz::COctoMapVoxels& gl_obj) const = 0

Builds a renderizable representation of the octomap as a mrpt::viz::COctoMapVoxels object.

Implementation defined for each children class.

See also:

renderingOptions

virtual void saveMetricMapRepresentationToFile(const std::string& filNamePrefix) const

This virtual method saves the map to a file “filNamePrefix”+< some_file_extension >, as an image or in any other applicable way (Notice that other methods to save the map may be implemented in classes implementing this virtual interface).