cpp-toolbox  0.0.1
A toolbox library for C++
Loading...
Searching...
No Matches
toolbox::pcl::aa_icp_t< DataType, KNNSearcher, BaseICP > Class Template Reference

AA-ICP (Anderson Acceleration ICP) 算法实现 / AA-ICP algorithm implementation. More...

#include <aa_icp.hpp>

Inheritance diagram for toolbox::pcl::aa_icp_t< DataType, KNNSearcher, BaseICP >:

Public Types

using base_type = base_fine_registration_t< aa_icp_t< DataType, KNNSearcher, BaseICP >, DataType >
 
using base_icp_type = BaseICP
 
using VectorX = Eigen::Matrix< DataType, Eigen::Dynamic, 1 >
 
using MatrixX = Eigen::Matrix< DataType, Eigen::Dynamic, Eigen::Dynamic >
 
using point_cloud = toolbox::types::point_cloud_t< DataType >
 
using point_cloud_ptr = std::shared_ptr< point_cloud >
 
using transformation_t = Eigen::Matrix< DataType, 4, 4 >
 
using result_type = fine_registration_result_t< DataType >
 
- Public Types inherited from toolbox::pcl::base_fine_registration_t< Derived, DataType >
using point_cloud = toolbox::types::point_cloud_t< DataType >
 
using point_cloud_ptr = std::shared_ptr< point_cloud >
 
using transformation_t = Eigen::Matrix< DataType, 4, 4 >
 
using result_type = fine_registration_result_t< DataType >
 
using iteration_callback_t = std::function< bool(const iteration_state_t< DataType > &)>
 

Public Member Functions

 aa_icp_t (bool enable_parallel=false)
 构造函数 / Constructor
 
void set_anderson_m (std::size_t m)
 设置Anderson加速的历史窗口大小 / Set Anderson acceleration history window size
 
std::size_t get_anderson_m () const
 获取Anderson加速的历史窗口大小 / Get Anderson acceleration history window size
 
void set_beta (DataType beta)
 设置阻尼因子 / Set damping factor
 
DataType get_beta () const
 获取阻尼因子 / Get damping factor
 
void set_regularization (DataType lambda)
 设置正则化参数 / Set regularization parameter
 
DataType get_regularization () const
 获取正则化参数 / Get regularization parameter
 
void set_enable_safeguarding (bool enable)
 设置是否启用安全保护 / Set whether to enable safeguarding
 
bool get_enable_safeguarding () const
 获取是否启用安全保护 / Get whether safeguarding is enabled
 
correspondence_type_e get_correspondence_type_impl () const
 获取对应关系类型(从基础ICP继承) / Get correspondence type (inherited from base ICP)
 
void set_enable_parallel (bool enable)
 设置是否启用并行优化 / Set whether to enable parallel optimization
 
bool get_enable_parallel () const
 获取是否启用并行优化 / Get whether parallel optimization is enabled
 
- Public Member Functions inherited from toolbox::pcl::base_fine_registration_t< Derived, DataType >
 base_fine_registration_t ()=default
 
virtual ~base_fine_registration_t ()=default
 
 base_fine_registration_t (const base_fine_registration_t &)=delete
 
base_fine_registration_toperator= (const base_fine_registration_t &)=delete
 
 base_fine_registration_t (base_fine_registration_t &&)=default
 
base_fine_registration_toperator= (base_fine_registration_t &&)=default
 
void set_source (const point_cloud_ptr &source)
 设置源点云 / Set source point cloud
 
void set_target (const point_cloud_ptr &target)
 设置目标点云 / Set target point cloud
 
void set_max_iterations (std::size_t max_iterations)
 设置最大迭代次数 / Set maximum iterations
 
std::size_t get_max_iterations () const
 获取最大迭代次数 / Get maximum iterations
 
void set_transformation_epsilon (DataType epsilon)
 设置变换epsilon(收敛阈值) / Set transformation epsilon (convergence threshold)
 
DataType get_transformation_epsilon () const
 获取变换epsilon / Get transformation epsilon
 
void set_euclidean_fitness_epsilon (DataType epsilon)
 设置欧氏距离epsilon / Set Euclidean fitness epsilon
 
DataType get_euclidean_fitness_epsilon () const
 获取欧氏距离epsilon / Get Euclidean fitness epsilon
 
