当前位置: 首页 > news >正文

【第19话:定位建图】SLAM点云配准之3D-3D ICP(Iterative Closest Point)方法详解

SLAM点云配准:ICP方法详解

在SLAM(同时定位与地图构建)中,点云配准是核心任务,用于对齐不同时刻采集的点云数据,实现精确的位姿估计和地图更新。ICP(Iterative Closest Point)方法是一种经典的点云配准算法,它通过迭代优化来计算两个点云之间的最优刚体变换(旋转和平移)。下面我将详细解释ICP方法,确保内容清晰可靠,并逐步展开。
在这里插入图片描述

1. ICP方法概述

ICP算法的核心思想是通过迭代最小化点云之间的距离误差,来求解最优变换参数。给定源点云P={pi}P = \{ \mathbf{p}_i \}P={pi}和目标点云Q={qj}Q = \{ \mathbf{q}_j \}Q={qj},ICP的目标是找到一个刚体变换(旋转矩阵R\mathbf{R}R和平移向量t\mathbf{t}t),使变换后的源点云与目标点云对齐:
min⁡R,t∑i∥qi−(Rpi+t)∥2 \min_{\mathbf{R}, \mathbf{t}} \sum_{i} \| \mathbf{q}_i - (\mathbf{R} \mathbf{p}_i + \mathbf{t}) \|^2 R,tminiqi(Rpi+t)2
其中R\mathbf{R}R是旋转矩阵(满足R⊤R=I\mathbf{R}^\top \mathbf{R} = \mathbf{I}RR=I),t\mathbf{t}t是平移向量。ICP通过以下步骤迭代求解。

2. ICP算法步骤

ICP是一个迭代过程,包含四个主要步骤:

  • 步骤1:找到最近点对应关系
    对于源点云PPP中的每个点pi\mathbf{p}_ipi,在目标点云QQQ中搜索其最近邻点qi\mathbf{q}_iqi
    qi=arg⁡min⁡q∈Q∥q−pi∥ \mathbf{q}_i = \arg\min_{\mathbf{q} \in Q} \| \mathbf{q} - \mathbf{p}_i \| qi=argqQminqpi
    这通常使用KD树等数据结构加速搜索。

  • 步骤2:计算最优变换
    基于对应点对(pi,qi)(\mathbf{p}_i, \mathbf{q}_i)(pi,qi),计算最小化距离误差的R\mathbf{R}Rt\mathbf{t}t。目标函数为:
    E(R,t)=∑i∥qi−(Rpi+t)∥2 E(\mathbf{R}, \mathbf{t}) = \sum_{i} \| \mathbf{q}_i - (\mathbf{R} \mathbf{p}_i + \mathbf{t}) \|^2 E(R,t)=iqi(Rpi+t)2
    通过以下子步骤求解:

    • 计算点云质心:
      pˉ=1N∑ipi,qˉ=1N∑iqi \bar{\mathbf{p}} = \frac{1}{N} \sum_{i} \mathbf{p}_i, \quad \bar{\mathbf{q}} = \frac{1}{N} \sum_{i} \mathbf{q}_i pˉ=N1ipi,qˉ=N1iqi
    • 中心化点云:
      pi′=pi−pˉ,qi′=qi−qˉ \mathbf{p}_i' = \mathbf{p}_i - \bar{\mathbf{p}}, \quad \mathbf{q}_i' = \mathbf{q}_i - \bar{\mathbf{q}} pi=pipˉ,qi=qiqˉ
    • 构建协方差矩阵:
      H=∑iqi′pi′⊤ \mathbf{H} = \sum_{i} \mathbf{q}_i' \mathbf{p}_i'^\top H=iqipi′⊤
    • 使用SVD分解H=UΣV⊤\mathbf{H} = \mathbf{U} \mathbf{\Sigma} \mathbf{V}^\topH=V,最优旋转和平移为:
      R=VU⊤,t=qˉ−Rpˉ \mathbf{R} = \mathbf{V} \mathbf{U}^\top, \quad \mathbf{t} = \bar{\mathbf{q}} - \mathbf{R} \bar{\mathbf{p}} R=VU,t=qˉRpˉ
      注意:需确保det⁡(R)=1\det(\mathbf{R}) = 1det(R)=1,否则调整符号。
  • 步骤3:应用变换
    使用计算出的R\mathbf{R}Rt\mathbf{t}t更新源点云:
    Pnew={Rpi+t∣pi∈P} P_{\text{new}} = \{ \mathbf{R} \mathbf{p}_i + \mathbf{t} \mid \mathbf{p}_i \in P \} Pnew={Rpi+tpiP}

  • 步骤4:检查收敛
    计算平均误差:
    ϵ=1N∑i∥qi−(Rpi+t)∥ \epsilon = \frac{1}{N} \sum_{i} \| \mathbf{q}_i - (\mathbf{R} \mathbf{p}_i + \mathbf{t}) \| ϵ=N1iqi(Rpi+t)
    如果ϵ<τ\epsilon < \tauϵ<τ(预设阈值)或达到最大迭代次数,则停止;否则,返回步骤1。

