从零开始一起学习SLAM-ICP原理及应用

如何更高效的学习SLAM? 点击上方“计算机视觉life”,选择“星标”快速获得最新干货 01 SLAM星球漫游指南「从零开始学习SLAM」知识星球是全国最棒的SLAM/三维视觉交流社区,包括小白入门图文/视频教程、学习过程疑难点解答、最新论文/开源代码/数据集分享、在线学习小组、笔试面试题、实习/校招/社招岗位推荐、星主私密直播等。具体看下方【星球漫游指南】 阅读详情

点“计算机视觉life”关注,星标更快接收干货!

小白:师兄,最近忙什么呢,都见不到你人影,我们的课也好久没更新了呢

师兄:抱歉,抱歉,最近忙于俗事。我后面一起补上,学习劲头得向你们年轻人学习啊!话说,你最近在研究什么呢?

小白:最近在看ICP,十四讲上简单提了下,还有点懵懵哒

师兄:好,那今天就说说ICP算法吧。搬个小板凳做好哈:

ICP全称Iterative Closest Point,翻译过来就是迭代最近点。ICP在点云配准领域应用的非常广泛,因此基于深度相机、激光雷达的算法使用ICP的频率比较高。

小白:那我是学视觉SLAM的,是不是不用关注了啊(内心OS:毕竟SLAM要学的太多了)

师兄:哈哈,这个懒不能偷的。ICP现在在视觉SLAM中用的也非常多了。我总结了一下下ICP的应用场景:

ICP到底有什么用呢?

假设我们在三维空间中有两组点集,我们分别称之为P1, P2好了,P1, P2中都有几千个点,那么可以分为两种情况:

1、我们完全不知道P1, P2中每个点是如何对应的。这样的情况很常见,比如我用只有depth的深度相机或者激光雷达在两个不同的位置对着一只兔儿分别拍摄一张深度图并转化为点云图,我特喵的也不知道哪个点和哪个点对应,但是我想把这两个点云“融合”(专业词汇叫做registration,有些地方翻译为注册,有点让人不知所云,我建议翻译为配准)在一起,变成一个更完整的兔儿。

2、我们已经知道P1, P2中哪个点对应的哪个点。比如我们使用RGB-D相机分别在两个不同位置拍摄一张 RGB彩色图 + 深度图,而且彩色图和深度图是对齐好的。因为有彩色图我们就可以做特征点匹配了,因为每个特征点都对应一个深度图上的深度值,所以我们能够得到两组对应好的三维点。

小白:原来如此,看起来ICP还挺强大的,对应不对应都能搞定啊,ICP为何这么牛叉?

ICP为何这么牛叉?

师兄:来看看ICP的过程就知道了。为了方便,我们用一个二维的例子来说明吧,初始是两个不同角度下的笑脸(深红色和绿色),下面是红色笑脸如何通过ICP过程和绿色笑脸重合的:

小白:好神奇啊

师兄:这个只是一个示例,通常情况下我们在SLAM中不会遇到这种情况,都是三维空间的点。我再以点云配准为例进行说明。假设现在有两幅待配准的点云(比如上面的小兔子),ICP算法是这样配准两幅点云的:

ICP算法流程

  1. 首先对于一幅点云中的每个点,在另一幅点云中计算匹配点(最近点)
  2. 极小化匹配点间的匹配误差,计算位姿
  3. 然后将计算的位姿作用于点云
  4. 再重新计算匹配点
  5. 如此迭代,直到迭代次数达到阈值,或者极小化的能量函数变化量小于设定阈值

下面是用三维点云进行ICP的一个效果

小白:第一次计算的误差估计很大,后面会慢慢变小,直到收敛?

师兄:嗯,这是一个由粗放到精细的过程,在视觉算法中由粗到精的方法很常用。。

小白:比如图像金字塔!哈哈

师兄:嗯,熟悉的配方,熟悉的味道(/笑脸)

ICP的精髓其实就是迭代,一次次的修正错误,最后获得一个还不错的结果。

不过话是这样说,但是一般情况下数据都有不少噪音,如果噪音较大,第一种情况不一定能完全配准正确。

小白:听起来合情合理,也不麻烦,书上为啥推导那么复杂?