void set_max_correspondence_distance (DataType distance)
 设置最大对应距离 / Set maximum correspondence distance
 
DataType get_max_correspondence_distance () const
 获取最大对应距离 / Get maximum correspondence distance
 
void set_record_history (bool record)
 设置是否记录迭代历史 / Set whether to record iteration history
 
bool get_record_history () const
 获取是否记录迭代历史 / Get whether to record iteration history
 
void set_iteration_callback (iteration_callback_t callback)
 设置迭代回调函数 / Set iteration callback function
 
correspondence_type_e get_correspondence_type () const
 获取对应关系类型 / Get correspondence type
 
bool has_source_normals () const
 检查源点云是否有法线 / Check if source cloud has normals
 
bool has_target_normals () const
 检查目标点云是否有法线 / Check if target cloud has normals
 
bool align (const transformation_t &initial_guess, result_type &result)
 执行配准 / Perform registration
 
bool align (result_type &result)
 执行配准(使用单位矩阵作为初始猜测) / Perform registration (using identity as initial guess)
 

Protected Member Functions

bool validate_input_impl () const
 额外的输入验证 / Additional input validation
 
void preprocess_impl ()
 预处理 / Preprocessing
 
bool align_impl (const transformation_t &initial_guess, result_type &result)
 执行配准 / Perform registration
 
VectorX transformation_to_vector (const transformation_t &transform) const
 将变换矩阵转换为向量表示 / Convert transformation matrix to vector representation
 
transformation_t vector_to_transformation (const VectorX &vec) const
 将向量表示转换为变换矩阵 / Convert vector representation to transformation matrix
 
transformation_t perform_base_icp_step (const transformation_t &current_transform, DataType &error, std::size_t &num_correspondences)
 执行一步基础ICP迭代 / Perform one step of base ICP iteration
 
VectorX anderson_acceleration_update (const std::deque< VectorX > &g_history, const std::deque< VectorX > &x_history)
 Anderson加速更新 / Anderson acceleration update.
 
bool is_numerically_stable (const VectorX &vec) const
 检查数值稳定性 / Check numerical stability
 
- Protected Member Functions inherited from toolbox::pcl::base_fine_registration_t< Derived, DataType >
bool validate_input () const
 验证输入 / Validate input
 
bool validate_input_impl () const
 派生类的额外输入验证 / Additional input validation for derived class
 
bool has_converged (std::size_t iteration, const transformation_t &current_transform, const transformation_t &previous_transform, DataType current_error, DataType previous_error, std::string &termination_reason) const
 检查收敛条件 / Check convergence criteria
 
bool has_converged_impl (std::size_t, const transformation_t &, const transformation_t &, DataType, DataType, std::string &) const
 派生类的额外收敛检查 / Additional convergence check for derived class
 
void preprocess_impl ()
 预处理钩子(派生类实现) / Preprocessing hook (derived class implementation)
 
void record_iteration (result_type &result, std::size_t iteration, const transformation_t &transform, DataType error, DataType error_change, std::size_t num_correspondences)
 记录迭代状态 / Record iteration state
 

Friends

class base_fine_registration_t< aa_icp_t< DataType, KNNSearcher, BaseICP >, DataType >
 

Additional Inherited Members

- Protected Attributes inherited from toolbox::pcl::base_fine_registration_t< Derived, DataType >
point_cloud_ptr m_source_cloud
 
point_cloud_ptr m_target_cloud
 
std::size_t m_max_iterations = 50
 
DataType m_transformation_epsilon = static_cast<DataType>(1e-8)
 
DataType m_euclidean_fitness_epsilon = static_cast<DataType>(1e-6)
 
DataType m_max_correspondence_distance = static_cast<DataType>(0.05)
 
bool m_source_updated = false
 
bool m_target_updated = false
 
bool m_record_history = false
 
iteration_callback_t m_iteration_callback
 

Detailed Description

template<typename DataType, typename KNNSearcher = kdtree_t<DataType>, typename BaseICP = point_to_point_icp_t<DataType, KNNSearcher>>
class toolbox::pcl::aa_icp_t< DataType, KNNSearcher, BaseICP >

AA-ICP (Anderson Acceleration ICP) 算法实现 / AA-ICP algorithm implementation.

该算法使用Anderson加速技术加速ICP的定点迭代收敛。 This algorithm uses Anderson acceleration to speed up the fixed-point iteration convergence of ICP.

