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

经典文献阅读之--PLC-LiSLAM(面,线圆柱SLAM)

0. 简介

对于激光SLAM来说,现在越来越多的算法不仅仅局限于点线等简答特征的场景了,文章《PLC-LiSLAM: LiDAR SLAM With Planes, Lines,and Cylinders》说到,平面、线段与圆柱体广泛存在于人造环境中。为此作者提出了一个使用这些landmark的激光雷达SLAM系统。目前已有工作做了类似于BA的平面adjustment(即.PA),但是这类工作在缺少平面的场景效果很差,为了增强系统的鲁棒性,引入更多的特征是有必要的,因此作者在本文中引入了额外的线和圆柱体特征,并且实现了平面-线-圆柱体的adjustment即(PLCA),PLCA不依赖于从三维特征点捕获的点数,这使得高效求解大规模PLCA问题成为可能。定位部分通过将局部平面、直线和柱面与全局平面、直线和柱面来进行配准,从而进行实时姿态估计,这种被称为平面-直线-柱面配准(PLCR, plane-line-cylinder registration)。在检测landmark并完成数据关联的过程中很可能会引入误检。本文通过检查后端的成本(cost)函数来纠正这些错误,这个错误纠正机制是那些基于配准的方法。例如LOAM和ICP,由于它们并不维护数据间的关联关系,所以很难纠正这些错误。这里由于该论文没有预印本,所以作者以附录的形式展示了本文的内容。由于本文的内容较多,所以作者主要来讲解特征提取这块的内容。其余的用泡泡机器人的内容作为补充。

1. 文章贡献

在之前的工作[1],[2]中,我们探索了激光雷达SLAM的平面,并引入平面调整(PA,plane adjustment)来纠正漂移,这是视觉SLAM中的bundle adjustment(BA)的对应。由于只考虑平面,如果没有足够的平面进行姿态估计,这些方法将失败。本文扩展了我们[2]工作的内容,并加入了线条和圆柱体。具体来说,该算法包括局部映射、全局映射和定位三个部分。在局部和全局映射中,通过位姿联合优化平面、直线和圆柱体。我们将由此产生的最小二乘问题分别称为局部和全局平面-柱面调整(PLCA)。在定位中,通过使用平面、直线和柱面进行扫描到模型的连续时间配准来估计新的激光雷达扫描的姿态,称为连续时间平面-直线-柱面配准(PLCR)。本文的贡献如下:

  • 本文证明,通过一些预处理,PLCA问题的求解与面、线以及圆柱体里的三维点的数量无关。因为这些landmark的表示是无边界的,许多三维点都会被包含在这些landmark里面。对于求解大尺度的PLCA问题,我们的方法行而有效。

  • 本文提供了一个高效的PLCR问题求解方法。我们使用一阶泰勒展开来近似旋转,考虑到两帧之间的旋转一般是足够小的。如果比较大的旋转发生在两帧之间,我们进行迭代近似。

  • 本文的算法能够容忍足够的检测误检测。因为遮挡以及激光雷达点云的稀疏性,检测这些landmark的过程容易引入误检测。这个错误纠正机制是那些基于配准的方法,例如LOAM以及ICP很难做到的,因为他们并不维护数据关联。我们的算法通过检验后端的cost来纠正这些误检测。

2. 详细内容

