激光SLAM从理论到实践学习——第四节(激光SLAM的前端配准方法)

11 篇文章 1 订阅

激光的前端配准算法(帧间匹配算法)

  • 前端配准在视觉内叫做Tracking或者帧间匹配,对激光SLAM是有非常大的影响的
  • 帧间匹配不一定说的是前后两帧进行匹配,也可以是任意帧之间进匹配
  • 是一个Map—>Scan的过程,一个Scan和一个Map去匹配的过程
  • 常用的方法有下面四种
    • ICP匹配方法(对上节ICP算法的证明)
    • PL-ICP匹配方法(与ICP算法相似,只是说误差是之间的)
    • 基于优化的匹配方法(Hector和cartographer两种算法是基于优化的方法)
    • 相关匹配方法及分支定界加速(CSM算法)

ICP匹配方法

  • ICP方法的目的:就是两帧3D点云的匹配,求解一个R和t使得下列式(误差)最小。

    在这里插入图片描述

  • 已知对应点的求解方法

    就是先求一个平均点,每一个点云都求一个平均点,然后对任何一个点云进行平移操作,把它移到以P点为圆心的地方,然后构造一个矩阵W,然后对这个矩阵进行SVD分解,然后得到ICP的解R与t

    在这里插入图片描述

    下面对ICP的解 (R与t)进行证明
    在这里插入图片描述

    对加号左边与加号右边分别取极小值,所以加号右边=0时,即可得t=ux-Rup
    在这里插入图片描述

    现在来求R,现在加号左边是这样的式子

    在这里插入图片描述

    我们知道(红色字)

    在这里插入图片描述

    所以可以将加号左边写成

    在这里插入图片描述

    把两式展开

    在这里插入图片描述

    R的转置* R是=I 一个常数,a²那项也是常数,所以最后留下

    在这里插入图片描述

    所以最后就是

在这里插入图片描述

​ 所以要求的就是上面这个式子的最小值,也就是求下面式子的最大值,然后得R

在这里插入图片描述
在这里插入图片描述

  • 未知对应点的求解方法

    上节已经推理
    在这里插入图片描述

ICP实现过程

也就是求一个R和t,使得两个点云间的距离最短(下式(误差)最小),求解下式
在这里插入图片描述

t和R的求解过程忽略,得到R和t的解

在这里插入图片描述

然后就可以计算得两个点云间的最短距离(使得(误差)最小)

PL-ICP方法(已有开源代码—indigo下的CSM)

  • 上节ICP其实别名是PP-ICP,Point-to-Point ,点到点距离的ICP匹配方法

  • PL-ICP是Point-to-Line,点到线距离的ICP匹配方法
    在这里插入图片描述

  • 他的算法流程(和PP-ICP没什么区别,就是误差形式不同,到后面也是求R和t)
    在这里插入图片描述

