1.ICP(Iterative Closest Point)

通过迭代最近点来实现数据的匹配,ICP方法是用来求解两个点云集合转换关系的最通用的方法

数学描述:

如下图所示,我们需要求解出R,t,使得两个点云集合匹配度达到大(理想效果是两个点云完全重合),即E(R,t)最小。

对于已知两个点云的对应点,一次迭代即可求出R,t。

但在实际中,对于两个点云,我们并不能确定它们的对应点。所以不能一步到位计算出R和t,需要进行多次迭代的方法一步步缩小误差,最终得到使误差方程最小的旋转矩阵R和平移矩阵t。算法流程如下:

1)寻找对应点

通常使用编码盘的里程计数据得到位姿差,即当前机器人在上次机器人坐标系中的位姿。将此R和t作为ICP算法的first guess,帮助算法寻找点云对应点。

2)根据对应点,计算R和t。

3)对点云进行位姿变换,计算误差。

4)不断迭代,直至误差小于某一值。

迭代流程示意图如下:

这里指出ICP的一个明显缺陷:
由于激光点是对实际环境中曲面的离散采样,所以相邻两帧激光点云数据中的点不可能表示的是空间中相同的位置。所以用点到点的距离作为误差方程势必会引入随机误差。

2.PL-ICP(Point to Line-Iterative Closest Point)

PL-ICP相对于PP-ICP最大的区别是其改进了误差方程。PP-ICP是点对点的距离作为误差而PL-ICP是采用点到其最近两个点连线的距离。下图展示了误差方程的差异。

PL-ICP方法示意图:图(a)中棕色的曲线表示实际场景的墙,蓝色是某时刻的激光扫描点,可以看出,激光点是对实际环境的离散采样。对于匹配来说,重要的不是激光点,而是隐藏在激光点中的曲面。最好的误差尺度为当前激光点到实际曲面的距离,关键的问题在于如何恢复曲面。PL-ICP的思想:用分段线性的方法来对实际曲面 进行近似,用激光点到最近两点连线的距离来模 拟实际激光点到曲面的距离。

数学描述如下

算法流程如下

总结PL-ICP与ICP的主要区别:
1)误差函数的形式不同,ICP对点对点的距离作为误差,PL-ICP为点到线的距离作为误差;
PL-ICP的误差形式更符合实际情况。
2)收敛速度不同,ICP为一阶收敛,PL-ICP为二阶收敛。

3)PL-ICP的求解精度高于ICP,特别是在结构化环境中。
4)PL-ICP对初始值更敏感。不单独使用,通常于里程计、CSM等一起使用。

3.NICP((Normal Closest Point)

NICP方法与ICP方法的主要流程和思想是一致的。但是它在误差项里考虑了更多的因素。它充分利用实际曲面的特征来对错误的点匹配进行滤除,主要的特征为法向量和曲率。在误差项里除了考虑对应点的欧氏距离之外, 同时还考虑对应点法向量的角度差。这也导致NICP方法在开源领域,目前是效果最好的ICP匹配方法。NICP特征示意图如下:

 

算法流程总结:

  • 计算参考激光帧和当前激光帧中每一个点的法向量和曲率。
  • 根据当前解,把当前激光帧的点转换到参考坐标系中,并且根据欧氏距离、法向量、曲率等信息来选择匹配点(也有可能没有匹配点)。
  • 根据上面介绍的方法,用LM方法进行迭代求解,迭代收敛即可得到两帧激光数据之间的相对位姿。

对NICP的总结:

  • 当迭代过程收敛即得到需要的解。
  • 由于在寻找点匹配的过程中,考虑了环境 曲面的法向量和曲率,因此可以提前排除 一些明显是错误的匹配。
  • 在误差定义中,除了考虑欧氏距离之外,还考虑了法向量之间的距离,因此具有更加准确的角度。
  • 在开源领域,效果最好的ICP匹配方法。

4.IMLS(Implicit Moving Least Square)-ICP匹配方法

IMLS-SLAM是一个仅依赖点云数据的低漂移(low-drift)SLAM算法。其依赖于一个scan-to-model的匹配框架。这里的model可以认为是对点云进行的局部曲面建模。

基本思想:

  • 选择具有代表性的激光点来进行匹配,既能减少计算量同时又能减少激光点分布不均匀导致的计算结果出现偏移。
  • 点云中隐藏着真实的曲面,最好的做法就是能从参考帧点云中把曲面重建出来。
  • 曲面重建的越准确,对真实世界描述越准确,匹配的精度就越高。

实现方法:

1)代表点(Informative Point)的选取

  • 具有丰富特征的点,即为结构化的点:具有良好的曲率和法向量的定义。
  • 曲率越小的点越好,因为曲率为0代表着直线,代表着最结构化的点,也代表着具有非常好的法向量定义,能够提供足够的约束。
  • 选点的时候需要注意选取的激光点的均衡以保证可观性,因为是平面匹配,不存在角度不可观的情况。只需要考虑X方向和Y方向的可观性。要保证两者的约束基本上是一致的, 才能让结果不出现偏移。

2)曲面重建

我们认为激光点云是分布在真实曲面的附近,并可以用高斯分布描述。如下图

