点云与 ICP 配准
激光雷达和深度相机交给机器人的不是图像,而是一堆三维点。要把两次扫描拼起来、算出机器人走了多远、判断物体摆在哪里,都要回答同一个问题:哪一个刚体运动能让这堆点和那堆点重合?如果知道点与点的对应关系,答案是一次 SVD 的闭式解(Kabsch);不知道时,就先用最近邻去猜对应,再求解,再猜,如此反复,这就是 ICP。本节从深度图反投影、体素滤波和法向量出发,交互地演示闭式解与反射陷阱,ICP 的收敛盆与局部极小,点到面 ICP 为什么更快,走廊里为什么会"退化",最后用一个 2D 激光里程计看漂移是怎样出现的。
1为什么机器人需要它
一台激光雷达每秒吐出几十万个三维点,深度相机每帧给出几万个。它们没有"这是桌子、那是墙"的标签,只是一堆带噪声的坐标。机器人用这堆点做三件最基本的事,而它们都归结为配准(registration):找一个刚体运动 \(T=(R,\mathbf t)\in\SE\),使一堆点 \(P\)(源)经过 \(T\) 之后与另一堆点 \(Q\)(目标)重合。
- 里程计与建图:机器人向前走了一步,前后两帧扫描大部分重叠。把后一帧挪到前一帧上所需的刚体运动,就是这一步的位移;把每一帧按各自的位姿拼起来就是地图(LOAM、KISS-ICP、FAST-LIO 都是这个思路)。
- 物体定位与位姿精修:物体的 CAD 点云(模型)和深度相机看到的局部点云对齐,就得到物体位姿。网络或 PnP 给出一个粗估计,ICP 把它精修到毫米级,然后才交给抓取规划(9.3 节)。
- 标定与多机位拼接:两个传感器同时看同一个场景,让两堆点重合,就得到它们之间的外参。
难点在于对应关系是未知的:两次扫描打到的不是同一批点。如果对应已知,问题有闭式解,一次 SVD 搞定(1.12 节);对应未知时,问题变成非凸的,得靠迭代,而迭代只能保证走到局部最优。本节的主线:点云长什么样 → 对应已知时的闭式解 → ICP → 点到面 ICP → 什么时候会错(局部极小、退化)→ 机器人里怎么用。
2直觉:点云是一个集合,配准是找一个刚体运动
点云从哪来
深度相机的每个像素 \((u,v)\) 存一个深度 \(z\)。用 10.3 节的内参 \(K\) 反投影,再用相机位姿 \({}^{w}T_{c}\) 搬到世界系:
这样得到的是有序点云(organized):保留 \((u,v)\) 网格,邻居就是相邻像素,免费。LiDAR 的多圈扫描、多帧拼接、滤波之后,就只剩一个无序点云(unorganized):一个没有顺序、没有连接关系的集合,找邻居要靠空间索引。它还有几个脾气:深度噪声随距离增大(结构光和 ToF 相机的噪声大致与 \(z^2\) 成正比,下图取 \(\sigma(z)=\sigma\,(z/2)^2\));密度随距离变稀;只有朝向传感器的一面被看见。预处理有三件标配:体素滤波(每个体素只留一个质心,让密度均匀、点数变少)、最近邻搜索(k-d 树,平均每次查询 \(O(\log N)\),暴力是 \(O(N)\))、法向量(取点的 \(k\) 个近邻,做协方差的特征分解,最小特征值对应的特征向量就是法向,\(\lambda_{\min}/\sum\lambda\) 称为曲率)。
- 把深度噪声 σ 调到 2 cm 以上,切到"法向量":近处的平面还平吗?法向量误差涨到多少?再把 \(k\) 调大,误差降下来了吗?代价是什么(看方盒的棱)?
- 把体素边长调到 8 cm 以上:点数剩下多少?远处稀疏的点和近处稠密的点,密度变得更均匀了吗?
已知对应关系:闭式解
先解简单的版本:已知 \(\mathbf a_i\) 对应 \(\mathbf b_i\),求使 \(\sum_i\|R\mathbf a_i+\mathbf t-\mathbf b_i\|^2\) 最小的 \(R\in\SO,\mathbf t\)。四步:
- 去中心:\(\bar{\mathbf a},\bar{\mathbf b}\) 是两组点的质心,\(\mathbf a_i'=\mathbf a_i-\bar{\mathbf a}\),\(\mathbf b_i'=\mathbf b_i-\bar{\mathbf b}\)。平移从问题里消失了。
- 互协方差矩阵 \(H=\sum_i\mathbf a_i'\mathbf b_i'^{\top}\)(\(3\times3\)):它记录了"\(\mathbf a\) 的每个方向在多大程度上跟 \(\mathbf b\) 的每个方向同向变化"。
- SVD:\(H=U\Sigma V^{\top}\),旋转 \(\hat R=V\,\mathrm{diag}(1,1,\det(VU^{\top}))\,U^{\top}\)。
- 平移 \(\hat{\mathbf t}=\bar{\mathbf b}-\hat R\bar{\mathbf a}\)。
第 3 步里的 \(\det\) 修正是整节最容易被忽略的一行:SVD 给出的 \(VU^{\top}\) 可能是反射(行列式 \(-1\)),而反射并不是刚体运动。下图让你把 \(B\) 做成镜像,亲眼看到"没有这一行会发生什么"。如果两组点之间还差一个尺度(比如单目 SLAM 的地图和激光地图,或者两个尺度未知的重建),Umeyama(1991)把闭式解推广到相似变换 \(s,R,\mathbf t\)。
- 把 \(B\) 切成"镜像":不带修正的 \(VU^{\top}\) 行列式为 \(-1\),而且在无噪声时残差正好为 0(镜像像总能被反射完美对上)。真正的刚体解残差是多少?为什么说"残差为 0"在这里是个陷阱?
- 把"真实尺度" \(s\) 拖到 1.3 以上,用"刚体拟合"得到一个很差的残差;切到"相似变换拟合"(Umeyama):残差回到 0,\(\hat s\) 等于几?
对应关系已知时,刚体配准是一个有闭式解的最小二乘:质心对齐,再对互协方差做一次 SVD。对应关系未知时,一个自然的想法是"先猜对应,再用闭式解":猜对应用最近邻,每猜一次就用闭式解把源点云挪近一点,再猜。这就是 ICP,下一节让它动起来。
3动手玩:ICP 实验室
ICP(Iterative Closest Point,Besl 与 McKay、Chen 与 Medioni,1992)每一轮做四件事:① 变换——用当前估计 \(T\) 把源点云挪到目标附近;② 匹配——每个源点在目标里找最近邻,得到对应关系;③ 剔除(可选)——丢掉最差的一部分配对;④ 求解——用 Kabsch 闭式解求出使这些配对距离平方和最小的新 \(T\)。重复,直到 \(T\) 不再变化。
下面的图里,琥珀色是源点云(带一个已知的初始错位),紫色是目标。物体是不对称的"玩具"(椭球身体、头、侧瘤、竖尾鳍,没有任何对称性,所以正确的对齐是唯一的)。青色线是当前的对应关系。每点一次单步,就执行一轮;运行会一直迭代到收敛。右上的曲线是 RMSE(匹配距离的均方根)和相对真值的旋转误差,右下是收敛盆:对每个初始角度(绕所选轴)各跑一次 ICP,画出最终的旋转误差。绿色带内(<5°)算对齐成功。
- 把初始角度拖到 150° 以上,点"运行":ICP 平稳收敛,RMSE 也降得不错,但旋转误差仍有几十度甚至上百度。ICP 收敛到了一个局部极小(头尾对调的对齐)。观察收敛盆曲线:成功区间大约有多宽?
- 数据选"部分重叠 + 杂点",初始角度取 20° 左右,保留比例为 100%:运行后旋转误差仍有十几度,因为源里有目标没有的东西。把保留比例降到 80% 左右再运行:误差降到几度以内。
- 回到"完整"数据,初始角度 180°,点"多起点":24 个起点里最低 RMSE 的那个给出了正确的对齐。这是"ICP 需要好的初值"的一个最朴素的补救办法。
交替最小化:ICP 在 \(E(T,c)=\sum_i\|T\mathbf p_i-\mathbf q_{c(i)}\|^2\) 上交替优化:固定 \(T\) 时,最近邻 \(c\) 使 \(E\) 最小;固定 \(c\) 时,Kabsch 使 \(E\) 最小。每一步都不会让 \(E\) 变大,所以 \(E\) 单调下降(FIG 3 的 RMSE 曲线不会上升),但只能收敛到局部极小。这和 \(k\)-means 的"分配—更新"是同一种结构。距离场上的下降:把 \(f(T)=\sum_i d(T\mathbf p_i,Q)^2\)(\(d\) 是到点集的距离)当作要最小化的函数,最近邻对应相当于只用 \(d^2\) 的一阶信息,对每个点把目标曲面近似成"一个点",点到面 ICP(下一节)则把曲面近似成"一个平面",信息更多,收敛更快。
4第二、第三视角:点到面与退化
点到面:沿着曲面滑动是不受罚的
点到点 ICP 要求源点落在它匹配到的那个目标点上。可是目标点只是曲面的一次随机采样:源点沿着曲面滑到旁边一点,同样是对的,却要受罚。在大片平坦的地面或墙面上,这使点到点 ICP 的收敛变得很慢,每轮只挪一点点(线性收敛,比例很接近 1)。点到面(Chen 与 Medioni 的原始形式)只罚源点到目标点切平面的垂直距离:
它对 \(T\) 不再有 Kabsch 那样的闭式解,但可以用 Gauss-Newton(6.6 节):在当前估计处线性化,解一个 \(6\times6\) 的法方程,再用指数映射(5.6 节)更新。推导放在"再看数学"一节。下面的图在三个场景里同时跑点到点和点到面,用真值位姿误差 \(\|\mathrm{Log}(T\,T_\ast^{-1})\|\)(旋转以弧度、平移以米,合成一个数)比较。同时算出 \(6\times6\) 矩阵 \(\sum_iJ_i^{\top}J_i\) 的特征值:它们衡量每一个运动方向被数据约束得有多紧。
场景:墙角(地面 + 后墙 + 侧墙,三个互相垂直的面,什么运动都被约束);隧道(地面 + 两侧墙,三个面都平行于 \(x\) 轴);隧道 + 立柱(隧道中间放一个方盒,盒子的前后面把 \(x\) 方向约束住了)。
- 选"墙角"和"点到面",把 \(k\) 拖到 4:位姿误差已经降到 0.01 以下;再选"点到点",同样的 \(k\) 误差还在 0.1 以上。读数里给出各自达到 0.02 所需的轮数。
- 选"隧道":最小特征值掉到 0(红色),红色箭头沿着隧道,位姿误差曲线停在初始错位的 \(x\) 分量处。再选"隧道 + 立柱":最小特征值恢复到 \(10^{-2}\) 量级,点到面又能在几轮内收敛。
几何:平面只约束沿它法向的运动,隧道的三个面的法向都垂直于 \(x\) 轴,所以沿 \(x\) 的平移没有任何面能"感觉到"。代数:\(\sum J_i^{\top}J_i\) 在该方向上特征值为 0,法方程奇异。统计:估计的协方差大致是 \(\sigma^2(\sum J_i^{\top}J_i)^{-1}\),特征值趋于 0 意味着该方向上的方差趋于无穷。三种说法都解释了同一件事:走廊里的激光里程计在沿走廊方向上会漂。
5再看数学
提示:把鼠标悬停在公式中带底色的符号上,FIG 2、FIG 3 或 FIG 4 中对应的元素会被高亮。
问题与 Kabsch 推导
已知配对 \((\mathbf a_i,\mathbf b_i)\),求
第一步,平移解耦。对 \(\mathbf t\) 求导令其为 0,得 \(\mathbf t=\bar{\mathbf b}-R\bar{\mathbf a}\)。代回去,代价只剩旋转:\(\sum_i\|R\mathbf a_i'-\mathbf b_i'\|^2\),其中 \(\mathbf a_i'=\mathbf a_i-\hl{cent}{\bar{\mathbf a}}\)。第二步,展开。\(R\) 是正交矩阵,\(\|R\mathbf a'\|=\|\mathbf a'\|\),所以
只需最大化 \(\operatorname{tr}(RH)=\operatorname{tr}(R\,U\Sigma V^{\top})=\operatorname{tr}(\Sigma\,V^{\top}RU)=\sum_k\sigma_k Z_{kk}\),其中 \(Z=V^{\top}RU\) 是正交矩阵,对角元不超过 1。所以最大值在 \(Z=I\),即 \(R=VU^{\top}\) 取到(这正是经典的正交 Procrustes 问题的解,用的是 1.12 节的 SVD)。但我们要求 \(\det R=+1\),而 \(\det Z=\det(V^{\top}RU)=\det R\cdot\det V\det U\):如果 \(\det(VU^{\top})=-1\),\(Z=I\) 不被允许,此时最好的行列式为 \(-1\) 的正交矩阵是 \(Z=\mathrm{diag}(1,1,-1)\)(牺牲最小的奇异值 \(\sigma_3\))。合起来:
其中 \(D=\mathrm{diag}(1,1,\det(VU^{\top}))\)。唯一性要求 \(\operatorname{rank}H\ge2\):如果所有点共线(\(\operatorname{rank}H=1\)),绕这条线的旋转是自由的;共面时 \(\sigma_3=0\),行列式修正选的符号不改变代价,两个候选都是最优,只有 \(\det=+1\) 的是刚体。这是 Kabsch(1976)、Horn(1987,四元数)、Arun 等(1987)、Umeyama(1991)彼此等价的结果。Barfoot 的《State Estimation for Robotics》把它放在李群的框架里,并推广到带权重和不确定性的情形。
ICP 是交替最小化,所以单调但只是局部
每一步都不增加 \(E\),\(E\ge0\),所以单调收敛(Besl 与 McKay 的定理)。但极限只是 \(E\) 的局部极小,且收敛是线性的。剔除最差的一部分配对(修剪 ICP,Chetverikov 等)时,等于对"哪些配对被保留"也做交替最小化,单调性依然成立,而且是处理部分重叠的标准做法。更一般地,用鲁棒核 \(\rho\)(Huber、Cauchy、Geman–McClure)代替平方,经 IRLS 变成每个配对的权重 \(w_i=\rho'(r_i)/r_i\),Kabsch 变成带权版本;KISS-ICP 里用的是自适应的距离阈值加核。
点到面的线性化
用左扰动 \(T\leftarrow\mathrm{Exp}(\boldsymbol\xi)\,T\),\(\boldsymbol\xi=(\boldsymbol\omega,\mathbf v)\)(角速度分量在前,与全课程一致)。记 \(\mathbf p_i'=T\mathbf p_i\)。一阶近似下 \(\mathrm{Exp}(\boldsymbol\xi)\mathbf p'\approx\mathbf p'+\boldsymbol\omega\times\mathbf p'+\mathbf v\),于是残差 \(r_i=\mathbf n_i^{\top}(\mathbf p_i'-\mathbf q_i)\) 变为
这里用到了标量三重积 \(\mathbf n\cdot(\boldsymbol\omega\times\mathbf p)=\boldsymbol\omega\cdot(\mathbf p\times\mathbf n)\)(1.8 节)。解出 \(\boldsymbol\xi\) 后用 \(T\leftarrow\mathrm{Exp}(\boldsymbol\xi)T\) 更新(用 M.expSE3),这就是流形上的 Gauss-Newton(6.10 节):每步都在李代数里解线性问题,更新后仍然是合法的 SE(3) 元素,不需要再把 \(R\) 正交化。数值检验:把 \(J_i\) 与 \(r_i(\boldsymbol\xi)=\mathbf n^{\top}(\mathrm{Exp}(\boldsymbol\xi)\mathbf p'-\mathbf q)\) 的中心差分比较,最大偏差在 \(10^{-10}\) 量级。小角度近似 \(R\approx I+[\boldsymbol\omega]_\times\) 是同一阶近似,只是更新不严格落在 SO(3) 上,需要事后投影。为什么更快?点到点把每个目标点当作一个孤立的点,等价于用一个"曲率无穷大"的曲面去逼近;点到面利用了曲面的一阶信息(法向),相当于对距离函数做 Gauss-Newton,实际收敛快得多(Pottmann 等 2006 对收敛性做了几何分析)。
退化与不确定性
记 \(A=\sum_iJ_i^{\top}J_i\)。一个平面(法向 \(\mathbf n\))只对满足 \(\mathbf n\cdot(\mathbf v+\boldsymbol\omega\times\mathbf p)\neq0\) 的运动有"感觉"。\(A\) 的零空间就是所有这些约束都满足的运动,即让所有残差保持不变的螺旋运动:隧道里的 \(\boldsymbol\xi=(\mathbf 0,\hat{\mathbf x})\),大平地上的"在平面内平移 + 绕法向转动",圆柱面上的"沿轴平移 + 绕轴转动",球面上的"绕球心转动"。Gelfand 等(2003)用 \(A\) 的特征分解来选"几何稳定"的采样点;Zhang、Kaess 与 Singh(2016)把它用到激光里程计,检测到退化方向后不再在这个方向上更新状态。注意 \(A\) 里旋转和平移的量纲不同,特征值要在统一尺度后才有意义(FIG 4 把旋转部分乘以场景尺度 \(s\),并除以点数)。
在高斯噪声假设下,配准的协方差近似为 \(\sigma^2A^{-1}\),可当作位姿图(Part IV)里这条边的信息矩阵 \(A/\sigma^2\)。但这只是一个下界:它没有考虑对应关系本身的错误和采样间距,实际协方差更大(Censi 2007 给出了更精细的闭式估计)。把 ICP 的 RMSE 当作"置信度"是不安全的(见误区)。
变体一览
| 方法 | 残差 / 模型 | 特点 |
|---|---|---|
| 点到点 | \(\|T\mathbf p-\mathbf q\|^2\) | 闭式解(Kabsch);不需要法向;平坦处收敛慢(Besl 与 McKay 1992) |
| 点到面 | \((\mathbf n^{\top}(T\mathbf p-\mathbf q))^2\) | Gauss-Newton;需要目标法向;快得多,走廊里退化(Chen 与 Medioni 1992) |
| Generalized-ICP | \(\mathbf d^{\top}(C_q+RC_pR^{\top})^{-1}\mathbf d\) | 每个点配一个"扁平"协方差(沿法向很窄),源和目标的曲面一起考虑,相当于"面到面";对初值和采样更稳(Segal 等 2009) |
| NDT | 目标 = 网格里的高斯混合 | 不需要显式对应,目标函数光滑可微(Biber 与 Straßer 2003) |
| Colored ICP | 点到面 + 颜色项 | 颜色约束沿曲面滑动的方向,缓解几何退化(Park 等 2017) |
| 全局配准 | 特征匹配 + RANSAC / 分支定界 | 不需要初值:FPFH 描述子配对,每次用 3 对点做一次 Kabsch(FIG 2 的算法),RANSAC 选内点最多的;TEASER++、Go-ICP 给出鲁棒或全局最优版本,再交给 ICP 精修 |
6机器人中的它:激光里程计与它的漂移
激光里程计的骨架就是 ICP 的串联:对每一帧新扫描,和上一帧(或局部地图)做配准,得到相对位姿 \(\Delta_k\),再累乘 \(T_k=T_{k-1}\Delta_k\)。下面是一个二维版本:一个 360° 激光(120 束,最大量程 3.5 m)在"房间—走廊—房间"的平面里走。每帧扫描由光线投射和噪声生成,扫描之间用真实的 ICP(点到点,二维 Kabsch)配准。灰线是墙,紫色点是地图,琥珀色路径是估计,青色虚线是真值。红色的路径段表示这一帧自己的 \(3\times3\) 点到线 Hessian(\(x,y,\theta\))的最小特征值很小:这里数据几乎没有约束沿某个方向的运动。
"恒等初值"表示 ICP 从"没动"出发;"里程计初值"表示从带有 6% 尺度误差和小噪声的轮式里程计出发(机器人里 ICP 几乎总是这样启动的);"仅里程计"是完全不用 ICP 的推算。
- 选"恒等初值",把 \(k\) 拖到最后:估计的机器人远远落在后面,位置误差超过 3 m(把 \(k\) 停在走廊里,读数里 ICP 的 RMSE 只有 1 到 2 cm),第二个房间的扫描被堆在走廊和第一个房间的位置上。
- 切到"里程计初值",再拖到最后:误差降到 2 m 以内。走廊中段 ICP 对沿走廊方向没有信息,只能原样接受初值(带着 6% 的尺度误差);在有特征的地方它又把误差拉回来。再切到"仅里程计",对比一下 ICP 的贡献。
激光里程计与建图:LOAM(Zhang 与 Singh,RSS 2014)从每圈扫描里按局部平滑度提取边缘点和平面点,分别做点到线、点到面匹配,里程计 10 Hz、建图 1 Hz 两个线程;LeGO-LOAM(Shan 与 Englot,IROS 2018)先分割地面并分两步优化,更轻量;FAST-LIO / FAST-LIO2(Xu 与 Zhang,RA-L 2021;Xu 等,T-RO 2022)把原始点的点到面残差放进迭代扩展卡尔曼滤波,和 IMU 紧耦合,地图用增量 k-d 树;KISS-ICP(Vizzo 等,RA-L 2023)用点到点 ICP,加上自适应距离阈值、恒速运动补偿和体素哈希地图,一套参数适配多种激光雷达。稠密建图:KinectFusion(Newcombe 等,ISMAR 2011)每帧深度图对"从当前模型光线投射出的深度和法向"做投影数据关联的点到面 ICP,在 GPU 上实时运行,模型是 TSDF 体素(12.2 节)。物体位姿精修:网络、PnP(11.4 节)或特征匹配给出粗位姿,再用点到面 ICP 对齐模型点云与深度点云,是 6D 位姿估计流程常见的最后一步。工具箱:Open3D(registration_icp、彩色 ICP、FPFH + RANSAC)、PCL(ICP、GICP、NDT)、small_gicp、libpointmatcher、TEASER++、KISS-ICP。传感器端:机械旋转式(Velodyne、Ouster)和固态(Livox)激光雷达,结构光或 ToF 深度相机(RealSense、Azure Kinect)。
这些系统都在回答同一个问题:怎么让局部、有噪声、有退化的对齐可靠?答案是几件事的组合:好的初值(IMU、里程计、恒速模型)、局部地图而不只是上一帧、对退化方向的检测、鲁棒核,以及最后把每个相对位姿作为一条边送进位姿图(Part IV)和回环检测,把累积的漂移收回来。
7常见误区
ICP 是局部方法:它只能收敛到离初值最近的局部极小。FIG 3 的收敛盆(绕 z 轴)只有大约 ±60° 宽,初始角度再大就会收敛到"头尾对调"的对齐,而且迭代过程光滑、RMSE 也在单调下降,看不出任何异常。机器人里的补救办法是好的初值(里程计、IMU、恒速模型、上一帧的位姿)、多起点或全局配准(特征匹配 + RANSAC)、以及用独立于 ICP 的指标检查结果(重叠率、内点比例、与里程计是否一致)。
最近邻匹配总会给每个源点一个目标点,哪怕那个源点在目标里根本没有对应物(另一半房间、路过的行人和车)。这些错误配对用平方距离放大,把解拉偏(FIG 3:"部分重叠 + 杂点"下保留 100% 时旋转误差十几度)。用修剪 ICP、距离阈值、鲁棒核,或先去掉动态物体(语义分割、多帧一致性)。注意修剪比例是对重叠率的假设:设得比真实重叠率高,坏点仍然混进来;设得太低,约束又不够。
FIG 5 里"恒等初值"的 ICP 在走廊里每一帧都收敛得很好:两条直线的重合度极高,RMSE 很小,位姿却完全错了。残差只度量"点离曲面有多远",不度量"沿着曲面滑了多远"。对称的物体(圆柱、球、有对称性的零件)、平坦的地面、长走廊、隧道、空旷的大厅都有这个问题。要检查 \(A=\sum J^{\top}J\) 的最小特征值(FIG 4),或者让另一个传感器(IMU、轮速、相机)提供这个方向上的信息。
没有 \(\det\) 修正的 Kabsch 在数据含噪声、近似平面或近似对称时会偶尔输出反射(FIG 2:镜像时 \(\det=-1\),残差看起来更小)。其它常犯的细节:单位(毫米和米混用,距离阈值差三个数量级;点到面的旋转与平移量纲不同,不做尺度的法方程病态);降采样过狠(体素大于薄结构,如电线、杆子,点云里直接消失,且体素边界会产生混叠);多对一(最近邻会让很多源点挤到同一个目标点上,这是边缘和稀疏处的典型现象,用双向检验或修剪缓解);法向量(PCA 法向在棱边会被抹平,噪声大时要增大 \(k\);FIG 1)。
RMSE 小,是因为同一批点被反复挪近;它里面混着采样间距、对应错误和模型误差,不是位姿误差的方差。把它直接当成位姿图边的权重,会让这些边过于自信,一两条带有偏差的激光边就能拖歪整条轨迹。至少要用 \(A/\sigma^2\)(并按经验放大),或者用 Censi 一类的方法估协方差,并且在检测到退化方向时把这个方向的信息置零,而不是让 \(A^{-1}\) 爆炸。
8小练习
9延伸阅读
- P. J. Besl & N. D. McKay, A Method for Registration of 3-D Shapes, IEEE TPAMI 14(2), 1992 — ICP 的原始论文,含单调收敛定理
- Y. Chen & G. Medioni, Object Modelling by Registration of Multiple Range Images, Image and Vision Computing 10(3), 1992 — 同年独立提出,使用点到面距离
- K. S. Arun, T. S. Huang & S. D. Blostein, Least-Squares Fitting of Two 3-D Point Sets, IEEE TPAMI 9(5), 1987; S. Umeyama, Least-Squares Estimation of Transformation Parameters Between Two Point Patterns, IEEE TPAMI 13(4), 1991 — 闭式解的 SVD 推导,以及带尺度、处理反射的版本
- B. K. P. Horn, Closed-Form Solution of Absolute Orientation Using Unit Quaternions, JOSA A 4(4), 1987 — 四元数版本的闭式解
- S. Rusinkiewicz & M. Levoy, Efficient Variants of the ICP Algorithm, 3DIM 2001 — ICP 各环节(采样、匹配、加权、剔除、误差度量)的系统比较
- A. Segal, D. Haehnel & S. Thrun, Generalized-ICP, RSS 2009 — 面到面的概率化 ICP
- F. Pomerleau, F. Colas & R. Siegwart, A Review of Point Cloud Registration Algorithms for Mobile Robotics, Foundations and Trends in Robotics 4(1), 2015 — 面向移动机器人的 ICP 变体综述
- N. Gelfand, L. Ikemoto, S. Rusinkiewicz & M. Levoy, Geometrically Stable Sampling for the ICP Algorithm, 3DIM 2003; J. Zhang, M. Kaess & S. Singh, On Degeneracy of Optimization-based State Estimation Problems, ICRA 2016 — 退化方向的特征值分析,及其在激光里程计中的应用
- J. Zhang & S. Singh, LOAM: Lidar Odometry and Mapping in Real-time, RSS 2014; I. Vizzo et al., KISS-ICP: In Defense of Point-to-Point ICP, IEEE RA-L 2023 — 两种激光里程计思路:特征 + 点到线/面,与调好的点到点
- R. A. Newcombe et al., KinectFusion: Real-Time Dense Surface Mapping and Tracking, ISMAR 2011 — 投影数据关联的点到面 ICP 与 TSDF 融合
- T. D. Barfoot, State Estimation for Robotics (Cambridge University Press, 2017) — 在李群框架下推导点云对齐,并讨论不确定性