基于优化的匹配方法(基于梯度,HectorSLAM是纯梯度优化方法、Cartogerepher用的是CSM+梯度优化)

  • 基于优化的匹配方法实际上就是基于梯度的方法

    在这里插入图片描述

    • 示意图:其实就是求极值,按照梯度下降方向一步一步求极值

      在这里插入图片描述

    • 数学描述:T表示我们要求解的机器人的位姿,Si(T)表示把激光数据用位姿T进行转换,也就是说把激光数据(Pix、Piy)用一个T转换到世界坐标系下(地图坐标系下)得到一个二维的坐标(x,y),i表示第i个激光束。

      M(x)表示得到坐标x的地图占用概率激光数据与地图最大匹配程度),激光数据与地图匹配程度最高是1,M(x)表示最大匹配程度,那么也就是1-minM(x),所以有

      在这里插入图片描述

      这个M(x)一般会是个似然场,就是一个似然得分,目标函数就定义成如上图那样。所以我们只需要求得一个T,使得M(x)最大。

      M(Si(t))表示的是我们把每个激光束都统一到我们的世界坐标系下,然后求它占用的概率(与地图的最大匹配程度)越大代表激光与地图重合程度越好,机器人的位姿也就越准确。

      目标函数E(T)这个式子他是非线性的,因为我们的旋转矩阵T,要求它的梯度,但因为地图是栅格化的也就是离散的,无法进行求解梯度,所以只能对地图进行插值。

      求解这个式子还有一个前提就是需要知道梯度,所以他里面肯定是包含一个梯度项的,那为了求解这个梯度项,我们就必须对地图进行插值,那怎么对地图进行插值?这就是主要要讲的内容

    • 基于优化方法的求解

      目标函数依然是E(T),设pi=(pix,piy)表示第i个激光点的坐标Si(T)表示将激光点的坐标转换到世界坐标,M(Si(t))是个非线性函数,对其进行一节泰勒展开,转换成线性函数E(T+△T),下图中▽的意思是对△T进行求偏导,M(Si(T))是个常数项。得到线性函数E(T+△T),对于线性系统,求其对△T的导数,并令其等于0得到下式

      在这里插入图片描述

      然后求解上式即可得到△T,令𝑇=𝑇+Δ𝑇,不断进行迭代即可

      在这里插入图片描述

      求解过程:(用符号去代替某些式子就可简化求解)

      在这里插入图片描述

      在这里插入图片描述

      ▽M(Si(T))中的Si(T)可以看作是地图中的一个坐标,然后▽M(Si(T))就表示对地图上的这个坐标求梯度,要求它的梯度,但因为地图是栅格化的也就是离散的,无法进行求解梯度,所以只能对地图进行插值。

    • 地图双线性插值(X,Y两个方向进行插值,是一维线性插值的推广)

      在这里插入图片描述

      • 拉格朗日插值法

        插值的定义:使得n次多项式在每个插值点都成立,那么称Ln(x)为f(x)的插值多项式

        • 一维线性插值

        在这里插入图片描述

        我们想求解这个插值方法的话,只要构造一个基函数li(xk)满足他的条件即可。

        在这里插入图片描述

        基函数求出来了,那么插值方法也就解出来了。

        • 双线性插值(二维)

          和一维差不多,我们有四个点就构造四个基函数就行。

          在这里插入图片描述

          在这里插入图片描述

        然后对应之前说的▽M(Si(T))中的Si(T)可以看作是地图中的一个坐标,然后▽M(Si(T))就表示对地图上的这个坐标求梯度,然后现在▽M(Si(T))也求解出来了,△T的所有项都已知了在这里插入图片描述

        然后之前的方程也就解了,然后令𝑇=𝑇+Δ𝑇,不断进行迭代即可。

简化实现过程:

令目标函数(地图占用概率激光数据与地图最大匹配程度))

在这里插入图片描述

目标函数是E(T),设pi=(pix,piy)表示第i个激光点的坐标Si(T)表示将激光点的坐标转换到世界坐标M(Si(t))表示的是我们把每个激光束都统一到我们的世界坐标系下,然后求它占用的概率(与地图的最大匹配程度)越大代表激光与地图重合程度越好,机器人的位姿也就越准确。 M(Si(t))是个非线性函数,对其进行一阶泰勒展开,转换成线性函数E(T+△T)

在这里插入图片描述

对于线性系统,对T求偏导等于0,就得到了最大匹配程度。求其对△T的导数,并令其等于0得到下式

在这里插入图片描述

▽M(Si(T)) 表示的是对地图上的这个坐标求梯度,但地图是栅格化的也就是离散的,所以无法求梯度,只能对地图进行插值(方法有一维线性插值和双线性插值),求出插值函数之后就可以求梯度,▽M(Si(T)) 这个式子也就已知了。

插值之后即可对上图式子求解(所以位置量全部已知了)得到△T,令𝑇=𝑇+Δ𝑇,不断进行迭代即可。就是求极值,按照梯度下降方向一步一步求极值

难点是推导的过程(插值、求解),过程就是这样。

