- 博客(7)
- 收藏
- 关注
原创 李群数学推导及Opencv代码实现
本文主要是一些李群基本原理的整理和基于Opencv实现了一个李代数的接口,主要用于学习和不想配置Eigen的CVer。
2024-08-12 15:59:35
1125
原创 只使用Eigen实现的并行ICP配准算法(SVD解法)
提示:本文仅仅采用Eigen实现了并行的ICP算法(包括自己实现的一个KD树),其速度是PCL自带ICP算法的接近一倍,且精度更高。
2024-07-25 15:28:53
1009
原创 手写Kd树(C++模板非递归实现)
本文实现的Kd树实现参考了高翔博士的书《自动驾驶与机器人中的slam技术从理论到实践》;高博士原书中是递归形式实现的,本文改写成了while循环的形式,避免了特大规模点云时的栈溢出问题,并且通过C++无类型模板参数,理论上可以实现广义上的无穷维点云的最近邻匹配。
2024-07-22 14:37:31
962
原创 SVD求解两组点云(2D/3D)刚体变换-数学推导/C++ Eigen实现
通过C++的无类型模板形参,同时实现了基于SVD的2D/3D空间的刚体变换的求解。并且其实是点到点ICP配准算法中的核心部分,能够被很好的移植到2D/3D的ICP算法当中
2024-07-10 14:48:01
1139
原创 LM算法原理推导 + C++实现(2D ICP配准算法)
占据主导,此时更接近最速下降法(一阶梯度下降法)。因此LM算法能够在一定程度上解决H奇异和病态的问题。但由于阻尼的存在,其收敛速度可能会比高斯牛顿更慢。LM算法与高斯牛顿法的主要区别,是其在泰勒展开的近似目标函数上增加了一个惩罚项。LM算法又称阻尼牛顿法,因此其所用的目标函数和雅可比矩阵与前文一致。比较小的时候H占据主导地位,此时LM算法接近高斯牛顿算法;可以通过如下规则调节,首先定义增益率。算法的基本原理介绍见前文。表达了一阶泰勒展开近似M(从如上公式可以看出当。,这里不再过多介绍。
2024-07-05 17:28:59
715
原创 二维ICP配准算法-C++ 高斯牛顿实现
高斯牛顿法采用f(R,T)的一阶泰勒展开式代替f(R,T)。因此注意此处的雅可比矩阵应该为f(R, T)的,而非F(R, T)的,如果为F(R, T)的话就变成牛顿法了。f(R,T)可以表达成如下形式。对上述公式求导可得雅可比矩阵。算法的基本原理介绍见前文。根据如下SE(2)的定义。
2024-07-04 14:10:34
1011
原创 二维ICP配准算法-C++ 直接法实现
2D的ICP算法的原理与3D的一致,区别在于其SO(2)的自由度只有1。因此并不需要借用SVD来进行求解,只需要直接求导即可。由于第一项和第三项为常量,则目标函数可以转化为。上述目标函数包含两个变量比较难以求解。可以通过对点集进行归一化,不考虑T。,根据SO(2)的形式就可求出R。则目标函数G可以表达为如下形式。这时目标函数可以简化为。对目标函数进行展开可得。因SO(2)有如下定义。
2024-06-27 20:39:16
1072
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人