2.1 前后端概念

  1. 位姿:这个公式表示通过转换矩阵X=[Rt01]∈SE(3)X = \left[ \begin{matrix} R&t\\0&1\end{matrix}\right]∈SE(3)X=[R0t1]SE(3)将局部LiDAR坐标系中的点坐标转换到全局坐标系中的一个姿态。其中∈SO(3)∈SO(3)SO(3)为旋转矩阵,t∈R3t∈\mathbb{R}^3tR3为平移向量。在PLCR和PLCA中,xxx参数为x=[ω;t]x = [ω;t]x=[ω;t],其中ωωω代表了RRR的角轴(angle-axis)表示形式:
    在这里插入图片描述
    其中[ω]×[ω]_×[ω]×表示ωωω的斜对称矩阵,∣∣ω∣∣2||ω||_2∣∣ω2表示ωωωL2L^2L2范数。

  2. 平面:本文中的平面通过一个四维向量表示。前三维表示该平面的法向量,模长为1,最后一维为坐标系原点到该平面的距离。我们将平面表示为π=[n;d]π = [\mathbf{n};d]π=[n;d],其中n\mathbf{n}n∣∣n∣∣2=1||\mathbf{n}||_2 = 1∣∣n2=1的平面法线,∣d∣|d|d为原点到该平面的距离。在PLCA中,πππ用最近点参数化η=dnη = d\mathbf{n}η=dn表示[27]。

  3. 线:本文中的直线通过一个六维向量表示。前三维表示该直线的方向,后三维表示从原点出发的,垂直于该直线的向量,并且其模长为原点到直线的距离。文中用普吕克坐标(Plücker坐标)[28]表示一条三维空间中的直线,它是一个六维向量l=[d;m]l = [d;m]l=[d;m],其中dddlll的方向,∣∣d∣∣2=1||d||_2 = 1∣∣d2=1, mmm垂直于由原点和lll确定的平面,∣∣m∣∣2||m||_2∣∣m2等于从原点到lll的距离,lll有四个自由度。在PLCA中,我们采用[29]中引入的方法对lll进行参数化。具体来说,给定lll,我们首先构造一个旋转矩阵Rl=[d,m∣∣m∣∣2,d×m∣∣m∣∣2]R^l = [d, \frac{m}{||m||_2}, d × \frac{m}{||m||_2}]Rl=[d,∣∣m2m,d×∣∣m2m],其中×××为叉积。假设ωlω^lωl是(1)中RlR^lRl的角轴表示,我们可以用一个四维向量将lll参数化ζ=[ωl;∣∣m∣∣2]ζ = \left[ω^l; | |m| |_ 2 \right]ζ=[ωl;∣∣m2]

  4. 圆柱体:本文中的圆柱体通过一个七维向量表示,前六维为该圆柱体所在的直线表示(同上),最后一维为该圆柱体的半径。文中将圆柱体表示为c=[lc;r]c = [l^c;r]c=[lc;r],其中lcl^clcccc中线的Plücker坐标,rrr为其半径。在PLCA中,我们通过一个五维向量ν=[ζc;r]ν = \left[ζ^c;r\right]ν=[ζc;r]来完成参数化;其中ζζζ是上面定义的lcl^clc的参数化。

  5. 观察:用mmm表示平面、直线或圆柱体,即m∈{π,l,c}m∈\{π, l, c\}m{π,l,c}。其中mjm_jmj表示为第jjj个landmark特征点信息。并且认为mjm_jmjXiX_iXi处是可观测的,mjm_jmjXiX_iXi处的观测值形成一组NijmN^m_{ij}Nijm点,表示为Pijm={pijkm}k=1Nijm\mathbb{P}^m_{ij} = \{p^m_{ijk}\}^{N^m_{ij}} _{k=1}Pijm={pijkm}k=1Nijm。我们将pijkmp^m_{ijk}pijkm的齐次坐标表示为p~ijkm=[pijkm;1]\tilde{p}^m_{ijk} = [p^m_{ijk}; 1]p~ijkm=[pijkm;1]。将Pijm\mathbb{P}^m_{ij}Pijm中各点的同质坐标堆叠起来,我们就会得到一个Pijm×4\mathbb{P}^m_{ij}× 4Pijm×4的矩阵
    在这里插入图片描述
    由于平面、直线和圆柱体是无界物体,NijmN^m_{ij}Nijm可能非常大,这导致了大规模的最小二乘问题。

  6. 优化:Levenberg-Marquardt(LM)[30]算法通常用于解决最小二乘问题。给定一个最小二乘问题 χ^=arg⁡min⁡∣∣(χ)∣∣22\hat{χ} = \arg\min||(χ)||^2_2χ^=argmin∣∣(χ)22,LM算法在第kkk次迭代时通过χk+1=χk+Δχ_{k+1} = χ_{k} + Δχk+1=χk+Δ更新解决方案。这里的ΔΔΔ是以下线性方程组的解
    在这里插入图片描述
    其中JεJ_\varepsilonJε是在χkχ_kχk处的雅各布矩阵,λλλ是LMalgorithm的参数,在每次迭代时都要调整,以确保∣∣(χ)∣∣22||(χ)||^2_2∣∣(χ)22的值减少。

    为了应用LM算法,我们通常先计算JεJ_\varepsilonJεε\varepsilonε,然后将其代入(3)来计算ΔΔΔ。 因为 N^m_{ij}可能非常大,这种直接的方法可能是计算上的要求。另一方面,显而易见的是 只需要JεTJεJ_\varepsilon^TJ_\varepsilonJεTJεJεTεJ_\varepsilon^T \varepsilonJεTε就可以得到varDeltavarDeltavarDelta。我们表明 PLCA的JεTJεJ_\varepsilon^TJ_\varepsilonJεTJεJεTεJ_\varepsilon^T \varepsilonJεTε有特殊的结构,可以用来加速计算。用来加速计算。

  7. 二次方形式:一个对称矩阵A=[aij]∈Rn×nA=[a_{ij}]∈\mathbb{R}^{n×n}A=[aij]Rn×n决定了一个二次形式qA=yTAyq_A=y^TAyqA=yTAy,其中y=[y1;...;yn]y=[y1; ...; yn]y=[y1;...;yn]。我们可以把qAq_AqA写成 在这里插入图片描述
    其中χ=[−−−;yiyj;−−](i≤j),α=[−−−;cijaij;−−]χ = [ - - - ; y_iy_j ; - - ] (i ≤ j),α = [ - - - ; c_{ij}a_{ij} ; - - ]χ=[;yiyj;](ij)α=[;cijaij;] (如果i=ji = ji=jcij=1c_{ij} = 1cij=1,并且(i<j),cij=2(i < j),cij = 2(i<j)cij=2)。

  8. 矩阵计算:假设z=[z1;...;zm]z = [z1; ...; zm]z=[z1;...;zm]zzz是上面定义的yyy的向量函数。假设P∈Rk×mP∈\mathbb{R}^{k×m}PRk×m是一个恒定的k×mk×mk×m矩阵。让我们定义f=Pzf = P_zf=Pz,并将fff的雅各布矩阵表示为JfJ_fJf。根据矩阵计算规则,JfJ_fJf的形式为
    在这里插入图片描述
    这里∂z∂y\frac{∂_z}{∂_y}yz是一个m×nm×nm×n的矩阵,∂zj∂yi\frac{∂_{z_j}}{∂_{y_i}}yizj∂z∂y\frac{∂_z}{∂_y}yz的第iii行和第jjj列的条目。

