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

【第23话:定位建图】SLAM后端优化方法详解

SLAM 后端优化方法详解

SLAM(Simultaneous Localization and Mapping)后端优化是SLAM系统中的关键环节,负责对前端输出的传感器数据进行全局一致性优化,消除累积误差。后端通常基于图优化框架(如g2o、GTSAM),将机器人的位姿和地图特征点表示为图中的节点,将传感器观测数据转换为边(约束),通过非线性最小二乘法(如Levenberg-Marquardt算法)最小化误差函数,得到最优的位姿和地图估计。

后端优化分为增量式和批量式。增量式优化(如iSAM2)适用于实时性要求高的场景,通过逐步更新图结构实现高效优化;批量式优化则对所有历史数据进行全局调整,精度更高但计算量较大。现代SLAM系统常采用因子图(Factor Graph)建模,结合鲁棒核函数(如Huber核)处理异常观测,并融合闭环检测(Loop Closure)以修正长期漂移。

后端优化的核心目标是通过概率推断(如最大后验估计,MAP)实现全局一致的地图与轨迹,其性能直接影响SLAM系统的鲁棒性和精度。

1. 后端优化核心目标

在SLAM(同时定位与建图)中,后端优化负责解决两个关键问题:

  • 全局一致性:消除里程计累积误差
  • 闭环校正:修正回环检测时的位姿漂移
    数学表达为最小化代价函数:
    min⁡x∑(i,j)∈Eρ(∥zij−hij(xi,xj)∥Σij2)\min_{\mathbf{x}} \sum_{(i,j)\in\mathcal{E}} \rho\left( \left\| \mathbf{z}_{ij} - h_{ij}(\mathbf{x}_i,\mathbf{x}_j) \right\|^2_{\Sigma_{ij}} \right)xmin(i,j)Eρ(zijhij(xi,xj)Σij2)
    其中:
  • x\mathbf{x}x为状态变量(位姿+地图点)
  • ρ\rhoρ为鲁棒核函数(如Huber)
  • Σij\Sigma_{ij}Σij为协方差矩阵

2. 主流优化方法
(1) 基于滤波的方法
  • 扩展卡尔曼滤波 (EKF)

    • 状态向量:xk=[xv,m1,⋯ ,mn]T\mathbf{x}_k = [\mathbf{x}_v, \mathbf{m}_1, \cdots, \mathbf{m}_n]^Txk=[xv,m1,,mn]T
    • 更新方程:
      x^k∣k−1=f(x^k−1,uk)Pk∣k−1=FkPk−1FkT+Qk \begin{aligned} \hat{\mathbf{x}}_{k|k-1} &= f(\hat{\mathbf{x}}_{k-1}, \mathbf{u}_k) \\ \mathbf{P}_{k|k-1} &= \mathbf{F}_k \mathbf{P}_{k-1} \mathbf{F}_k^T + \mathbf{Q}_k \end{aligned} x^kk1Pkk1=f(x^k1,uk)=FkPk1FkT+Qk
    • 缺点:计算复杂度O(n2)O(n^2)O(n2),线性化误差累积
  • 粒子滤波 (FastSLAM)

    • 使用Rao-Blackwellized粒子滤波
    • 每个粒子独立维护地图:
      p(x1:t,m∣z1:t,u1:t)=∑i=1Nwt(i)δx1:t(i)(x1:t)p(m∣x1:t(i),z1:t)p(\mathbf{x}_{1:t}, \mathbf{m} | \mathbf{z}_{1:t}, \mathbf{u}_{1:t}) = \sum_{i=1}^N w_t^{(i)} \delta_{\mathbf{x}_{1:t}^{(i)}} (\mathbf{x}_{1:t}) p(\mathbf{m} | \mathbf{x}_{1:t}^{(i)}, \mathbf{z}_{1:t})p(x1:t,mz1:t,u1:t)=i=1Nwt(i)δx1:t(i)(x1:t)p(mx1:t(i),z1:t)