Template Parameters
DataType数据类型 / Data type
KNNSearcherKNN搜索器类型 / KNN searcher type
BaseICP基础ICP算法类型(默认为Point-to-Point) / Base ICP algorithm type
// 使用示例 / Usage example
// 设置Anderson加速参数 / Set Anderson acceleration parameters
aa_icp.set_anderson_m(5); // 历史窗口大小
aa_icp.set_beta(0.5); // 阻尼因子
// 设置点云 / Set point clouds
aa_icp.set_source(source_cloud);
aa_icp.set_target(target_cloud);
// 执行配准 / Perform registration
aa_icp.align(initial_guess, result);
AA-ICP (Anderson Acceleration ICP) 算法实现 / AA-ICP algorithm implementation.
Definition aa_icp.hpp:43
void set_beta(DataType beta)
设置阻尼因子 / Set damping factor
Definition aa_icp.hpp:81
void set_anderson_m(std::size_t m)
设置Anderson加速的历史窗口大小 / Set Anderson acceleration history window size
Definition aa_icp.hpp:70
void set_target(const point_cloud_ptr &target)
设置目标点云 / Set target point cloud
Definition base_fine_registration.hpp:69
void set_source(const point_cloud_ptr &source)
设置源点云 / Set source point cloud
Definition base_fine_registration.hpp:60
bool align(const transformation_t &initial_guess, result_type &result)
执行配准 / Perform registration
Definition base_fine_registration.hpp:189
aa_icp_t< float > aa_icp
Definition registration.hpp:107
细配准结果 / Fine registration result
Definition registration_result.hpp:46

Member Typedef Documentation

◆ base_icp_type

template<typename DataType , typename KNNSearcher = kdtree_t<DataType>, typename BaseICP = point_to_point_icp_t<DataType, KNNSearcher>>
using toolbox::pcl::aa_icp_t< DataType, KNNSearcher, BaseICP >::base_icp_type = BaseICP

◆ base_type

template<typename DataType , typename KNNSearcher = kdtree_t<DataType>, typename BaseICP = point_to_point_icp_t<DataType, KNNSearcher>>
using toolbox::pcl::aa_icp_t< DataType, KNNSearcher, BaseICP >::base_type = base_fine_registration_t<aa_icp_t<DataType, KNNSearcher, BaseICP>, DataType>

◆ MatrixX

template<typename DataType , typename KNNSearcher = kdtree_t<DataType>, typename BaseICP = point_to_point_icp_t<DataType, KNNSearcher>>
using toolbox::pcl::aa_icp_t< DataType, KNNSearcher, BaseICP >::MatrixX = Eigen::Matrix<DataType, Eigen::Dynamic, Eigen::Dynamic>

◆ point_cloud

template<typename DataType , typename KNNSearcher = kdtree_t<DataType>, typename BaseICP = point_to_point_icp_t<DataType, KNNSearcher>>
using toolbox::pcl::base_fine_registration_t< Derived, DataType >::point_cloud = toolbox::types::point_cloud_t<DataType>

◆ point_cloud_ptr

template<typename DataType , typename KNNSearcher = kdtree_t<DataType>, typename BaseICP = point_to_point_icp_t<DataType, KNNSearcher>>
using toolbox::pcl::base_fine_registration_t< Derived, DataType >::point_cloud_ptr = std::shared_ptr<point_cloud>

◆ result_type

template<typename DataType , typename KNNSearcher = kdtree_t<DataType>, typename BaseICP = point_to_point_icp_t<DataType, KNNSearcher>>
using toolbox::pcl::base_fine_registration_t< Derived, DataType >::result_type = fine_registration_result_t<DataType>

◆ transformation_t

template<typename DataType , typename KNNSearcher = kdtree_t<DataType>, typename BaseICP = point_to_point_icp_t<DataType, KNNSearcher>>
using toolbox::pcl::base_fine_registration_t< Derived, DataType >::transformation_t = Eigen::Matrix<DataType, 4, 4>

◆ VectorX

template<typename DataType , typename KNNSearcher = kdtree_t<DataType>, typename BaseICP = point_to_point_icp_t<DataType, KNNSearcher>>
using toolbox::pcl::aa_icp_t< DataType, KNNSearcher, BaseICP >::VectorX = Eigen::Matrix<DataType, Eigen::Dynamic, 1>