2.2 系统总览

本文提出的系统由前端与后端组成,前端检测面、线与圆柱体,并建立局部到全局的数据关联,从而进行后续的位姿估计。前端也决定了什么时候一个新的关键帧应当被创建。后端包括局部与全局的PLCA。局部的PLCA通过滑窗优化位姿与landmark。全局的PLCA优化所有的PLCA以及除了第一帧外的所有位姿。当有Landmark被再次观测到时,全局的PLCA便会被触发。
在这里插入图片描述

2.3 前端

  1. Landmark检测:对激光雷达每一条线的数据进行切分:类似于LOAM,计算每个三维点的曲率,并将属于edge点的部分提取出来,组成集合E\mathbb{E}E。以每条线上每两个edge点作为两端,可以把这条线分为许多段,这些段里的点为平坦点,组成集合F\mathbb{F}F

    平面与圆柱体检测:对于每个线上的每段平坦点,寻找与其相近的,但不属于同一条线上的平坦点,如果用RANSAC法拟合平面的平均误差比较小,则利用平面模型来拟合,否则用圆柱体来拟合这些点。

    直线检测:对每个段里的edge点,找到所有与其相近的,但属于另一条线的edge点ppp。利用这两个点可以求得直线方程。对ppp点再寻找一个在其他线的最近点p2p_2p2。如果p2p_2p2到该直线的距离足够小,则利用这三个点来拟合一条直线。重复这个过程直到没有点能够被加入到直线中。

  2. Landmark关联
    当新一帧点云获得后,首先计算属于该帧的集合E\mathbb{E}E与集合F\mathbb{F}F。并对这两个集合分别构建KD-tree。对上一帧里的每个点ppp,寻找其在当前帧的nnn个最近点。如果ppp属于面或者圆柱体,则这nnn个最近点都被保留,如果ppp属于直线,则保留这n个点的曲率最大的一个点。随后,利用RANSAC算法找到符合模型的内殿。通过这些内点,我们之后会使用PLCR方法来进行位姿估计。

  3. 关键帧创建
    受到ORB-SLAM的启发,当以下情况发生时,新的关键帧会被创建:

    • 当前帧20%以上的点不能被追踪与关联。
    • 当前帧与上一个关键帧的旋转角度大于5°。
    • 当前帧与上一帧的距离大于设定的阈值。

    对于新的关键帧,我们在没被关联到的三维点上检测面、线与圆柱体。对于新检测出来的landmark,首先会寻找与已有的landmark的均方根之差,如果大于设定的阈值,则新增一个landmark。