师兄:嗯,这就是感性到理性的过程。视觉SLAM十四讲书上从数学上推导了具体如何实现。我这里引用一下求解ICP的三个步骤:

小白:原理推导大概是能看明白了

师兄:嗯嗯,推导部分给你留了一个小小的课后作业了

小白:师兄想的周到,这样才能真正掌握呢(内心OS:真狠啊。。)

师兄:上面介绍是最简单的点和点匹配的ICP算法,实际应用中为了使得算法鲁棒,也就是在有不少噪声的情况下仍然能够得到正确的结果,很多研究者提出了不同的匹配思路:例如,极小化的误差项包括对应点的点到点的欧式距离,和对应点的点到平面距离,以及极小化对应点的颜色值误差等

小白:这么多方法,用哪个好呢?

师兄:如果你应用场景简单,数据干净基本没有噪声,最原始的点点匹配就行。如果有噪声,则最后考虑一下复杂点的方法。2003年的时候,pottman 和Hofer两位大牛的论文中证明了当两幅点云比较接近时,极小化对应点的点到平面距离比点到点距离更接近两个平面之间的真实距离,

手写ICP实现:从数学原理到SLAM工程落地 点云配准是激光SLAM前端的核心环节,其本质是求解刚体变换的非线性最小二乘问题。ICP(Iterative Closest Point)作为主流配准算法,依赖最近点匹配与SVD求解旋转平移,但收敛性高度敏感于初始位姿、点云几何结构与数值稳定性。工业级应用中,盲目调用PCL封装极易因尺度失配、反射未修正、法向量歧义或运动畸变导致建图错位。本文聚焦ICP的底层数学骨架(质心对齐、正交Procrustes、SVD反射校正)与可调试工程实现,结合Eigen手写核心循环、动态距离阈值、增量缓存及多线程优化,为激光SL 阅读详情

相关推荐

全国最大SLAM开发者学习交流社区 欢迎加入

计算机视觉life旗下“从零开始学习SLAM”知识星球创办于2018年,旨在建立SLAM、三维视觉领域的开发者学习、交流社区。运行三年多已经累计分享干货5300次、答疑/评论9550+次,汇集了行业内3000+优秀的从业者,如今已是全国最大的SLAM开发者学习交流社区。

计算机视觉life 3591

视觉SLAM关键方法总结

点“计算机视觉life”关注,置顶更快接收消息! 最近在做基于激光信息的机器人行人跟踪发现如果单独利用激光信息很难完成机器人对行人的识别、跟踪等功能,因此考虑与视觉融合的方法,这样便可以充分利用激光雷达提供的精确位置信息及视觉提供的丰富纹理、颜色等场景信息。以下是最近调研视觉SLAM中的实现方法的总结,包括三方面内容:姿态计算、闭环检测、BA优化。 姿态计算 一、通过提取图像的特征描述子,如...

计算机视觉life 2224

【从零开始学习SLAM】两张图像如何拼接成点云

貌似用两个摄像机,采集两张图像,在知道相机内外参数的情况下 也可以计算出3D空间坐标点云。(双目测距原理) 单目测距原理两帧图像 根据三角形相似原理可以求出参数焦距 f的值,接下来就可以计算新采集图片中实物的距离z了。 描述了点 P 和它的像之间的空间关系。 像素坐标系像素平面与成像平面之间,相差了一个缩放和一个原点的平移。 相机内参数矩阵(Camera Intrinsics)K,就包含了fx、fy焦距和光心cx、xy的坐标, 通过这个矩阵就可以计算出像素坐标系和空间坐标系之间的关系。 相机的位姿 R,

小秋 AI SLAM 入门实战教程 3243

学习SLAM-ICP原理及应用.zip

学习SLAM-ICP原理及应用,内含自动驾驶学习资料

Jetpack Compose Navigation实战:从基础到高级导航模式

本文全面解析Jetpack Compose Navigation在Android开发中的应用,从基础导航实现到高级模式(如单任务/单顶模式),涵盖参数传递、嵌套导航、深层链接等核心功能。通过实战代码示例展示如何优化导航性能,并与ViewModel、Hilt等架构组件整合,为开发者提供高效的Compose导航解决方案。

pz890123456的博客 373

我的老款Intel MacBook Pro,如何用OpenVINO把本地大模型推理速度提升10倍?