相关匹配方法及分枝定界加速(Cartographer用的)

  • 帧间匹配似然场(CSM)

    暴力匹配不会出现局部极值,他的暴力之处在于三层for循环x,y,θ,计算量巨大

    在这里插入图片描述

    • 算法流程

      在这里插入图片描述

    • 构造似然场(就是高斯模糊的过程),然后在制定的搜索空间内,进行搜索,计算每一个位姿的得分(找出最优得分),根据每个位姿的最优得分,计算本次位姿匹配的方差。

    • 我们不能直接使用暴力匹配,因为他的计算量太大,所以得对其进行加速

  • 位姿搜索

    在这里插入图片描述

    • 1.暴力搜索

      使用三层for循环(x,y,θ)枚举每一个位姿,分别计算每个位姿的得分,计算量巨大(指的不是循环,是他每个位姿都要进行投影,而投影则需要计算sin和cos函数两次),然后把每个位姿都投影到世界坐标系中,累加得分就得到了似然场。

    • 2.预先投影搜索

      先循环θ,再y,再循环x,然后我们世界坐标系转换矩阵是

      cosθ -sinθ x

      sinθ cosθ y

      0 0 1

      我们第一次循环θ之后,这个矩阵中的sinθ和cosθ就只需要计算一遍,其余的就是计算x,y了,这样就大大减少了计算量。

    • 3.多分辨率搜索(CSM用的比较多的方法)

      • 构造粗分辨率和细分辨率两个似然场,然后在粗分辨率似然场上先进行搜索获取最优位姿,然后再把粗分辨率的最优位姿对应栅格进行细分辨率划分,然后再进行细分辨率搜索,再次得到最优位姿。粗分辨率地图的栅格的似然值(最优值)为对应的细分辨率地图对应空间的所有栅格的最大值(上界),也就是说粗分辨率的位姿得分是细分辨率的位姿得分的上界。这个搜索方法可能会错过最优解,但最终解也一定是很接近最优解的。

        在这里插入图片描述

  • 分枝定界算法

    他其实和栅格搜索很相近,栅格搜索就是分栅格,然后栅格内再分栅格,然后栅格是不能一直往下分的,就得到最终解了。而分枝定界算法就是不断地分树枝,这就是分枝部分。然后定界就是确定一个界,搜索树中的每一个节点确定以该节点为根节点的子树的界(最小值问题确定下界,最大值问题确定上界)。

    (看红色部分)在这里插入图片描述

    他是一个常用的树形搜索剪枝算法,它主要是为了求解整数规划的问题,解的数量为有限个。他就是把最优解求解问题转换为树形搜索问题,根节点表示整个解空间,叶子节点表示最优解,中间的节点表示解空间的某一部分子空间。

    剪枝是怎么个剪枝法呢?

    他就是确定了一个目前的最大得分bestscore,比如说到达了某个节点,假设此节点的上界是A,但这个A小于最大得分basescore,那么这个节点下的子树小面的所有节点都会被剪掉。

    就好比搜栅格,最优解在左下角,如果从右下角开始搜,那么得分自然会很低,既然得分低也就没必要进行细分了。也就相当于剪枝了。

    粗分辨率高的不一定保证细分辨率也高,然后按照得分该剪的剪,没必要细分的就不要细分了。

    关键是如何定界,如何完成算法中的定界函数。
    在这里插入图片描述

    看算法代码可知,首先是选择一个节点,知判断是不是叶子节点,如果不是就score一下,看是否比最大得分还大,如果没有就是剪枝。

    在这里插入图片描述

    • 分枝定界在相关方法的加速作用

      • 搜索树中的节点表示一个正方形的搜索范围
      • 分枝:对于节点(cx,cy,cθ,ch),分枝为4个子节点
      • 定界:其实就是score函数
      • 在这里插入图片描述

      在这里插入图片描述

  • 作业

    在这里插入图片描述

    • PL-ICP匹配方法(与ICP算法相似,只是说误差是之间的)
    • 基于优化的匹配方法(Hector和cartographer两种算法是基于优化的方法)
    • 相关匹配方法及分支定界加速(CSM算法)
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值