ICP定位算法学习笔记(一)

1 经典ICP

  ICP的目的很简单,就是求解两堆点云之间的变换关系。怎么做呢?思路很自然,既然不知道R和t(针对刚体运动),那我们就假设为未知量呗,然后通过某些方法求解。下面我们来看看具体怎么求的~没办法,要把问题描述清楚,数学是少不了的了。假设有两堆点云,分别记为两个集合X=x1,x2,…,xm和Y=y1,y2,…,ym(m并不总是等于n)。然后呢,我们不失一般性的,假设两个点云之间的变换为R(旋转变换)和t(平移变换),这两个就是我们要求的东西啦~那我们将求解这个问题描述成最小化均方误差:
  
这里写图片描述

  经典的ICP方法对上面的优化问题的处理思路如下:
  (1)初始化R 和 t
  确定初始的R 和 t 的方法很多,如果什么方法都不知道,那随便赋一个R 和 t ,然后就迭代的算呀。随便给一个值从原理上来说也可以得到最终的一个结果呀,但是准不准就不知道了。相信有基本的优化概念的人都知道,初始值的选取很重要,如果初始值选的不好很容易收敛到一个局部最优解,然后局部最优解好不好那就另说了。ICP发展了这么多年了,当然有很多的方法来估计初始的R和t了,像PCL给的SampleConsensusInitalAlignment函数以及TransformationEstimationSVD函数都可以得到较好的初始估计。
  (2)迭代
  得到初始的估计后,接下来的步骤就顺理成章了:对于X中的每一个点用当前的R 和 t在Y中找最近的点(比如用欧式距离),然后这两个点就成了一对了~就这样,对所有的点都这么做一次,然后我们就得到了所有的匹配对了~然后呢,用每一对的坐标列一个方程,就得到一系列的方程。然后就求解最优的R和t最小化上面的误差。如此循环往复。
2 ICP变种

  除了经典的ICP方法外,还有一些变种,如point-to-point的,point-to-plane的以及plane-to-plane的,那么这三种方法到底是啥呢?
  其实很简单,就是上面的误差函数的定义不一样而已。在上面讲经典ICP的时候,求和的每一项不就是X中的每一个点到Y中的每一个点的距离吗?那就是point-to-point了,那么将求和的每一项变成X中的每一个点到Y中的平面的距离,那就是point-to-plane了呀~类似的,如果把求和的每一项变成X中的平面到Y中的平面的距离,那就是plane-to-plane了。我们说了这么久的平面,那么平面到时是怎么定义的呢?
  point-to-plane的误差函数定义为:
  这里写图片描述
  
迭代最近点(Iterative Closest Points, ICP)算法包括两部分:对应点搜索和位姿求解。它的目的是寻求点集之间的匹配关系,求解的结果是两点集之间的平移及旋转量。假设M、P是两个点集,P为待配准点集,M为基准数据点集(可以理解为两个不同坐标系中的点集),其基本原理如下:
1、搜索最近点:取P中一点p(i),在M中找出距离p(i)最近的m(i),则(pi,mi)就构成了一组对应点对集,但是p(i)与m(i)之间存在着某种旋转和平移关系(R,T),这也就是我们要求的。
2、求解变换关系(R,T):n对点(pi,mi)对于n个方程组,那么就一定能运用数学方法求解得出(R,T),但是为了求解更加精确的变换关系,采用了迭代算法。
3、应用变换:对点集P中的每一个点pi运用变换关系得到点集P2,定义函数E,
这里写图片描述
根据精度要求,定义终止迭代的条件,即E小于一个具体值时终止迭代。(可以把E理解为经过变换后的P2中每个点与M点集中对应点的距离和)。
4、重复迭代:如果某次迭代满足要求,则终止迭代,输出最优(R,T),否则继续迭代,但是要注意一点:在每一次迭代开始时都要重新寻找对应点集。也就是说要把结果变换的Pn带入函数E中继续迭代。
参考:
http://www.cnblogs.com/jian-li/articles/4945676.html
http://blog.csdn.net/qq_26849233/article/details/49050575

  • 2
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
普通ICP和SVD-ICP是两种常用的点云配准算法,它们之间的区别主要在于优化刚体变换矩阵的方式和计算效率。 普通ICP算法是一种迭代算法,通过最小化两个点云之间的误差来优化刚体变换矩阵。它的基本思想是通过寻找最小二乘拟合得到的刚体变换矩阵,将一个点云变换到另一个点云的坐标系下,然后计算两个点云之间的误差,并不断迭代优化刚体变换矩阵,直到达到收敛条件。普通ICP算法简单直观,易于实现,但对于噪声和部分遮挡情况下的点云配准效果可能较差。 SVD-ICP算法在普通ICP算法的基础上引入了奇异值分解(Singular Value Decomposition)的步骤。它通过对点云之间的误差进行奇异值分解,得到旋转矩阵和平移向量的最优解。相比于普通ICP算法,SVD-ICP算法在计算刚体变换矩阵时更稳定,能够更好地处理噪声和部分遮挡的情况。SVD-ICP算法的优势在于它对数据的拟合能力更强,更适用于复杂点云数据的配准。然而,由于引入了奇异值分解的计算步骤,SVD-ICP算法相对于普通ICP算法来说计算量较大,速度较慢。 综上所述,普通ICP算法简单直观,计算速度快,但对噪声和遮挡敏感;而SVD-ICP算法通过引入奇异值分解提高了稳定性和配准效果,但计算速度较慢。具体选择哪种算法取决于应用场景和对配准效果和计算效率的要求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值