整个算法流程可总结为以下伪代码:

def icp(source, target, max_iter=100, tol=1e-6):# 初始化变换R = np.eye(3)  # 单位旋转矩阵t = np.zeros(3)  # 零平移向量error = float('inf')for i in range(max_iter):# 找到最近点对应correspondences = find_nearest_neighbors(source, target)# 计算最优R和tR_new, t_new = compute_optimal_transform(correspondences)# 应用变换source = apply_transform(source, R_new, t_new)# 更新总变换R = R_new @ Rt = R_new @ t + t_new# 计算新误差new_error = compute_error(correspondences, R_new, t_new)# 检查收敛if abs(new_error - error) < tol:breakerror = new_errorreturn R, t
3. ICP方法的数学推导

ICP的核心是优化问题,其数学基础基于最小二乘。以下简化推导:

  • 目标函数
    E(R,t)=∑i∥qi−Rpi−t∥2 E(\mathbf{R}, \mathbf{t}) = \sum_{i} \| \mathbf{q}_i - \mathbf{R} \mathbf{p}_i - \mathbf{t} \|^2 E(R,t)=iqiRpit2

  • 平移优化
    固定R\mathbf{R}R,对t\mathbf{t}t求导:
    ∂E∂t=−2∑i(qi−Rpi−t)=0 \frac{\partial E}{\partial \mathbf{t}} = -2 \sum_{i} (\mathbf{q}_i - \mathbf{R} \mathbf{p}_i - \mathbf{t}) = 0 tE=2i(qiRpit)=0
    解得:
    t=qˉ−Rpˉ \mathbf{t} = \bar{\mathbf{q}} - \mathbf{R} \bar{\mathbf{p}} t=qˉRpˉ

  • 旋转优化
    代入t\mathbf{t}t后,目标函数简化为:
    E(R)=∑i∥(qi−qˉ)−R(pi−pˉ)∥2=∑i∥qi′−Rpi′∥2 E(\mathbf{R}) = \sum_{i} \| (\mathbf{q}_i - \bar{\mathbf{q}}) - \mathbf{R} (\mathbf{p}_i - \bar{\mathbf{p}}) \|^2 = \sum_{i} \| \mathbf{q}_i' - \mathbf{R} \mathbf{p}_i' \|^2 E(R)=i(qiqˉ)R(pipˉ)2=iqiRpi2
    最大化∑iqi′⊤Rpi′\sum_{i} \mathbf{q}_i'^\top \mathbf{R} \mathbf{p}_i'iqi′⊤Rpi,等价于最大化trace(R⊤H)\text{trace}(\mathbf{R}^\top \mathbf{H})trace(RH)。通过SVD分解H=UΣV⊤\mathbf{H} = \mathbf{U} \mathbf{\Sigma} \mathbf{V}^\topH=V,最优解为R=VU⊤\mathbf{R} = \mathbf{V} \mathbf{U}^\topR=VU

4. ICP方法的优缺点
  • 优点

    • 简单高效,计算复杂度为O(Nlog⁡N)O(N \log N)O(NlogN)(使用KD树加速)。
    • 适用于刚性变换(旋转和平移),在初始位置较好时收敛快。
    • 广泛集成于SLAM框架(如LOAM、Cartographer),用于局部点云对齐。
  • 缺点

    • 对初始位置敏感:如果初始偏差大,可能陷入局部最优。
    • 假设点云完全重叠:在部分重叠或噪声大时性能下降。
    • 仅处理刚体变换:无法处理非刚性变形。