2.4 面-线-圆柱体 联合优化 (PLCA)

  1. 全局PLCA
    在全局的PLCA中,对所有点计算点到模型的损失,从而构建优化问题来同时优化位姿与landmark的参数。

    作者详细给出了各个模型的LM优化时的参数的形式,有兴趣的同学可以阅读原文,这里不再赘述。

    作者证明,构建优化问题Ax=b时,A的规模仅与Landmark的数量有关,而与landmark里的点的数量无关。

…详情请参照古月居

http://www.lryc.cn/news/2031.html

相关文章:

  • 计算组合数Cnk即从n个不同数中选出k个不同数共有多少种方法math.comb(n,k)
  • 工厂设计模式
  • IO多路转接 —— poll和epoll
  • 计算机网络整理-问答
  • JS 实现抛物线动画案例
  • CSGO搬砖项目,23年最适合小白的项目!
  • 谈谈会话管理
  • Linux查看JVM FULL GC频率
  • java世界String的那些事
  • 【图像配准】多图配准/不同特征提取算法/匹配器比较测试
  • 2023金三银四季跳槽季,啃完这软件测试面试题,跳槽不就稳稳的了
  • 【C++详解】——vector类
  • uniapp 离线本地打包
  • 初识马尔科夫模型(Markov Model)
  • CentOS7 ifconfig(或 ip addr)命令不显示IP地址
  • 2023/2/10总结
  • 2023最新版!宝塔面板Docker自建Bitwarden密码管理
  • 【Hello Linux】 Linux基础命令
  • 151、【动态规划】leetcode ——2. 01背包问题:二维数组+一维数组(C++版本)
  • 2023-02-09 - 3 Elasticsearch基础操作
  • 云原生系列之使用 prometheus监控MySQL实战
  • 电脑分盘怎么分?分盘详细教程来了,图文教学
  • Element UI框架学习篇(四)
  • Revit快速材质切换:同一墙面赋予不同材质的方法
  • 【Linux operation 56】Linux 系统验证端口连通性
  • @Valid注解配合属性校验注解完成参数校验并且优化异常处理
  • 每天一道大厂SQL题【Day08】
  • 朗润国际期货:2023/2/10今日期市热点及未来焦点
  • TLV73312PQDRVRQ1稳压器TPS622314TDRYRQ1应用原理图
  • 课程回顾|以智能之力,加速媒体生产全自动进程