(2) 基于图优化的方法
  • 因子图模型

    里程计约束
    闭环约束
    观测约束
    位姿x1
    位姿x2
    位姿x3
    路标m1
  • 优化流程

    1. 构建图:节点=位姿/路标,边=约束
    2. 线性化误差函数:eij≈eij0+JijΔx\mathbf{e}_{ij} \approx \mathbf{e}_{ij}^0 + \mathbf{J}_{ij} \Delta\mathbf{x}eijeij0+JijΔx
    3. 求解正规方程:HΔx=−b\mathbf{H} \Delta\mathbf{x} = -\mathbf{b}HΔx=b
      • H=∑JTΣ−1J\mathbf{H} = \sum \mathbf{J}^T \Sigma^{-1} \mathbf{J}H=JTΣ1J
      • b=∑JTΣ−1e\mathbf{b} = \sum \mathbf{J}^T \Sigma^{-1} \mathbf{e}b=JTΣ1e
  • 关键算法

    • Gauss-NewtonΔx=−(JTJ)−1JTe\Delta\mathbf{x} = -(\mathbf{J}^T\mathbf{J})^{-1}\mathbf{J}^T\mathbf{e}Δx=(JTJ)1JTe
    • Levenberg-Marquardt(JTJ+λI)Δx=−JTe(\mathbf{J}^T\mathbf{J} + \lambda \mathbf{I}) \Delta\mathbf{x} = -\mathbf{J}^T\mathbf{e}(JTJ+λI)Δx=JTe
(3) 增量式优化
  • iSAM2 (Incremental Smoothing and Mapping)
    • 使用贝叶斯树维护因子图
    • 关键步骤:
      def update(isam, new_factors):# 增量更新isam.update(new_factors)# 部分重新线性化isam.relinearize(affected_vars)# 优化result = isam.optimize()
      
    • 优势:实时性高,复杂度O(log⁡n)O(\log n)O(logn)