Constructor & Destructor Documentation

◆ aa_icp_t()

template<typename DataType , typename KNNSearcher = kdtree_t<DataType>, typename BaseICP = point_to_point_icp_t<DataType, KNNSearcher>>
toolbox::pcl::aa_icp_t< DataType, KNNSearcher, BaseICP >::aa_icp_t ( bool  enable_parallel = false)
inlineexplicit

构造函数 / Constructor

Parameters
enable_parallel是否启用并行优化(默认开启) / Enable parallel optimization (default enabled)

Member Function Documentation

◆ align_impl()

template<typename DataType , typename KNNSearcher , typename BaseICP >
bool toolbox::pcl::aa_icp_t< DataType, KNNSearcher, BaseICP >::align_impl ( const transformation_t initial_guess,
result_type result 
)
protected

执行配准 / Perform registration

◆ anderson_acceleration_update()

template<typename DataType , typename KNNSearcher , typename BaseICP >
aa_icp_t< DataType, KNNSearcher, BaseICP >::VectorX toolbox::pcl::aa_icp_t< DataType, KNNSearcher, BaseICP >::anderson_acceleration_update ( const std::deque< VectorX > &  g_history,
const std::deque< VectorX > &  x_history 
)
protected

Anderson加速更新 / Anderson acceleration update.

◆ get_anderson_m()

template<typename DataType , typename KNNSearcher = kdtree_t<DataType>, typename BaseICP = point_to_point_icp_t<DataType, KNNSearcher>>
std::size_t toolbox::pcl::aa_icp_t< DataType, KNNSearcher, BaseICP >::get_anderson_m ( ) const
inline

获取Anderson加速的历史窗口大小 / Get Anderson acceleration history window size

◆ get_beta()

template<typename DataType , typename KNNSearcher = kdtree_t<DataType>, typename BaseICP = point_to_point_icp_t<DataType, KNNSearcher>>
DataType toolbox::pcl::aa_icp_t< DataType, KNNSearcher, BaseICP >::get_beta ( ) const
inline

获取阻尼因子 / Get damping factor

◆ get_correspondence_type_impl()

template<typename DataType , typename KNNSearcher = kdtree_t<DataType>, typename BaseICP = point_to_point_icp_t<DataType, KNNSearcher>>
correspondence_type_e toolbox::pcl::aa_icp_t< DataType, KNNSearcher, BaseICP >::get_correspondence_type_impl ( ) const
inline

获取对应关系类型(从基础ICP继承) / Get correspondence type (inherited from base ICP)

◆ get_enable_parallel()

template<typename DataType , typename KNNSearcher = kdtree_t<DataType>, typename BaseICP = point_to_point_icp_t<DataType, KNNSearcher>>
bool toolbox::pcl::aa_icp_t< DataType, KNNSearcher, BaseICP >::get_enable_parallel ( ) const
inline

获取是否启用并行优化 / Get whether parallel optimization is enabled

◆ get_enable_safeguarding()

template<typename DataType , typename KNNSearcher = kdtree_t<DataType>, typename BaseICP = point_to_point_icp_t<DataType, KNNSearcher>>
bool toolbox::pcl::aa_icp_t< DataType, KNNSearcher, BaseICP >::get_enable_safeguarding ( ) const
inline

获取是否启用安全保护 / Get whether safeguarding is enabled

◆ get_regularization()

template<typename DataType , typename KNNSearcher = kdtree_t<DataType>, typename BaseICP = point_to_point_icp_t<DataType, KNNSearcher>>
DataType toolbox::pcl::aa_icp_t< DataType, KNNSearcher, BaseICP >::get_regularization ( ) const
inline

获取正则化参数 / Get regularization parameter

◆ is_numerically_stable()

template<typename DataType , typename KNNSearcher , typename BaseICP >
bool toolbox::pcl::aa_icp_t< DataType, KNNSearcher, BaseICP >::is_numerically_stable ( const VectorX vec) const
protected

检查数值稳定性 / Check numerical stability

◆ perform_base_icp_step()

template<typename DataType , typename KNNSearcher , typename BaseICP >
aa_icp_t< DataType, KNNSearcher, BaseICP >::transformation_t toolbox::pcl::aa_icp_t< DataType, KNNSearcher, BaseICP >::perform_base_icp_step ( const transformation_t current_transform,
DataType &  error,
std::size_t &  num_correspondences 
)
protected