5. 在SLAM中的应用

在SLAM中,ICP常用于:

  • 帧到帧配准:实时对齐连续点云,估计机器人位姿变化。
  • 局部地图优化:将新点云与局部子地图对齐,减少累积误差。
  • 回环检测:对齐历史点云以检测回环,优化全局地图。
    为提升鲁棒性,常结合其他技术,如点云滤波(去除噪声)或特征匹配(如FPFH)来初始化ICP。
总结

ICP是一种基础且强大的点云配准方法,通过迭代优化最小化点间距离,实现高效配准。尽管有局限性,但其简单性和效率使其成为SLAM中不可或缺的组件。理解ICP的原理和实现,有助于深入掌握SLAM的点云处理流程。


文章转载自:

http://Ilti91pr.httpm.cn
http://WZPw3hhB.httpm.cn
http://a4UZd1wa.httpm.cn
http://O7gTVXCl.httpm.cn
http://3hhZCQXf.httpm.cn
http://gGb76vVC.httpm.cn
http://GmdliED8.httpm.cn
http://yRdhhyvH.httpm.cn
http://Ef5krShc.httpm.cn
http://Ub7OTNkR.httpm.cn
http://BycNFxMg.httpm.cn
http://Lq8dowh0.httpm.cn
http://aZ3RWFug.httpm.cn
http://VD2zvjTP.httpm.cn
http://FLoB7t8F.httpm.cn
http://wv9ylFh0.httpm.cn
http://xNNh10Cm.httpm.cn
http://e4pS2yoA.httpm.cn
http://91aEBjh6.httpm.cn
http://q7Q2nLf8.httpm.cn
http://cQTdp3B5.httpm.cn
http://S4mu7aAy.httpm.cn
http://d2W44BVx.httpm.cn
http://YeuBHI3B.httpm.cn
http://tjAMd4eR.httpm.cn
http://gwZKu92V.httpm.cn
http://EoKC9rPe.httpm.cn
http://TwrlyFGt.httpm.cn
http://YHjQ6JVz.httpm.cn
http://NeFHYy38.httpm.cn
http://www.dtcms.com/a/376277.html

相关文章:

  • 在 RuoYi 中接入 3D「园区驾驶舱」:Vue2 + Three.js + Nginx
  • tp5的tbmember表闭包查询 openid=‘abc‘ 并且(wx_unionid=null或者wx_unionid=‘‘)
  • PPT转化成PDF脚本
  • 基于 Dockerfile 构建镜像
  • Linux学习记录--消息队列
  • leetcode算法刷题的第三十一天
  • Linux驱动开发(2)进一步理解驱动
  • Linux驱动开发笔记(十)——中断
  • 推荐一款智能三防手机:IP68+天玑6300+PoC对讲+夜视
  • 栈:逆波兰表达式求解
  • nginx中ssl证书的获取与配置
  • 云平台得大模型使用以及调用
  • 手写简单的int类型顺序表
  • Spring Boot 深入剖析:BootstrapRegistry 与 BeanDefinitionRegistry 的对比
  • [rStar] 解决方案节点 | `BaseNode` | `MCTSNode`
  • 鸿蒙:@Builder 和 @BuilderParam正确使用方法
  • 美图云修-一站式AI修图软件
  • 从齿轮到智能:机器人如何重塑我们的世界【科普类】
  • F12中返回的id里preview和response内容不一致的问题
  • 【CSS 3D 交互】实现精美翻牌效果:从原理到实战
  • vue二次封装ant-design-vue的table,识别columns中的自定义插槽
  • vue方法汇总
  • GPU硬件架构和配置的理解
  • C++类和对象初识
  • 笔记:乐鑫 (Espressif) 的生态策略与开发者悖论
  • SELinux策略:域转换与类型继承
  • 【VLMs篇】06:Cosmos-Reason1:从物理常识到具身推理
  • 图漾相机 FM851-E2 相关资料
  • 资产管理什么软件好
  • npm 安装命令中关于 @ 的讲解,如:npm install @vue-office/docx vue-demi