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

news2025/1/18 10:48:59

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

  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中, π π π用最近点参数化 η = d n η = d\mathbf{n} η=dn表示[27]。

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

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

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

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

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

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

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

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点 p p p。利用这两个点可以求得直线方程。对 p p p点再寻找一个在其他线的最近点 p 2 p_2 p2。如果 p 2 p_2 p2到该直线的距离足够小,则利用这三个点来拟合一条直线。重复这个过程直到没有点能够被加入到直线中。

  2. Landmark关联
    当新一帧点云获得后,首先计算属于该帧的集合 E \mathbb{E} E与集合 F \mathbb{F} F。并对这两个集合分别构建KD-tree。对上一帧里的每个点 p p p,寻找其在当前帧的 n n n个最近点。如果 p p p属于面或者圆柱体,则这 n n n个最近点都被保留,如果 p p p属于直线,则保留这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.coloradmin.cn/o/335184.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

kafka集群搭建及问题

一、zookeeper集群搭建 1、创建文件夹 cd /home mkdir zookeeper 2、下载 cd zookeeper wget https://downloads.apache.org/zookeeper/zookeeper-3.8.0/apache-zookeeper-3.8.0-bin.tar.gz 解压到当前文件夹 tar -zxvf apache-zookeeper-3.8.0-bin.tar.gz 文件夹重命…

icomoon字体图标的使用

很久之前就学习过iconfont图标的使用&#xff0c;今天又遇到一个用icomoon字体图标写的案例&#xff0c;于是详细学习了一下&#xff0c;现整理如下。 一、下载 1.网址&#xff1a; https://icomoon.io/#home 2.点击IcoMoon App。 3.点击 https://icomoon.io/app 4.进入IcoM…

每天10个前端小知识 【Day 10】

前端面试基础知识题 1. es5 中的类和es6中的class有什么区别&#xff1f; 在es5中主要是通过构造函数方式和原型方式来定义一个类&#xff0c;在es6中我们可以通过class来定义类。 class类必须new调用&#xff0c;不能直接执行。 class类执行的话会报错&#xff0c;而es5中…

【PyTorch】教程:Transfer learning

Transfer learning 实际工作中&#xff0c;只有很少的人从头开始训练 CNN&#xff0c;因为很难获得大量的样本。一般情况下&#xff0c;会通过调用预训练模型&#xff0c;例如 ConvNet 在 ImageNet&#xff08;1.2 M 图像 1000 个类别&#xff09;,可以用 ConvNet 初始化&#…

Verilog 组合逻辑一些注意事项

reg型变量不一定会被综合成触发器 【参考链接】 以下是verilog-2001的标准中对wire和reg的定义如下&#xff1a; wire&#xff1a; A wire net can be used for nets that are driven by a single gate or continuous assignment. reg&#xff1a; Assignments to a reg are…

微信小程序 Springboot java nodejs图书馆图书借阅系统

图书借阅管理系统用户端是基于微信小程序&#xff0c;管理员端是基于java编程语言&#xff0c;mysql数据库&#xff0c; idea工具开发&#xff0c;本系统是分为用户和管理员两个角色&#xff0c;其中用户的主要功能有注册登陆小程序&#xff0c;查看系统功能&#xff0c;图书搜…

VB 消息、消息队列、事件

windows是图像化界面&#xff0c;多任务消息windows系统将消息&#xff08;大的结构&#xff09;发给其他应用程序Windows消息包含了所有的外部输入或者计算机内部信息&#xff0c;应用程序的消息队列先进先出&#xff0c;Windows消息的循环--每个应用程序里有自己的消息循环外…

微信卸载后重装的聊天记录还能找回吗?

很多人微信卸载后&#xff0c;问能不能恢复之前的聊天记录&#xff1f; 我想大家肯定都去百度搜索了&#xff0c;能搜出来可行的办法了么&#xff0c;没有是吧&#xff0c;那就看看我能不能帮到你&#xff0c;根据我的经验来解决。 答&#xff1a;理论上是不能的&#xff0c;因…

SpringBoot集成swagger3(CD2207)(内含教学视频+源代码)

SpringBoot集成swagger3&#xff08;CD2207&#xff09;&#xff08;内含教学视频源代码&#xff09; 教学视频源代码下载链接地址&#xff1a;https://download.csdn.net/download/weixin_46411355/87435564 目录SpringBoot集成swagger3&#xff08;CD2207&#xff09;&#…

LeetCode栈与队列相关解法

栈与队列1. 用栈实现队列[232. 用栈实现队列](https://leetcode.cn/problems/implement-queue-using-stacks/)2. 用队列实现栈[225. 用队列实现栈](https://leetcode.cn/problems/implement-stack-using-queues/)两个队列实现一个队列实现3. 有效括号[20. 有效的括号](https://…

mysql使用innobackupex主从同步

目录 1.用innobackupex物理备份主库数据至文件夹 2.在从库用innobackupex恢复数据库 3.配置主从并启动从库 innobackupex是一款MySQL备份工具&#xff0c;备份速度快(通过直接copy物理文件)&#xff0c;而且支持压缩、流式传输、加密等功能 新安装的数据库自带innobackupex…

程序的翻译环境和执行环境

程序环境和预处理&#x1f996;程序的翻译环境和执行环境&#x1f996;详解编译链接&#x1f433; 翻译环境&#x1f433; 详解编译过程&#x1f433; 运行环境&#x1f996;预处理详解&#x1f433; 预定义符号&#x1f433; #define&#x1f980; #define 定义标识符&#x1…

端到端模型(end-to-end)与非端到端模型

一、端到端&#xff08;end to end&#xff09; 从输入端到输出端会得到一个预测结果&#xff0c;将预测结果和真实结果进行比较得到误差&#xff0c;将误差反向传播到网络的各个层之中&#xff0c;调整网络的权重和参数直到模型收敛或者达到预期的效果为止&#xff0c;中间所…

9.关系查询处理和查询优化

其他章节索引 梳理 名词解释 代数优化&#xff1a;是指关系代数表达式的优化&#xff0c;也即按照一定规则&#xff0c;通过对关系代数表达式进行等价变换&#xff0c;改变代数表达式中操作的次序和组合&#xff0c;使查询更高效物理优化&#xff1a;是指存取路径和底层操作算…

类和对象(中)(二)

类和对象&#xff08;中&#xff09;&#xff08;二&#xff09;1.赋值运算符重载1.1运算符重载1.2赋值运算符重载1.3前置和后置重载2.const成员3.取地址及const取地址操作符重载&#x1f31f;&#x1f31f;hello&#xff0c;各位读者大大们你们好呀&#x1f31f;&#x1f31f;…

【Linux基础知识】

Linux基础知识 Linux基础知识 系统目录结构 /bin&#xff1a; 命令和应用程序。 /boot&#xff1a; 这里存放的是启动 Linux 时使用的一些核心文件&#xff0c;包括一些连接文件以及镜像文件。 /dev &#xff1a; dev 是 Device(设备) 的缩写, 该目录下存放的是 Linux 的外…

MySQL —— 内置函数

目录 内置函数 一、日期函数 二、字符串函数 三、数学函数 四、其他函数 内置函数 一、日期函数 函数名称描述current_date()获取当前日期current_time()获取当前时间current_timestamp()获取当前时间戳now()获取当前日期时间date(datetime)获取datetime参数的日期部分d…

【C→C++】打开C++世界的大门

文章目录前言什么是CC的发展史C的重要性1. 使用广泛度2. 工作领域的应用1. C关键字(C98)2. 命名空间2.1 命名空间的定义2.2 命名空间的使用2.3 std命名空间的使用惯例3. C输入&输出3.1 输入输出3.2 说明4. 缺省参数4.1 缺省参数概念4.2 缺省参数分类5. 函数重载5.1 函数重载…

作业帮发布新款AI学习桌,引领书桌行业智能化发展

2月9日&#xff0c;作业帮举办AI学习桌新品沟通会&#xff0c;宣布其独家开创的AI学习桌推出四个月内跻身天猫书桌单品GMV前四&#xff0c;作业帮将加大投入&#xff0c;正式进军书桌市场&#xff0c;并发布新款AI学习桌产品。AI伴学护眼护脊&#xff0c;颠覆传统书桌想象力作业…

一:Datart的下载、本地运行

前言&#xff1a;本文只是个人在使用datart的一个记录&#xff0c;仅供参考。如果有不一样的地方&#xff0c;欢迎评论或私信进行交流。datart 是新一代数据可视化开放平台&#xff0c;支持各类企业数据可视化场景需求&#xff0c;如创建和使用报表、仪表板和大屏&#xff0c;进…