fast_gicp/
types.rs

1//! Type definitions for fast_gicp algorithms.
2
3/// Regularization methods for covariance matrices in GICP.
4#[derive(Debug, Clone, Copy, PartialEq, Eq)]
5#[repr(i32)]
6pub enum RegularizationMethod {
7    /// No regularization
8    None = 0,
9    /// Minimum eigenvalue regularization
10    MinEig = 1,
11    /// Normalized minimum eigenvalue regularization
12    NormalizedMinEig = 2,
13    /// Plane regularization
14    Plane = 3,
15    /// Frobenius norm regularization
16    Frobenius = 4,
17}
18
19impl Default for RegularizationMethod {
20    fn default() -> Self {
21        Self::None
22    }
23}
24
25/// Voxel accumulation modes for FastVGICP.
26#[derive(Debug, Clone, Copy, PartialEq, Eq)]
27#[repr(i32)]
28pub enum VoxelAccumulationMode {
29    /// Additive accumulation (ADD_COV in some contexts)
30    Additive = 0,
31    /// Additive weighted accumulation (ADD_POINT in some contexts)
32    AdditiveWeighted = 1,
33    /// Multiplicative accumulation
34    Multiplicative = 2,
35}
36
37impl Default for VoxelAccumulationMode {
38    fn default() -> Self {
39        Self::Additive
40    }
41}
42
43/// Neighbor search methods for voxelized GICP.
44#[derive(Debug, Clone, Copy, PartialEq, Eq)]
45#[repr(i32)]
46pub enum NeighborSearchMethod {
47    /// Direct search with 27 neighbors (3x3x3 cube)
48    Direct27 = 0,
49    /// Direct search with 7 neighbors (center + 6 faces)
50    Direct7 = 1,
51    /// Direct search with 1 neighbor (center only)
52    Direct1 = 2,
53    /// Direct search within radius
54    DirectRadius = 3,
55}
56
57impl Default for NeighborSearchMethod {
58    fn default() -> Self {
59        Self::Direct27
60    }
61}
62
63/// Nearest neighbor search methods for CUDA implementation.
64#[cfg(feature = "cuda")]
65#[derive(Debug, Clone, Copy, PartialEq, Eq)]
66#[repr(i32)]
67pub enum NearestNeighborMethod {
68    /// CPU parallel KD-tree
69    CpuParallelKdtree = 0,
70    /// GPU brute force search
71    GpuBruteforce = 1,
72    /// GPU RBF kernel search
73    GpuRbfKernel = 2,
74}
75
76#[cfg(feature = "cuda")]
77impl Default for NearestNeighborMethod {
78    fn default() -> Self {
79        Self::GpuBruteforce
80    }
81}
82
83/// NDT distance calculation mode.
84#[cfg(feature = "cuda")]
85#[derive(Debug, Clone, Copy, PartialEq, Eq)]
86#[repr(i32)]
87pub enum NdtDistanceMode {
88    /// Point-to-Distribution distance
89    P2D = 0,
90    /// Distribution-to-Distribution distance
91    D2D = 1,
92}
93
94#[cfg(feature = "cuda")]
95impl Default for NdtDistanceMode {
96    fn default() -> Self {
97        Self::P2D
98    }
99}