class mola::SparseTreesPointCloud

Overview

SparseTreesPointCloud : Point cloud stored as a 3D grid of KD-trees/pointclouds. Efficient for storing point clouds and running nearest nearest-neighbor search.

#include <SparseTreesPointCloud.h>

class SparseTreesPointCloud:
    public mrpt::maps::CMetricMap,
    public mrpt::maps::NearestNeighborsCapable
{
public:
    // typedefs

    typedef index3d_t<int32_t> outer_index3d_t;
    typedef uint32_t inner_plain_index_t;
    typedef uint64_t global_plain_index_t;
    typedef std::map<outer_index3d_t, GridData, index3d_hash<int32_t>> grids_map_t;

    // structs

    struct CachedData;
    struct GridData;
    struct TInsertionOptions;
    struct TLikelihoodOptions;
    struct TRenderOptions;

    // fields

    static constexpr static uint8_t GLOBAL_ID_SUBVOXEL_BITCOUNT = 20;
    TInsertionOptions insertionOptions;
    TLikelihoodOptions likelihoodOptions;
    TRenderOptions renderOptions;
    float grid_size = 10.0f;
    mola::SparseTreesPointCloud::TInsertionOptions insertionOpts;
    mola::SparseTreesPointCloud::TLikelihoodOptions likelihoodOpts;
    mola::SparseTreesPointCloud::TRenderOptions renderOpts;

    // construction

    SparseTreesPointCloud(float grid_size = 10.0f);

    // methods

    outer_index3d_t coordToOuterIdx(const mrpt::math::TPoint3Df& pt) const;
    mrpt::math::TPoint3Df outerIdxToCoord(const outer_index3d_t idx) const;

    static global_plain_index_t g2plain(
        const outer_index3d_t& g,
        int subVoxelIndex = 0
        );

    void setGridProperties(float grid_size);
    GridData* gridByOuterIdxs(const outer_index3d_t& oIdx, bool createIfNew);

    const GridData* gridByOuterIdxs(
        const outer_index3d_t& oIdx,
        bool createIfNew
        ) const;

    void insertPoint(const mrpt::math::TPoint3Df& pt);
    const grids_map_t& grids() const;
    mrpt::math::TBoundingBoxf boundingBox() const;
    void visitAllPoints(const std::function<void(const mrpt::math::TPoint3Df&)>& f) const;
    void visitAllGrids(const std::function<void(const outer_index3d_t&, const GridData&)>& f) const;
    bool saveToTextFile(const std::string& file) const;
    void eraseGridsFartherThan(const mrpt::math::TPoint3Df& pt, const float distanceMeters);
    void nn_prepare_for_2d_queries() const;
    void nn_prepare_for_3d_queries() const;
    bool nn_has_indices_or_ids() const;
    size_t nn_index_count() const;

    bool nn_single_search(
        const mrpt::math::TPoint3Df& query,
        mrpt::math::TPoint3Df& result,
        float& out_dist_sqr,
        uint64_t& resultIndexOrID
        ) const;

    bool nn_single_search(
        const mrpt::math::TPoint2Df& query,
        mrpt::math::TPoint2Df& result,
        float& out_dist_sqr,
        uint64_t& resultIndexOrID
        ) const;

    void nn_multiple_search(
        const mrpt::math::TPoint3Df& query,
        const size_t N,
        std::vector<mrpt::math::TPoint3Df>& results,
        std::vector<float>& out_dists_sqr,
        std::vector<uint64_t>& resultIndicesOrIDs
        ) const;

    void nn_multiple_search(
        const mrpt::math::TPoint2Df& query,
        const size_t N,
        std::vector<mrpt::math::TPoint2Df>& results,
        std::vector<float>& out_dists_sqr,
        std::vector<uint64_t>& resultIndicesOrIDs
        ) const;

    void nn_radius_search(
        const mrpt::math::TPoint3Df& query,
        const float search_radius_sqr,
        std::vector<mrpt::math::TPoint3Df>& results,
        std::vector<float>& out_dists_sqr,
        std::vector<uint64_t>& resultIndicesOrIDs,
        size_t maxPoints
        ) const;

    void nn_radius_search(
        const mrpt::math::TPoint2Df& query,
        const float search_radius_sqr,
        std::vector<mrpt::math::TPoint2Df>& results,
        std::vector<float>& out_dists_sqr,
        std::vector<uint64_t>& resultIndicesOrIDs,
        size_t maxPoints
        ) const;

    std::string asString() const;
    void getVisualizationInto(mrpt::opengl::CSetOfObjects& outObj) const;
    bool isEmpty() const;
    void saveMetricMapRepresentationToFile(const std::string& filNamePrefix) const;
};

Typedefs

typedef uint64_t global_plain_index_t

collapsed plain unique ID for global indices

Construction

SparseTreesPointCloud(float grid_size = 10.0f)

Constructor / default ctor.

Parameters:

voxel_size

Voxel size [meters] for decimation purposes.

Methods

mrpt::math::TPoint3Df outerIdxToCoord(const outer_index3d_t idx) const

returns the coordinate of the voxel center

void setGridProperties(float grid_size)

Reset the main voxel parameters, and clears all current map contents

GridData* gridByOuterIdxs(const outer_index3d_t& oIdx, bool createIfNew)

returns the voxeldata by global index coordinates, creating it or not if not found depending on createIfNew. Returns nullptr if not found and createIfNew is false

Function defined in the header file so compilers can optimize for literals “createIfNew”

void insertPoint(const mrpt::math::TPoint3Df& pt)

Insert one point into the sparse grid map

mrpt::math::TBoundingBoxf boundingBox() const

Computes the bounding box of all the points, or (0,0 ,0,0, 0,0) if there are no points. Results are cached unless the map is somehow modified to avoid repeated calculations.

bool saveToTextFile(const std::string& file) const

Save to a text file. Each line contains “X Y Z” point coordinates. Returns false if any error occured, true elsewere.

void eraseGridsFartherThan(
    const mrpt::math::TPoint3Df& pt,
    const float distanceMeters
    )

Erase submap blocks entirely farther away than the given distance threshold.

std::string asString() const

Returns a short description of the map.

bool isEmpty() const

Returns true if the map is empty

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).