6#include <gtsam_points/types/point_cloud.hpp>
7#include <gtsam_points/types/gaussian_voxelmap.hpp>
8#include <gtsam_points/ann/incremental_voxelmap.hpp>
10namespace gtsam_points {
15 using Ptr = std::shared_ptr<GaussianVoxel>;
16 using ConstPtr = std::shared_ptr<const GaussianVoxel>;
24 size_t size()
const {
return 1; }
40 template <
typename Result>
41 void knn_search(
const Eigen::Vector4d& pt, Result& result)
const {
42 const double sq_dist = (pt -
mean).squaredNorm();
43 result.push(0, sq_dist);
60 static bool has_points(
const GaussianVoxel& frame) {
return true; }
61 static bool has_normals(
const GaussianVoxel& frame) {
return false; }
62 static bool has_covs(
const GaussianVoxel& frame) {
return true; }
63 static bool has_intensities(
const GaussianVoxel& frame) {
return true; }
65 static const Eigen::Vector4d& point(
const GaussianVoxel& frame,
size_t i) {
return frame.
mean; }
66 static const Eigen::Vector4d normal(
const GaussianVoxel& frame,
size_t i) {
return Eigen::Vector4d::Zero(); }
67 static const Eigen::Matrix4d& cov(
const GaussianVoxel& frame,
size_t i) {
return frame.
cov; }
75 using Ptr = std::shared_ptr<GaussianVoxelMapCPU>;
76 using ConstPtr = std::shared_ptr<const GaussianVoxelMapCPU>;
108 static GaussianVoxelMapCPU::Ptr
load(
const std::string& path);
118 static bool has_intensities(
const GaussianVoxelMapCPU& ivox) {
return ivox.has_intensities(); }
120 static decltype(
auto) point(
const GaussianVoxelMapCPU& ivox,
size_t i) {
return ivox.point(i); }
121 static decltype(
auto) normal(
const GaussianVoxelMapCPU& ivox,
size_t i) {
return ivox.normal(i); }
122 static decltype(
auto) cov(
const GaussianVoxelMapCPU& ivox,
size_t i) {
return ivox.cov(i); }
123 static decltype(
auto) intensity(
const GaussianVoxelMapCPU& ivox,
size_t i) {
return ivox.intensity(i); }
Definition gaussian_voxelmap_cpu.hpp:73
void save_compact(const std::string &path) const override
Save the voxelmap.
virtual void insert(const PointCloud &frame) override
Insert a point cloud frame into the voxelmap.
static GaussianVoxelMapCPU::Ptr load(const std::string &path)
Load a voxelmap from a file.
GaussianVoxelMapCPU(double resolution)
Constructor.
const GaussianVoxel & lookup_voxel(int voxel_id) const
Look up a voxel.
Eigen::Vector3i voxel_coord(const Eigen::Vector4d &x) const
Compute the voxel index corresponding to a point.
virtual double voxel_resolution() const override
Voxel resolution.
int lookup_voxel_index(const Eigen::Vector3i &coord) const
Look up a voxel index. If the voxel does not exist, return -1.
Gaussian distribution voxelmap.
Definition gaussian_voxelmap.hpp:16
Definition gaussian_voxelmap_cpu.hpp:18
Gaussian voxel that computes and stores voxel mean and covariance.
Definition gaussian_voxelmap_cpu.hpp:13
double intensity
Intensity.
Definition gaussian_voxelmap_cpu.hpp:51
size_t size() const
Number of points in the voxel (Always 1 for GaussianVoxel).
Definition gaussian_voxelmap_cpu.hpp:24
GaussianVoxel()
Constructor.
Definition gaussian_voxelmap_cpu.hpp:21
bool finalized
If true, mean and cov are finalized, otherwise they represent the sum of input points.
Definition gaussian_voxelmap_cpu.hpp:47
Eigen::Matrix4d cov
Covariance.
Definition gaussian_voxelmap_cpu.hpp:50
void finalize()
Finalize the voxel mean and covariance.
Eigen::Vector4d mean
Mean.
Definition gaussian_voxelmap_cpu.hpp:49
void knn_search(const Eigen::Vector4d &pt, Result &result) const
Find k nearest neighbors.
Definition gaussian_voxelmap_cpu.hpp:41
size_t num_points
Number of input points.
Definition gaussian_voxelmap_cpu.hpp:48
void add(const Setting &setting, const PointCloud &points, size_t i)
Add a point to the voxel.
Incremental voxelmap. This class supports incremental point cloud insertion and LRU-based voxel delet...
Definition incremental_voxelmap.hpp:35
size_t voxel_id(const size_t i) const
Extract the point ID from a global index.
Definition incremental_voxelmap.hpp:85
Standard point cloud class that holds only pointers to point attributes.
Definition point_cloud.hpp:19
Definition frame_traits.hpp:17