本文详细介绍了如何在老款Intel MacBook Pro上使用OpenVINO工具包将本地大模型推理速度提升10倍。通过对比Ollama CPU原生、Transformers原生和OpenVINO优化三种方案,展示了OpenVINO在性能优化上的显著优势,并提供了从环境配置到模型转换、性能调优的完整实战指南。

weixin_28694295的博客 302

多出来的那一截:Java 堆外内存 OOM 的来源分账、分流排查与治理解析

Java进程的RES常比-Xmx多出一截,堆却平稳。本文把堆外内存拆成直接缓冲区、Unsafe、JNI本地库、线程栈、元空间与文件映射六类,用JDK 8与17的六组实验对照RSS、NMT、BufferPool三本账:clear()不释放内存;MaxDirectMemorySize默认约等于堆上限且只管直接缓冲区;禁用显式GC会让申请线程退避半秒后失败;未关闭的Deflater零GC下让RSS涨1GB;Netty池内泄漏GC救不回。最后给出定性、对账、定位的排查路线与预算、编码、监控三层治理。

曾经“等你生日那天”都遥远得像未来,如今却可欢愉的挥手说“下个十年见” 14万+

STM32 HAL SDADC DMA

由于项目需要使用STM32F373单片机的SDADC功能对电位计进行检测,网上资料比较少,踩了很多坑,下面进行总结。

weixin_44597885的博客 1196

[Python] 如何使用 Python 调用 Dify 工作流服务实现自动化翻译

本文介绍了如何使用Python调用Dify的API实现文本翻译自动化。Dify作为AI开发平台,其工作流功能可执行文本处理、翻译等任务。选择Python调用Dify的优势在于职责划分清晰:Dify专注AI服务,Python处理文件操作等非AI任务。

技术小甜甜:传播可落地技术,帮助个人和企业降低解决真实场景问题的成本 1096

SIMULINK开发项目实例 1000 例专栏之第802例--基于电机驱动系统的场景实例:永磁同步电机(PMSM)在电动汽车中的矢量控制仿真

随着全球对环境保护的关注增加,电动汽车(Electric Vehicle, EV)因其环保特性而受到广泛关注。永磁同步电机(Permanent Magnet Synchronous Motor, PMSM)由于其高效率、高功率密度和良好的动态响应性能,在电动汽车驱动系统中得到了广泛应用。矢量控制(Field-Oriented Control, FOC)是实现PMSM高性能控制的关键技术之一,它能够实现对电机转矩和磁场的独立控制,从而达到类似直流电机的控制效果。本文将详细介绍如何使用来构建一个。

xiaoheshang_123的博客 269

YOLO11涨点优化:训练技巧 | 使用标签平滑(Label Smoothing)配合余弦退火学习率,防止过拟合,稳步提点

摘要: YOLO11凭借动态卷积核调度、自适应特征融合等创新成为2026年目标检测主流,但面临训练集过拟合问题。文章聚焦两种零推理开销的正则化技巧:标签平滑(Label Smoothing)和余弦退火学习率(Cosine Annealing LR)。标签平滑通过软化硬标签(如将[1,0]改为[0.9,0.1])防止模型过度自信,代码中通过label_smoothing=0.1一键启用;余弦退火则以平滑的余弦曲线调整学习率(cos_lr=True),避免阶梯衰减的震荡。两者组合可显著缩小YOLO11训练与验证

2601_95807009的博客 45

深入解析雪球网股票行情数据爬取:基于WebSocket与API的实时数据获取技术实践

本文详细介绍了如何使用Python爬虫技术获取雪球网的股票行情数据,涵盖了WebSocket实时数据连接和RESTful API接口调用两种主要技术方案。完整的WebSocket客户端,支持实时行情订阅和数据处理功能丰富的API客户端,支持多种数据类型的获取数据存储和管理系统,使用SQLite进行数据持久化实时监控和预警系统,支持自定义预警规则技术指标计算,提供基本的数据分析功能。

2201_76125261的博客 1255

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

上一篇: SLAM、三维重建,语义相关数据集大全
下一篇: 解放双手——相机与IMU外参的在线标定
计算机视觉life
博客等级 码龄12年 4347粉丝 209原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值