执行一步基础ICP迭代 / Perform one step of base ICP iteration

◆ preprocess_impl()

template<typename DataType , typename KNNSearcher = kdtree_t<DataType>, typename BaseICP = point_to_point_icp_t<DataType, KNNSearcher>>
void toolbox::pcl::aa_icp_t< DataType, KNNSearcher, BaseICP >::preprocess_impl ( )
inlineprotected

预处理 / Preprocessing

◆ set_anderson_m()

template<typename DataType , typename KNNSearcher = kdtree_t<DataType>, typename BaseICP = point_to_point_icp_t<DataType, KNNSearcher>>
void toolbox::pcl::aa_icp_t< DataType, KNNSearcher, BaseICP >::set_anderson_m ( std::size_t  m)
inline

设置Anderson加速的历史窗口大小 / Set Anderson acceleration history window size

Parameters
m历史窗口大小(默认5) / History window size (default 5)

◆ set_beta()

template<typename DataType , typename KNNSearcher = kdtree_t<DataType>, typename BaseICP = point_to_point_icp_t<DataType, KNNSearcher>>
void toolbox::pcl::aa_icp_t< DataType, KNNSearcher, BaseICP >::set_beta ( DataType  beta)
inline

设置阻尼因子 / Set damping factor

Parameters
beta阻尼因子(0-1),用于稳定性 / Damping factor (0-1) for stability

◆ set_enable_parallel()

template<typename DataType , typename KNNSearcher = kdtree_t<DataType>, typename BaseICP = point_to_point_icp_t<DataType, KNNSearcher>>
void toolbox::pcl::aa_icp_t< DataType, KNNSearcher, BaseICP >::set_enable_parallel ( bool  enable)
inline

设置是否启用并行优化 / Set whether to enable parallel optimization

◆ set_enable_safeguarding()

template<typename DataType , typename KNNSearcher = kdtree_t<DataType>, typename BaseICP = point_to_point_icp_t<DataType, KNNSearcher>>
void toolbox::pcl::aa_icp_t< DataType, KNNSearcher, BaseICP >::set_enable_safeguarding ( bool  enable)
inline

设置是否启用安全保护 / Set whether to enable safeguarding

Parameters
enable是否启用 / Whether to enable

◆ set_regularization()

template<typename DataType , typename KNNSearcher = kdtree_t<DataType>, typename BaseICP = point_to_point_icp_t<DataType, KNNSearcher>>
void toolbox::pcl::aa_icp_t< DataType, KNNSearcher, BaseICP >::set_regularization ( DataType  lambda)
inline

设置正则化参数 / Set regularization parameter

Parameters
lambda正则化系数 / Regularization coefficient

◆ transformation_to_vector()

template<typename DataType , typename KNNSearcher , typename BaseICP >
aa_icp_t< DataType, KNNSearcher, BaseICP >::VectorX toolbox::pcl::aa_icp_t< DataType, KNNSearcher, BaseICP >::transformation_to_vector ( const transformation_t transform) const
protected

将变换矩阵转换为向量表示 / Convert transformation matrix to vector representation

◆ validate_input_impl()

template<typename DataType , typename KNNSearcher = kdtree_t<DataType>, typename BaseICP = point_to_point_icp_t<DataType, KNNSearcher>>
bool toolbox::pcl::aa_icp_t< DataType, KNNSearcher, BaseICP >::validate_input_impl ( ) const
inlineprotected

额外的输入验证 / Additional input validation

◆ vector_to_transformation()

template<typename DataType , typename KNNSearcher , typename BaseICP >
aa_icp_t< DataType, KNNSearcher, BaseICP >::transformation_t toolbox::pcl::aa_icp_t< DataType, KNNSearcher, BaseICP >::vector_to_transformation ( const VectorX vec) const
protected

将向量表示转换为变换矩阵 / Convert vector representation to transformation matrix

Friends And Related Symbol Documentation

◆ base_fine_registration_t< aa_icp_t< DataType, KNNSearcher, BaseICP >, DataType >

template<typename DataType , typename KNNSearcher = kdtree_t<DataType>, typename BaseICP = point_to_point_icp_t<DataType, KNNSearcher>>
friend class base_fine_registration_t< aa_icp_t< DataType, KNNSearcher, BaseICP >, DataType >
friend

The documentation for this class was generated from the following files: