目录

激光SLAM理论与实践-笔记-激光的后端图优化理论-第四期

激光SLAM理论与实践 笔记 - 激光的后端图优化理论 第四期

– 第六章 后端图优化理论

6.1 图优化理论

课程介绍:

  • 这期开始不讲滤波器的内容了(gmapping),只讲图优化(karto、cartographer)。
  • 但是滤波器在视觉slam之中的应用还是非常广泛的。
  • 三种slam方向:

滤波 估计当前位姿,**平滑(图优化)**估计过去位姿,**预测(暂未接触)**估计未来位姿;

– 6.1.1 Graph-based SLAM

https://i-blog.csdnimg.cn/blog_migrate/e998a6e9e78876b1585afecef33ff70e.png

  • 2Dslam问题会比较简单,因为只是欧式空间的问题,不用考虑李代数等问题。
  • 激光和视觉的差异:
    • 激光一般只进行pose位姿优化(精度较高);节点表示机器人位姿;
    • 视觉精度比较差,除了pose还有其他的;
  • 回环检测:走了一圈之后,不同的两个节点1、5到了同样的位置,产生一个回环,可以根据边(约束)计算相对空间变换;即 https://i-blog.csdnimg.cn/blog_migrate/2da9ee1234015a520bb56006462ecfa9.png 节点1和5相互满足两条约束。
  • 求解目标:由于里程计的误差,导致误差不为零,上述两条边误差不为零,所以需要 使误差尽可能趋向零 ;这个 是图优化目标
  • 抽象问题:求解两个节点的位姿变换过程,由于旋转矩阵涉及sin和cos计算,实际上是非线性计算,即 图优化slam 依然是可以抽象成,求解 非线性最小二乘 问题;
  • 前端和后端的差别:
    • 前端:节点和节点之间构建边(约束)、节点连线过程,以及之前的过程都是前端问题;
    • 后端:节点连成边后,构建了图后,让误差最小化的就是后端优化;优化是预测和观测问题;

– 6.1.2 非线性最小二乘

https://i-blog.csdnimg.cn/blog_migrate/824ad7547dc8c99438c51cabd7b8da70.png

  • 状态方程f(x)可以认为是一个预测过程;
  • x是 预测值
  • 状态向量是机器人位姿robot pose;
  • z表示的是 观测值 ,即传感器值;由于噪声,f(x)和z不相等;
  • 由于数学算法的局限,需要把非线性问题,转化成一个线性的问题求解;

https://i-blog.csdnimg.cn/blog_migrate/9ddfb7e7af0800767898b01d14e99c79.png

  • 勘误 :f2(x) = z’2 z2
  • 目标:找到最优的x,让 观测预测 的误差最小化;

https://i-blog.csdnimg.cn/blog_migrate/884fec42cb187c0d4a378940a887d4a9.png

  • 人造的 传感器 通常服从 高斯分布 (因为人造的模块化、相互独立等因素)**。**自然界造物一般服从贝塔分布或其他;

https://i-blog.csdnimg.cn/blog_migrate/72b7347e677f461102cf1e8c82e5d430.png

  • 直接想法的解释:极值点的导数必定零;
  • 非线性问题:需要线性化才能求解,使用 泰勒展开 方法;

https://i-blog.csdnimg.cn/blog_migrate/8670ba17941399a2cecee4f1e9c95787.png

  • 误差函数有个一阶的近似,高阶的余项可忽略
  • 化简过程:

https://i-blog.csdnimg.cn/blog_migrate/f359aa9c4217a65de2783aeb32a0e9b9.png

https://i-blog.csdnimg.cn/blog_migrate/db7404022e51f1e01273ed34f22b7ede.png

https://i-blog.csdnimg.cn/blog_migrate/57678eec1d6c500bef46170447dfd430.png

  • 非线性最小二乘求解过程:

https://i-blog.csdnimg.cn/blog_migrate/b84eb8096471ac85eb1dc987994e28c5.png

  • Ax = b,还是一个适定方程,刚好有一个解。
  • 不断迭代求解到最后就是一个机器人位姿,graph-based位姿图优化问题;

– 6.1.3 非线性最小二乘在slam中的应用

  • 图的构建

https://i-blog.csdnimg.cn/blog_migrate/71e543e1763fc51ae9a567c9d3f3bf89.png

  • 两者特点
    • 里程计:时间上是 连续 的,连续的 机器人位姿 才可以构建为
    • 回环检测:时间上是 不连续 的;不同时间的节点可以通过边(约束)匹配构建成图;
  • 误差函数

https://i-blog.csdnimg.cn/blog_migrate/08e16d4b689baf650744a40eb523cfb8.png

  • xi和xj之间的相对位姿(节点j在节点i的坐标,即 xi逆*xj )通过帧间匹配算法求得(ICP、NDT等);
  • 观测值Zij 和**预测值Zij’**的相对坐标计算, 观测值从传感器得预测值从里程计推算
  • 误差函数 定义:即两个位姿变换关系,**Zij的逆*Zij’**矩阵。
  • 实际上上述问题都是第一节课提到的 坐标位姿变换关系 问题,这就是所谓的误差函数。

https://i-blog.csdnimg.cn/blog_migrate/45783702aa6b28c5e20670f9f47226e8.png

  • 误差函数的矩阵形式,实际就是上一段 观测值和预测值 推导的内容;
  • 这就是为什么说2Dslam问题是 机器人位姿图 问题,抽象。
  • 接下来的问题,实际上就是非线性函数的线性化问题;
  • 误差函数的线性化

https://i-blog.csdnimg.cn/blog_migrate/240290eac3a79e159b9aa1ca4ee81853.png

  • 上图的是一个jacobian矩阵,属于稀疏的;

https://i-blog.csdnimg.cn/blog_migrate/cf778005e134f7b5c8606c22667e4b6b.png

  • 因为jacobian是稀疏的向量,所以H矩阵(黑森矩阵)也是稀疏的;

https://i-blog.csdnimg.cn/blog_migrate/fac6a8d60cf683efe94d47ba1ec46951.png

  • 最终也是一个稀疏矩阵;
  • H(黑森)矩阵是一个稀疏矩阵,就可以进行快速的求解;
  • 已知H、b,则由(H▽X = b),可求解▽X
  • 但是还需要解决坐标系的转化问题 ,需要增加固定的坐标系给xi、xj,如下图:

https://i-blog.csdnimg.cn/blog_migrate/a447b8ab4c50a8be15d754241d8b9a89.png

  • 设第一帧位姿为 世界坐标系原点 ,即增加固定坐标系的约束,后续求解都在世界坐标系。△X1=0;如下图

https://i-blog.csdnimg.cn/blog_migrate/a771dea2916ab9d1a69fef5fbca6b362.png

  • 构建线性系统
  • 以上所有过程已经推导了后端图优化必备信息,可以开始 构建线性系统

https://i-blog.csdnimg.cn/blog_migrate/e2ddb55f66ca6c048f04d094f9df1f02.png

  • 上图构建了线性的系统,另外这是我们作业的内容。

https://i-blog.csdnimg.cn/blog_migrate/9cfe4a55b21fd7975528bbfbe55a09b5.png

  • 上图就是 图优化的求解根本流程
  • 即:
    • 1、构建线性系统;
    • 2、求解线性系统;
    • 3、迭代求解,直到收敛;
  • 所以调用库的时候,只要提供 误差函数 就好了,因为流程都是一致的。

6.2 cartographer代码讲解

在整体的原有框架中代码主要分为两个部分: cartographercartographer_ros

  • cartographer 主要负责处理来自雷达、IMU和里程计的数据并基于这些数据进行地图的构建,是cartographer理论的底层实现。建图过程主要分为前端Local累加式建图与后端Global位姿图构建与回环匹配。
  • cartographer_ros 则基于ros的通信机制获取传感器的数据并将它们转换成cartographer中定义的格式传递给cartographer处理,与此同时也将cartographer的处理结果发布用于显示或保存,在低层算法和机器人操作系统ROS之间提供了交互的接口。

https://i-blog.csdnimg.cn/blog_migrate/2a4c8ff411025e7804b0a83f4cdc6e0c.png

其中输入项中 Range Data的激光数据为必须其余均为非必须

整体的建图可分为Local前端部分和Global后端回环部分。

特点:

  • 基于图优化的slam算法
  • 比较完善的匹配系统,包含建图和定位;
  • 目前效果最好的开源激光slam系统;
  • 有人专门维护,不断更新增加新特性,从没停止;

2Dslam代码。(源码用了大量C++高级特性)

– 6.2.1 代码查看流程:

流程分析:

1、从入口global_trajectory_builder.cc(mapping->internal)进入。

– 6.2.2 具体代码分析

  • 前端匹配

1、global_trajectory_builder.cc

https://i-blog.csdnimg.cn/blog_migrate/7657f193e983817477f200c809d2c294.png

子图匹配,帧间匹配,前端局部子图匹配

CSM暴力求解:

https://i-blog.csdnimg.cn/blog_migrate/1753768001f30e63d4218374247a14a8.png

打分:似然场和TSDF评价体系,本质相似。 https://i-blog.csdnimg.cn/blog_migrate/46b784a313766fd546017d20b66ff3fc.png

  • 外插器实现:保存一段时间的位姿用来计算线速度和角速度
  • CSM实现:
  • 后端优化

1、入口为 pose_graph_2d 文件,AddNode函数;

  • 增加 节点 和计算 约束(边)
  • 增加队列即可。

https://i-blog.csdnimg.cn/blog_migrate/0051719d33b0042ddd07cdad31d50e8c.png

2、AddWorkItem函数:

  • 判断work队列;

https://i-blog.csdnimg.cn/blog_migrate/e23e03f2d4e1ea0ede8f250bade10dee.png

3、DrainWorkQueue函数才是调用队列

work_item实际上就是约束。

https://i-blog.csdnimg.cn/blog_migrate/205c6f579359746ee284173f4c515c36.png

回环检测及回环优化

  • 多线程:AddWorkItem,增加工作队列
  • 回环成功:说明需要进行优化
    • 回环–优化–回环–优化……
  • FCSM:fast correlative scan match 快速关联扫描匹配
  • 地图的层数depth?
  • 分支定界:求最优解