3. 关键技术挑战
  • 稀疏性利用:使用Schur补加速求解
    [HppHpmHmpHmm][ΔxpΔxm]=[bpbm]\begin{bmatrix} \mathbf{H}_{pp} & \mathbf{H}_{pm} \\ \mathbf{H}_{mp} & \mathbf{H}_{mm} \end{bmatrix} \begin{bmatrix} \Delta\mathbf{x}_p \\ \Delta\mathbf{x}_m \end{bmatrix} = \begin{bmatrix} \mathbf{b}_p \\ \mathbf{b}_m \end{bmatrix}[HppHmpHpmHmm][ΔxpΔxm]=[bpbm]
    通过消元路标点:
    (Hpp−HpmHmm−1Hmp)Δxp=bp−HpmHmm−1bm(\mathbf{H}_{pp} - \mathbf{H}_{pm}\mathbf{H}_{mm}^{-1}\mathbf{H}_{mp}) \Delta\mathbf{x}_p = \mathbf{b}_p - \mathbf{H}_{pm}\mathbf{H}_{mm}^{-1}\mathbf{b}_m(HppHpmHmm1Hmp)Δxp=bpHpmHmm1bm

  • 鲁棒性处理

    • 使用Huber核函数:
      ρ(s)={sif s≤δ2δs−δotherwise \rho(s) = \begin{cases} s & \text{if } s \leq \delta \\ 2\sqrt{\delta s} - \delta & \text{otherwise} \end{cases} ρ(s)={s2δsδif sδotherwise
    • RANSAC预处理异常值
  • 大规模场景优化

    • 采用分级优化:局部子图→全局优化
    • 使用位姿图(Pose Graph)压缩:
      # 创建位姿图
      pose_graph = PoseGraph()
      # 添加节点(位姿)
      node1 = pose_graph.add_node(pose1)
      # 添加约束(相对位姿变换)
      pose_graph.add_edge(node1, node2, relative_pose, covariance)
      

4. 性能对比
方法计算复杂度全局一致性实时性实现难度
EKFO(n2)O(n^2)O(n2)
粒子滤波O(N⋅n)O(N \cdot n)O(Nn)
图优化(batch)O(n1.5)O(n^{1.5})O(n1.5)
iSAM2O(log⁡n)O(\log n)O(logn)
5. 未来发展方向
  1. 概率推理新框架:结合变分推断
  2. 多传感器融合:IMU+视觉+激光的联合优化
  3. 深度学习辅助:使用GNN学习约束权重
  4. 分布式优化:多机器人协同SLAM

后端优化是SLAM精度与鲁棒性的核心保障,需根据应用场景在计算效率与精度间权衡设计。


文章转载自:

http://D94LNfOn.ydrmL.cn
http://MC9pisUq.ydrmL.cn
http://RswzzK0H.ydrmL.cn
http://q5DtjPhU.ydrmL.cn
http://zmfpeJnC.ydrmL.cn
http://ZkE9QctC.ydrmL.cn
http://fMWABvDh.ydrmL.cn
http://Ld7watZX.ydrmL.cn
http://GJyowBjn.ydrmL.cn
http://8mamf7Fw.ydrmL.cn
http://EymZYyuJ.ydrmL.cn
http://AfEWlUNI.ydrmL.cn
http://9ZLHYDjJ.ydrmL.cn
http://fNhw5Lpt.ydrmL.cn
http://9s3n7Vf6.ydrmL.cn
http://SNSqejlx.ydrmL.cn
http://B0MASGqK.ydrmL.cn
http://DeFtnhXa.ydrmL.cn
http://siTuzZiL.ydrmL.cn
http://T70NHcRd.ydrmL.cn
http://VHSIAYto.ydrmL.cn
http://BeL1uCmQ.ydrmL.cn
http://x0ilR6Y5.ydrmL.cn
http://EWKrAdXT.ydrmL.cn
http://32ss5GOE.ydrmL.cn
http://6S9JLSUT.ydrmL.cn
http://DsUWDLD8.ydrmL.cn
http://AVOyq9Wk.ydrmL.cn
http://bGfBEocu.ydrmL.cn
http://qAPu9A1D.ydrmL.cn
http://www.dtcms.com/a/376216.html

相关文章:

  • 异步处理(前端面试)
  • ArKTS登录界面开发
  • 用于树莓派的sd卡格式是什么适合,它现在是exFAT,需要是FAT32吗
  • 使用Qoder 改造前端UI/UE升级改造实践:从传统界面到现代化体验的华丽蜕变
  • HTML HTML基础(4)
  • 【Matlab】-- 机器学习项目 - 基于XGBoost算法的数据回归预测
  • 在企业中风控规则引擎的解决方案是什么?
  • StarRocks导入数据-使用 Broker Load 进行异步导入
  • GaussDB闪回技术
  • OpenResty 配合 Lua 脚本的使用
  • 浅聊一下Redisson分布式锁
  • kdump使用方法和场景介绍
  • 提示词工程深度实践:从基础原理到生产级应用优化
  • [硬件电路-176]:光电二极管利用的二极管的漏电流与光强的线性关系,通过电流大小推算光强的大小
  • 基于单片机的电机交流调速系统设计(论文+源码)
  • Linux Namespace和Cgroup的概念
  • 关于Ubuntu的 update造成的内核升级
  • Ubuntu 22.04 安装 ROS 2 Humble 笔记
  • 基于数据挖掘的单纯冠心病与冠心病合并糖尿病的证治规律对比研究
  • LeetCode每日一题,20250910
  • Linux防火墙firewalld
  • JNI初识
  • Linux 系统中高性能 I/O 事件通知机制的核心——`epoll_create` 系统调用
  • UNIX与Linux:五大核心差异解析
  • 大模型评测工程师学习清单与计划
  • 5.后台运行设置和包设计与实现
  • 深度学习入门:打好数学与机器学习基础,迈向AI进阶之路
  • 【AOSP 的分层设计理念与命名规范】
  • Docker 清理完整指南:释放磁盘空间的最佳实践
  • 进程状态(Linux)