权重W在这的作用就是只取点x附近的一部分点使用上面的公式重建曲面,而在曲面上离点x比较远的就不需要考虑了,距离越远,权重W就越小。

3)匹配求解

对ICP、PL-ICP、NICP、IMLS-ICP匹配算法的解析相关推荐

  1. ICP是什么意思?ICP备案和ICP证有什么不同?

    ICP是什么意思呢?相信大多站长并不清楚ICP是什么意思,就算是网站已经备案的也不了解ICP到底为何物.大家往往搞不清楚ICP备案和ICP证之间的区别.今天小编为大家讲解一下ICP是什么意思,ICP备 ...

  2. 怎么申请icp备案?怎么查询icp备案是否申请成功

        什么是icp备案号?     简单来说,icp备案号,就是你网站的备案号码.icp备案号就是当你的网站提交备案资料,经工业信息化产业部(及各地通信管理局)审核通过后,会通过电子邮箱发送一个备案 ...

  3. icp备案号怎么申请?icp备案号哪里查询

    ICP备案就是对网站的开办者信息的备案登记,以确保网站开办者的真实合法性.购买域名后,需要通过ICP备案才能开通域名解析服务.未通过ICP备案的网站,会有被查处关停的风险,备案的目的就是为了防止在网上 ...

  4. elo匹配算法c语言,匹配算法全面解析:采用国际通用“ELO等级分系统”

    原标题:匹配算法全面解析:采用国际通用"ELO等级分系统" 下面将跟各位召唤师们探讨一下大家最关心的"匹配"这个话题.首先通过案例分析,分析部分召唤师一直以来比 ...

  5. mysql icp特性_MySQL:关于ICP特性的说明(未完)

    --- ICP特性是我们DBA在实际的SQL优化过程中经常能够遇到的,但是某些出现ICP的地方看起来并不那么直观,为我们产生了一定的困扰.本文通过MySQL 5.7.22 和Innodb引擎来解释一下 ...

  6. Oracle10g安装了11g的ODAC后,PL/SQL连接提示TNS:无法解析指定的连接标识符

    最近刚刚加入了一个新的项目,目前需求已经完成,即将进入详细设计阶段.项目框架要借助其它项目组正在开发的一个多项目系统框架,采用这个主体框架开发咱自己系统的模块,这几天就了解了一下此框架的构成,主要采用 ...

  7. pytorch_nicp编译

    NICP学习:(117条消息) 激光slam理论与实践 - 第四章 前端配准(ICP)_ppipp1109的博客-CSDN博客 (117条消息) 激光SLAM:ICP升级版本NICP(Normal I ...

  8. 点云配准算法ICP及其各种变体

    点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 作者丨流川峰 来源丨深蓝AI 介绍 点云配准(Point Cloud Registration)算法指 ...

  9. 迭代最近点(Iterative Closest Point, ICP)算法及matlab实现

    前言 通常,使用RGB-D相机或是其他方法获取到物体的三维点云后,由于采集设备不同.拍摄视角不同等等因素的影响,即使是同一个物体所得到的点云也会有较大的差异,主要是旋转或者平移的变化.对于一组图像数据 ...

最新文章

  1. c语言24点游戏流程图,C语言解24点游戏程序
  2. 反思相信谁的评价:一直的坚定的不移的相信自己对自己的评价 相信自己是多么的重要
  3. 鸿蒙轻内核源码分析:掌握信号量使用差异
  4. Mastering Oracle SQL学习笔记(join句法专题第六部份)
  5. git bash 出现vim的时候怎么退出
  6. 通过Lotusscript修改数据库主模板属性
  7. javascript中的内存泄漏
  8. STM32/TMS320F2812+W5500硬软件调试总结
  9. 资金盘FairWin漏洞系统详解:项目方可以撇开“作恶”嫌疑了?
  10. java学生管理系统报告_java学生管理系统总结报告.doc
  11. 网络通信编程大作业--深度研究爬虫技术
  12. VBA学习笔记6:将多个工作表中满足条件的数据汇总到同一个工作表
  13. oracle ap tp是什么,AP模式和Router模式区别是什么
  14. tp交换机管理页面_tplink交换机怎样设置
  15. 阿里云MFA绑定Chrome浏览器
  16. 不用电路控制的机器人!加州大学开发出气动逻辑系统,能用意想不到的方式弹钢琴...
  17. 基因家族TBTools
  18. linux下route路由设置命令详解
  19. doris数据库环境搭建报错(invalid cluster id. ignore)
  20. Couldnt check the working tree for unmerged files because of an error. bad signature index file cor

热门文章

  1. 在GitHub中的error: failed to push some refs to 仓库地址原因
  2. Novel AI 绘画 —— 面对新人的一个介绍与资料分享
  3. java果之芒农场销售系统计算机毕业设计MyBatis+系统+LW文档+源码+调试部署
  4. 基因型与表型的交互作用如何分析,多元回归来搞定
  5. DC-3靶场实战详解
  6. Java基础项目:家庭记录收支程序
  7. Activiti工作流人员并行审核配置BPMN
  8. Spring中初始化bean和销毁bean的时候执行某个方法的详解
  9. 王俊凯语音包发布,竟然震撼了这些“大佬”?!
  10. 抽象方法与虚方法的区别