VoxelMap论文翻译

文章目录

  • 前言
  • 一、介绍
  • 二. 相关工作
  • 三. 方法论
  • 四. 实验
  • 五. 结果


前言

原文:论文
代码github

摘要:这篇论文提出了一种高效的概率自适应体素映射方法,用于LiDAR里程计。该地图是一个体素集合,每个体素包含一个平面(或边缘)特征,从而实现环境的概率表示和新LiDAR扫描的精确配准。我们进一步分析了粗到细的体素映射需求,并使用一种新颖的通过哈希表和八叉树组织的体素地图来高效地构建和更新地图。我们将所提议的体素地图应用于迭代扩展卡尔曼滤波器,并构建一个最大后验概率问题以进行位姿估计。对开放的KITTI数据集的实验表明,与其他最先进的方法相比,我们的方法具有较高的准确性和效率。在非结构化环境中进行的户外实验,以及使用非重复扫描的LiDAR进一步验证了我们映射方法对不同环境和LiDAR扫描模式的适应性。

框架图

一、介绍

近年来,随着3D LiDAR技术的发展,尤其是低成本高密度固态LiDAR的出现,LiDAR(惯性)测程在自动驾驶汽车、无人机(UAV)和3D移动测绘设备等各种应用中的使用越来越广泛。LiDAR测程的一个基本要求是对环境的合理表示(即地图),该地图能够高效维护并有效注册新点。在现有的LiDAR(惯性)测程中,主流的映射方法,如LOAM、Lego-LOAM、LINS、LIO-SAM和Lili-OM,是基于点云地图,这些地图由原始或选定的边缘或平面点组成。在注册新的扫描时,扫描中的每个点通过迭代最近点(ICP)或其变体(如广义ICP)注册到由地图中几个最近点拟合的小平面上。这一研究方向 culminates 在FAST-LIO2中,该方法开发了一种增量kd-tree结构,以高效组织点云地图。作为LiDAR测量的直接形式,点云地图的实现相对简单。然而,点云地图的一个主要缺点是难以考虑由LiDAR测量噪声引起的地图不确定性。在ICP或其变体中,由最近的地图点拟合的平面通常被视为新的点所在的真实确定性平面,但由于地图点的测量噪声,它实际上应是概率性的。虽然在拟合平面(和随后的点注册)中考虑这些噪声是可能的,但由于最近点通常较少以避免虚假平面,这种方法的可靠性较低且耗时(因为如果在注册过程中任何最近点发生变化,必须重新计算不确定性)。考虑地图不确定性需要对环境中显著特征(如平面)进行显式参数化,跨不同的LiDAR扫描跟踪这些特征,并估计这些特征参数及其不确定性。由于可能存在不同大小的特征,执行这些任务是具有挑战性的。由于LiDAR测量中的粗到细现象,问题变得更加复杂。例如,扫描或地图中的点由于LiDAR分辨率、扫描类型和空间中点的不均匀分布而通常在空间中具有截然不同的密度。点的密度也会随着LiDAR传感器的顺序扫描特性而随时间变化。
为了解决上述挑战,本文提出了一种新颖的在线自适应体素映射方法,该方法构建不同大小的体素以适应环境结构和点密度的变化。一个体素跟踪一个显著特征(本文使用平面)。基于接收到的点,特征参数及其不确定性在体素内反复估计。参数化特征使我们能够准确考虑当前点和地图的两者不确定性。具体而言,本文的贡献包括:

  • 一种自适应大小的粗到细体素构建方法,能够适应结构变化的环境,并对LiDAR点云的稀疏性和不规则性具有鲁棒性。自适应体素地图以八叉树哈希数据结构组织,以提高体素构建、更新和查询的效率。

  • 真正的概率地图表示,其中每个包含在体素地图中的特征(即平面)准确考虑了来自点测量噪声和姿态估计误差的不确定性。

  • 在LiDAR(惯性)测程系统中对所提映射方法的开源实现,并在各种环境(结构化和非结构化)和LiDAR(多旋转LiDAR和非传统固态LiDAR)的实际数据集上进行了全面验证。特别地,我们的方法在KITTI数据集上优于其他先进方法的优越性得到了验证。

二. 相关工作

一方面,我们的体素地图中使用的平面特征与Suma和Suma++中使用的surfels非常相似,它们通过优化点到平面的残差来注册新点,并在地图中显式维护和估计surfels。在Suma和Suma++中,surfels是非常小的平面特征,在杂乱的环境中我们的平面特征也是如此。然而,由于我们体素地图中的自适应大小,在结构化环境中,我们的平面特征可以非常大。这种自适应策略使我们的方法适用于具有不同结构的环境,同时确保了高计算效率。我们平面特征与Suma和Suma++中的surfels之间的另一个区别在于surfels和平面的关联。在这些研究中,地图中的surfels和新的LiDAR点都被投影(即渲染)到虚拟图像平面上,以进行点到平面的关联。这样的surfels渲染过程非常耗时,通常需要GPU加速以适应在线应用。相对而言,我们的平面关联是通过高效的哈希表查询实现的。
surfels渲染中的计算问题可以通过将surfels地图建模为高斯混合模型,并通过期望最大化(Expectation Maximization)进行surfels关联来缓解,如MRSLaserMap中所示。MRSLaserMap的工作也采用了多分辨率的surfels地图,其中有效的surfels从最细分辨率合并到较粗分辨率。这种从细到粗的地图方法源于MRSMap,受LiDAR扫描仪的径向特性启发,通常对LiDAR点云的稀疏性和不规则性非常敏感。相比之下,我们的方法以粗到细的方式构建体素地图,更加鲁棒于LiDAR点云的不规则性,并适应不同的环境。与确定性surfels不同,[20]和[21]中的研究将LiDAR测量噪声纳入surfels,导致类似于我们概率性平面表示的概率点到surfels注册。然而,这些研究只考虑了LiDAR测量噪声,而忽略了由于LiDAR姿态估计错误引起的不确定性。相比之下,我们的平面不确定性考虑了这两种不确定性。注意,姿态估计用于将测量的LiDAR点从局部坐标系转换到估计surfels/平面的世界坐标系,因此,姿态估计误差会影响surfels/平面的不确定性。另一方面,我们的体素地图类似于法线分布变换(NDT),其中地图由许多体素(不同大小)组成。在每个体素中,基于位于该体素中的地图点拟合一个3D高斯分布,并用于通过最大化点来自该分布的可能性来注册新点。LiTAMIN2进一步通过将ICP与NDT结合来提高NDT的准确性。与这些NDT方法相比,我们的方法显式地对体素中的平面进行参数化和估计。这种显式的平面参数化允许直接进行点到平面的注册,这比NDT更为可靠和准确,因为NDT中的3D高斯分布通过惩罚所有三个方向(而不仅仅是平面法线)对新点进行约束。显式的平面参数化还允许将LiDAR点测量和姿态估计中的噪声纳入考虑,从而提供进一步的准确性提升。在数据结构方面,我们提出的八叉哈希数据结构和粗到细的映射方法类似于OGN和HSP。OGN引入了八叉哈希表示法到深度卷积解码器中,实现了计算和内存效率高的体积3D输出生成。HSP在分层表面上使用粗到细的预测,以实现更准确的3D物体重建。虽然OGN和HSP的3D物体输出和重建效果良好,但我们将高效的八叉哈希数据结构和粗到细的平面表示整合到一种新型地图中,并将该地图应用于LiDAR测程问题,从而增强了LiDAR测程的适应性、效率和准确性。一方面,我们的体素地图中使用的平面特征与Suma和Suma++中使用的surfels非常相似,它们通过优化点到平面的残差来注册新点,并在地图中显式维护和估计surfels。在Suma和Suma++中,surfels是非常小的平面特征,在杂乱的环境中我们的平面特征也是如此。然而,由于我们体素地图中的自适应大小,在结构化环境中,我们的平面特征可以非常大。这种自适应策略使我们的方法适用于具有不同结构的环境,同时确保了高计算效率。我们平面特征与Suma和Suma++中的surfels之间的另一个区别在于surfels和平面的关联。在这些研究中,地图中的surfels和新的LiDAR点都被投影(即渲染)到虚拟图像平面上,以进行点到平面的关联。这样的surfels渲染过程非常耗时,通常需要GPU加速以适应在线应用。相对而言,我们的平面关联是通过高效的哈希表查询实现的。surfels渲染中的计算问题可以通过将surfels地图建模为高斯混合模型,并通过期望最大化(Expectation Maximization)进行surfels关联来缓解,如MRSLaserMap中所示。MRSLaserMap的工作也采用了多分辨率的surfels地图,其中有效的surfels从最细分辨率合并到较粗分辨率。这种从细到粗的地图方法源于MRSMap,受LiDAR扫描仪的径向特性启发,通常对LiDAR点云的稀疏性和不规则性非常敏感。相比之下,我们的方法以粗到细的方式构建体素地图,更加鲁棒于LiDAR点云的不规则性,并适应不同的环境。
与确定性surfels不同,[20]和[21]中的研究将LiDAR测量噪声纳入surfels,导致类似于我们概率性平面表示的概率点到surfels注册。然而,这些研究只考虑了LiDAR测量噪声,而忽略了由于LiDAR姿态估计错误引起的不确定性。相比之下,我们的平面不确定性考虑了这两种不确定性。注意,姿态估计用于将测量的LiDAR点从局部坐标系转换到估计surfels/平面的世界坐标系,因此,姿态估计误差会影响surfels/平面的不确定性。
另一方面,我们的体素地图类似于法线分布变换(NDT),其中地图由许多体素(不同大小)组成。在每个体素中,基于位于该体素中的地图点拟合一个3D高斯分布,并用于通过最大化点来自该分布的可能性来注册新点。LiTAMIN2进一步通过将ICP与NDT结合来提高NDT的准确性。与这些NDT方法相比,我们的方法显式地对体素中的平面进行参数化和估计。这种显式的平面参数化允许直接进行点到平面的注册,这比NDT更为可靠和准确,因为NDT中的3D高斯分布通过惩罚所有三个方向(而不仅仅是平面法线)对新点进行约束。显式的平面参数化还允许将LiDAR点测量和姿态估计中的噪声纳入考虑,从而提供进一步的准确性提升。
在数据结构方面,我们提出的八叉哈希数据结构和粗到细的映射方法类似于OGN和HSP。OGN引入了八叉哈希表示法到深度卷积解码器中,实现了计算和内存效率高的体积3D输出生成。HSP在分层表面上使用粗到细的预测,以实现更准确的3D物体重建。虽然OGN和HSP的3D物体输出和重建效果良好,但我们将高效的八叉哈希数据结构和粗到细的平面表示整合到一种新型地图中,并将该地图应用于LiDAR测程问题,从而增强了LiDAR测程的适应性、效率和准确性。

三. 方法论

A. 概率平面表示

我们的体素地图在每个体素中包含一个概率特征。为了不失一般性,我们选择平面特征,因为它们在环境中广泛存在,并在本节中介绍平面特征的不确定性模型。
由于平面特征是从其关联点估计得出的,因此点中的任何噪声都会影响平面估计的不确定性。我们首先在第III-A1节中调查点噪声,然后在第III-A2节中推导噪声如何影响平面不确定性。注意,由于体素地图(因此包含的平面特征)是以世界坐标系表示的,点噪声也应在世界坐标系中进行调查,这导致了两个可能的噪声源:一个是原始点测量噪声,相关于局部LiDAR坐标系,另一个是将局部LiDAR点投影到世界坐标系中的LiDAR姿态估计误差。

1) 点 W p i {}^{W} p_{i} Wpi 的不确定性:

根据[27]中对激光雷达传感器测量噪声的分析,局部激光雷达框架中激光雷达点的不确定性由两部分组成:测距不确定性和方位方向不确定性(见图1(a))。设 ω i ∈ S 2 \omega_{i} \in S^{2} ωiS2 为测量的方位方向, δ ω i ∼ N ( 0 2 × 1 , Σ ω i ) \delta_{\omega_{i}} \sim \mathcal{N}(0_{2\times 1}, \Sigma_{\omega_{i}}) δωiN(02×1,Σωi) ω i \omega_{i} ωi 的切平面上的方位方向噪声, d i d_{i} di 为深度测量值, δ d i ∼ N ( 0 , Σ d i ) \delta_{d_{i}} \sim \mathcal{N}(0, \Sigma_{d_{i}}) δdiN(0,Σdi) 为测距噪声。那么测量点 L p i {}^{L} p_{i} Lpi 的噪声 δ L p i \delta_{L_{p_{i}}} δLpi 及其协方差 Σ L p i \Sigma_{L_{p_{i}}} ΣLpi

δ L p i = [ ω i − d i ⌊ ω i ⌋ ∧ N ( ω i ) ] ⏟ A i [ δ d i δ ω i ] ∼ N ( 0 , Σ L p i ) , Σ L p i = A i [ Σ d i 0 1 × 2 0 2 × 1 Σ ω i ] A i T . ( 1 ) \begin{align*} \delta_{L_{p_{i}}} &= \underbrace{\begin{bmatrix} \omega_{i} & -d_{i} \lfloor \omega_{i} \rfloor_{\wedge} N(\omega_{i}) \end{bmatrix}}_{A_{i}} \begin{bmatrix} \delta_{d_{i}} \\ \delta_{\omega_{i}} \end{bmatrix} \sim \mathcal{N}(0, \Sigma_{L_{p_{i}}}), \\ \Sigma_{L_{p_{i}}} &= A_{i} \begin{bmatrix} \Sigma_{d_{i}} & 0_{1\times 2} \\ 0_{2\times 1} & \Sigma_{\omega_{i}} \end{bmatrix} A_{i}^{T}. \\ \end{align*} \qquad (1) δLpiΣLpi=Ai [ωidiωiN(ωi)][δdiδωi]N(0,ΣLpi),=Ai[Σdi02×101×2Σωi]AiT.(1)

其中 N ( ω i ) = [ N 1 N 2 ] ∈ R 3 × 2 N(\omega_{i}) = \left[\begin{array}{ll} N_{1} & N_{2} \end{array}\right] \in \mathbb{R}^{3\times 2} N(ωi)=[N1N2]R3×2 ω i \omega_{i} ωi 的切平面上的正交基, ⌊ ⌋ ∧ \lfloor \rfloor_{\wedge} 表示斜对称矩阵映射叉积。方程(1)的详细推导可在[27]中找到。

在这里插入图片描述
图1:注册点的不确定性模型:(a) LiDAR测量不确定性模型,包括方向和深度测量不确定性;(b) 从(3)计算的点协方差 。

在这里插入图片描述
图2:平面法线的不确定性模型。

考虑到激光雷达点 L p i {}^{L} p_{i} Lpi 将通过估计的姿态 L W T ‾ = ( L W R , L W t ) ∈ S E ( 3 ) {}_{L}^{W}\overline{T}=\left({}_{L}^{W} R,{}_{L}^{W} t\right)\in S E(3) LWT=(LWR,LWt)SE(3) 进一步投影到世界坐标系中,如图1(a)所示,估计不确定性为 L ( Σ R , Σ t ) \left(\Sigma_{R},\Sigma_{t}\right) (ΣR,Σt),通过以下刚性变换

W p i = L W R L p i + L W t ( 2 ) {}^W{ p}_i={}_L^W{ R}^L{ p}_i+{}_L^W{}{ t}\qquad(2) Wpi=LWRLpi+LWt(2)

因此,激光雷达点 W p i {}^{W} p_{i} Wpi 的不确定性为

Σ W p i = L W R Σ L p i L W R T + L W R ⌊ L p i ⌋ ∧ Σ R ⌊ L p i ⌋ ∧ L T W R T + Σ t ( 3 ) \Sigma_{W_{p_{i}}}={}_{L}^{W} R\Sigma_{L_{p_{i}} L}{}^{W} R^{T}+{}_{L}^{W} R\left\lfloor{}^{L} p_{i}\right\rfloor_{\wedge}\Sigma_{R}\left\lfloor{}^{L} p_{i}\right\rfloor_{\wedge L}^{T W} R^{T}+\Sigma_{t}\qquad(3) ΣWpi=LWRΣLpiLWRT+LWRLpiΣRLpiLTWRT+Σt(3)

其中 Σ R \Sigma_{R} ΣR L W R {}_{L}^{W} R LWR 在切空间中的不确定性, Σ t \Sigma_{t} Σt L W t {}_{L}^{W} t LWt 的不确定性。考虑到由于激光雷达测量和姿态估计引起的不确定性,不同位置的点云协方差有很大的差异:近距离的点的噪声主要由测距噪声主导,而远距离的点的噪声主要由方位噪声主导。单个激光雷达点的不确定性分析也是平面特征不确定性模型的基础。

2) 平面不确定性建模:

假设一个平面特征由一组激光雷达点 W p i ( i = 1 , … , N ) W_{p_{i}}(i=1,\ldots, N) Wpi(i=1,,N) 组成,每个点由于测量噪声和姿态估计误差而具有不确定性 W Σ p i {}^{W}\Sigma_{p_{i}} WΣpi(如(3)所示)。将点的协方差矩阵表示为 A:

p ˉ = 1 N ∑ i = 1 N W p i ; A = 1 N ∑ i = 1 N ( W p i − p ˉ ) ( W p i − p ˉ ) T ; ( 4 ) \bar{p}=\frac{1}{N}\sum_{i=1}^NW_{p_i};\quad A=\frac{1}{N}\sum_{i=1}^N\left({}^W p_i-\bar{p}\right)\left({}^W p_i-\bar{p}\right)^T;\qquad(4) pˉ=N1i=1NWpi;A=N1i=1N(Wpipˉ)(Wpipˉ)T;(4)

然后,平面可以通过其法向量 n 表示,它是与 A 的最小特征值相关联的特征向量,点 q = p ˉ q=\bar{p} q=pˉ 位于此平面上。由于 A 和 p ‾ \overline{p} p 都依赖于 W p i {}^{W} p_{i} Wpi,我们可以将平面参数(n,q)表示为 W p i {}^{W} p_{i} Wpi 的函数,如下所示:

[ n , q ] T = f ( W p 1 , W p 2 , . . . , W p N ) . ( 5 ) [n,q]^{T}=f({}^{W}p_{1},{}^{W}p_{2},...,{}^{W}p_{N}).\qquad(5) [n,q]T=f(Wp1,Wp2,...,WpN).(5)

基于第 III-A1 节的不确定性分析,每个激光雷达点 W p i {}^{W} p_{i} Wpi 有一个噪声 δ w p i ∼ N ( 0 3 × 1 , Σ w p i ) \delta w_{p_{i}}\sim\mathcal{N}\left(0_{3\times 1},\Sigma w_{p_{i}}\right) δwpiN(03×1,Σwpi)。因此,真实法向量 n g t n^{gt} ngt 和真实位置 q g t q^{gt} qgt(即在现实世界中需要估计的真实值)为

[ n g t , q g t ] T = f ( W p 1 + δ w p 1 , W p 2 + δ w p 1 , . . . , W p N + δ w p N ) ≈ [ n , q ] T + ∑ i = 1 N ∂ f ∂ W p i δ w p i ( 6 ) \begin{align*} \left[n^{gt},q^{gt}\right]^{T} &= f({}^{W}p_{1}+\delta_{w_{p_{1}}},{}^{W}p_{2}+\delta_{w_{p_{1}}},...,{}^{W}p_{N}+\delta_{w_{p_{N}}}) \\ &\approx \left[n,q\right]^{T}+\sum_{i=1}^{N}\frac{\partial f}{\partial^{W}p_{i}}\delta_{w_{p_{i}}} \\ \end{align*}\qquad(6) [ngt,qgt]T=f(Wp1+δwp1,Wp2+δwp1,...,WpN+δwpN)[n,q]T+i=1NWpifδwpi(6)
∂ f ∂ W p i = [ ∂ n ∂ W p i , ∂ q ∂ W p i ] T \frac{\partial f}{\partial^{W}p_{i}}=\left[\frac{\partial n}{\partial^{W}p_{i}},\frac{\partial q}{\partial^{W}p_{i}}\right]^{T} Wpif=[Wpin,Wpiq]T。假设 A 有特征向量 ∂ W p i \partial^{W} p_{i} Wpi 矩阵 U ′ U^{\prime} U,最小特征值 λ 3 \lambda_{3} λ3 和对应的特征向量 u 3 u_{3} u3,参考[28],我们可以对每个点 W p i {}^{W} p_{i} Wpi 的 n 和 q 求导如下:

∂ n ∂ W p i = U [ F 1 , 3 p i F 2 , 3 p i F 3 , 3 p i ] , F m , 3 p i = { ( W p i − q ) T N ( λ 3 − λ m ) ( u m n T + n u m T ) , m ≠ 3 , 0 1 × 3 , m = 3. \frac{\partial n}{\partial^{W}p_{i}}= U\begin{bmatrix}F_{1,3}^{p_{i}}\\ F_{2,3}^{p_{i}}\\ F_{3,3}^{p_{i}}\end{bmatrix}, F_{m,3}^{p_{i}}=\begin{cases}\frac{(^{W}p_{i}-q)^{T}}{N(\lambda_{3}-\lambda_{m})}(u_{m}n^{T}+n u_{m}^{T})&,m\neq 3,\\ &0_{1\times 3}&,m=3.\end{cases} Wpin=U F1,3piF2,3piF3,3pi ,Fm,3pi={N(λ3λm)(Wpiq)T(umnT+numT),m=3,01×3,m=3.

∂ q ∂ W p i = d i a g ( 1 N , 1 N , 1 N ) ( 7 ) \frac{\partial q}{\partial^{W}p_{i}}=diag\left(\frac{1}{N},\frac{1}{N},\frac{1}{N}\right)\qquad(7) Wpiq=diag(N1,N1,N1)(7)

然后 n 和 q 的协方差矩阵 Σ n , q \Sigma_{n,q} Σn,q 为:

Σ n , q = ∑ i = 1 N ∂ f ∂ W p i Σ W p i ∂ f ∂ W p i T ( 8 ) \Sigma_{n,q}=\sum_{i=1}^{N}\frac{\partial f}{\partial^{W}p_{i}}\Sigma_{W_{p_{i}}}\frac{\partial f}{\partial^{W}p_{i}}^{T}\qquad(8) Σn,q=i=1NWpifΣWpiWpifT(8)

可以看出 n 和 q 不是独立的,因为它们是从同一组噪声点计算得出的。

B. 粗到细高效体素地图构建

在本节中,我们首先解释粗-细体素地图的动机,然后介绍构建和更新体素地图的方法。

1) 动机:

如图 3 所示,激光雷达点通常是顺序采样的,因此点云扫描总是从稀疏到密集累积,特别是在户外环境中,点分布在更大的空间中。当点云相对稀疏时,常见的基于 surfel 的细到粗映射方法通常只能获得非常少量的平面,限制了它们在高分辨率激光雷达和相对较低的扫描率(例如,10Hz)中的应用,以便累积足够数量的点。然而,这将需要补偿累积期间的运动。为了解决这个问题,我们提出了一种粗到细的体素映射方法,可以在点云稀疏时构建一个粗略的体素地图,并在接收到更多点时细化地图。

在这里插入图片描述
图4:法向量协方差矩阵的迹随着点数增加而收敛。

2) 体素地图构建:

为了实现从粗到细的体素地图构建,我们为每个哈希表条目构建了一个自适应体素地图,并为每个哈希条目构建了一个八叉树。更具体地说,我们首先将空间(在全局世界框架中)切割成体素,每个体素的大小为粗略地图分辨率。然后,对于定义世界框架的第一个激光雷达扫描,包含的点被分配到体素中。有点的体素被索引到一个哈希表中。然后,对于每个有点的体素,如果所有包含的点都位于一个平面上(点协方差矩阵的最小特征值小于指定的阈值),我们存储平面点并计算平面参数(n,q)如(5)所示,以及它们的不确定性 En,q 如(8)所示;否则,当前体素将分裂成八个八分体,并在每个八分体中重复平面检查和体素切割,直到达到最大层数。请注意,体素有不同的大小,每个体素包含一个从包含的激光雷达原始点拟合的平面特征。

3) 体素地图更新:

对于在线激光雷达里程计,新的激光雷达点云扫描持续到来,它们的姿态如第 III-D 节所述进行估计。然后使用估计的姿态将新点注册到全局地图中。当新点位于一个未被占用的体素中时,它将构建该体素。否则,当新点被添加到一个现有的体素时,体素中的平面参数和不确定性应该被更新。这将导致随着新点的持续接收而不断增长的处理时间。为了解决这个问题,我们发现平面参数的不确定性会迅速收敛,如图 4 所示,每个点的位置携带一个均值为零、方差为 0.1m² 的高斯噪声。可以看到,当点的数量达到 50 时,法向量的不确定性就收敛了。不确定性收敛后,我们丢弃所有历史点,保留估计的平面参数(n,q)和协方差 En,q。一旦有更多的新点到来,我们只保留最新的 10 个点,并计算由这 10 个点组成的新平面法向量。如果新的法向量和之前收敛的法向量继续出现较大的差异,我们假设地图的这个区域已经改变,需要按照第 III-B2 节进行重建。

C. 点到平面配准

本节详细说明如何将新LiDAR扫描中的点与体素地图匹配,以构建姿态估计和后续点云注册的约束。基于点和平面准确的不确定性建模,我们可以轻松实现点到平面的扫描匹配。给定在世界坐标系中具有姿态先验的LiDAR点 ,我们首先通过其哈希键找到它所在的根体素(具有粗略地图分辨率)。然后,所有包含的子体素会被轮询,以寻找与该点的可能匹配。假设一个子体素包含一个具有法向量 n i n_i ni 和中心 q i q_i qi 的平面,我们计算点到平面的距离:

d i = n i T ( W p i − q i ) ( 9 ) d_i = n_i^T \left( {}^W p_i - q_i \right) \quad(9) di=niT(Wpiqi)(9)

如上所述,法向量 n i n_i ni、激光雷达点 W p i {}^W p_i Wpi 和中心 q i q_i qi 都具有不确定性。考虑到所有这些不确定性,我们得到:

d i = ( n i g t ⊞ δ n i ) T [ ( W p i g t + δ W p i ) − q i g t − δ q i ] ≈ n i g t T ( W p i g t − q i g t ) ⏟ o + J n i δ n i + J q i δ q i + J W p i δ W p i ⏟ w i \begin{align*} d_i &= (n_i^{g t} \boxplus \delta_{n_i})^T \left[ \left( {}^W p_i^{g t} + \delta_{W_{p_i}} \right) - q_i^{g t} - \delta_{q_i} \right] \\ &\approx \underbrace{n_i^{g t T} \left( {}^W p_i^{g t} - q_i^{g t} \right)}_{o} + \underbrace{J_{n_i} \delta_{n_i} + J_{q_i} \delta_{q_i} + J_{W_{p_i}} \delta_{W_{p_i}}}_{w_i} \end{align*} di=(nigtδni)T[(Wpigt+δWpi)qigtδqi]o nigtT(Wpigtqigt)+wi Jniδni+Jqiδqi+JWpiδWpi

这意味着

d i ∼ N ( 0 , Σ w i ) , Σ w i = J w i Σ n i , q i , W p i J w i T , ( 10 ) d_i \sim \mathcal{N} \left(0, \Sigma_{w_i} \right), \quad \Sigma_{w_i} = J_{w_i} \Sigma_{n_i, q_i, {}^W p_i} J_{w_i}^T, \qquad (10) diN(0,Σwi),Σwi=JwiΣni,qi,WpiJwiT,(10)

其中,

J w i = [ J n i , J q i , J W p i ] = [ ( W p i − q i ) T , − n i T , n i T ] Σ n i , q i , W p i = [ Σ n i , q i 0 0 Σ W p i ] . ( 11 ) \begin{align*} & J_{w_i} = \left[ J_{n_i}, J_{q_i}, J_{W_{p_i}} \right] = \left[ \left( {}^W p_i - q_i \right)^T, -n_i^T, n_i^T \right] \\ & \Sigma_{n_i, q_i, W_{p_i}} = \left[ \begin{array}{cc} \Sigma_{n_i, q_i} & 0 \\ 0 & \Sigma_{W_{p_i}} \end{array} \right]. \quad(11) \end{align*} Jwi=[Jni,Jqi,JWpi]=[(Wpiqi)T,niT,niT]Σni,qi,Wpi=[Σni,qi00ΣWpi].(11)

也就是说,如果点位于候选平面上,其距离 d i d_i di 应该服从 (10) 中的分布。因此,让分布的标准差为 σ = Σ w i \sigma = \sqrt{\Sigma_{w_i}} σ=Σwi ,我们可以检查测量的点到平面距离是否落在 3 σ 3\sigma 3σ 之内。如果是,它被选为有效匹配。此外,如果一个点根据 3 σ 3\sigma 3σ 标准匹配了多个平面,将匹配概率最高的平面。如果没有平面通过 3 σ 3\sigma 3σ 测试,该点将被丢弃,以去除由体素量化引起的可能的误匹配。

D. 状态估计

我们基于迭代扩展卡尔曼滤波器构建了一个激光雷达(惯性)里程计系统,类似于 FAST-LIO2[13]。假设我们有一个具有协方差 P ^ k \widehat{P}_{k} P k 的状态估计先验 x ^ k \widehat{x}_{k} x k。这个先验可以从激光雷达里程计的恒定速度假设(实验 A 和 B)或激光雷达惯性里程计的 IMU 传播(实验 C)中获得。这个先验将与第 III-C 节中的点到平面距离匹配融合,形成一个最大后验概率(MAP)估计。具体来说,第 i 个有效的点到平面匹配导致观测方程

z i = h i ( x k ) + v i ( 12 ) z_i = h_i(x_k) + v_i \quad(12) zi=hi(xk)+vi(12)

其中 z i z_i zi 是方程 (9) 中的点到平面距离残差 d i d_i di h i ( x k ) h_i(x_k) hi(xk) 是观测函数, v i ∼ ( 0 , R i ) v_i \sim (0, R_i) vi(0,Ri) 是观测噪声。将状态 x k x_k xk(即,传感器姿态 T k T_k Tk)代入 (9) 并在当前状态更新 x ‾ k \overline{x}_k xk 处线性化,我们得到:

z i = h i ( x k ) + v i = n i T ( W p i − q i ) = ( n i g t ⊞ δ n i ) T [ ( T k g t ⊞ δ T k ) ( L p i g t + δ L p i ) − q i g t − δ q i ] ≈ n i g t T ( T k g t L p i g t − q i g t ) ⏟ 0 + J T i δ T k ⏟ H i δ x k + J n i δ n i + J q i δ q i + J L p i δ L p i ⏟ v i \begin{align*} & z_i = h_i(x_k) + v_i = n_i^T \left( {}^W p_i - q_i \right) \\ &= \left( n_i^{g t} \boxplus \delta_{n_i} \right)^T \left[ \left( T_k^{g t} \boxplus \delta_{T_k} \right) \left( {}^L p_i^{g t} + \delta_{L_{p_i}} \right) - q_i^{g t} - \delta_{q_i} \right] \\ &\approx \underbrace{n_i^{g t^T} \left( T_k^{g t} L_{p_i^{g t}} - q_i^{g t} \right)}_{0} + \underbrace{J_{T_i} \delta_{T_k}}_{H_i \delta x_k} + \underbrace{J_{n_i} \delta_{n_i} + J_{q_i} \delta_{q_i} + J_{L_{p_i}} \delta_{L_{p_i}}}_{v_i} \end{align*} zi=hi(xk)+vi=niT(Wpiqi)=(nigtδni)T[(TkgtδTk)(Lpigt+δLpi)qigtδqi]0 nigtT(TkgtLpigtqigt)+Hiδxk JTiδTk+vi Jniδni+Jqiδqi+JLpiδLpi
这意味着(13)
R i = J v i Σ n i , q i , L p i J v i T ( 13 ) R_i=J_{v_i}\Sigma_{n_i, q_i,{}^L p_i} J_{v_i}^T\quad(13) Ri=JviΣni,qi,LpiJviT(13)
其中
J v = [ J n i , J q i , J L p i ] = ( T k ′ p i − q i ) T , − n T , n T R k ] J_{v} = \left[J_{n_i}, J_{q_i}, J_{L_{p_i}}\right] = \left(T_k' p_i - q_i\right)^T, -n^T, n^T R_k] Jv=[Jni,Jqi,JLpi]=(Tkpiqi)T,nT,nTRk]
Σ n i , q i , L p i = [ Σ n i , q i 0 0 Σ L p i ] \Sigma_{n_i, q_i, L_{p_i}} = \left[\begin{array}{cc} \Sigma_{n_i, q_i} & 0 \\ 0 & \Sigma_{L_{p_i}} \end{array}\right] Σni,qi,Lpi=[Σni,qi00ΣLpi]

最后,将状态先验与所有有效的测量结合,我们可以得到最大后验概率(MAP)估计:
min ⁡ x k ( ∥ x k ⊟ x ^ k ∥ P ^ k 2 + ∑ i = 1 m ∥ d i − H i ⋅ ( x k ⊟ x ‾ k ) ∥ R i 2 ) ( 14 ) \min_{x_{k}}\left(\left\|x_{k}\boxminus\widehat{x}_{k}\right\|_{\widehat{P}_{k}}^{2}+\sum_{i=1}^{m}\left\|d_{i}-H_{i}\cdot\left(x_{k}\boxminus\overline{x}_{k}\right)\right\|_{R_{i}}^{2}\right)\quad(14) xkmin(xkx kP k2+i=1mdiHi(xkxk)Ri2)(14)
其中第一部分是状态先验,第二部分是测量观测。

四. 实验

在本节中,为了展示我们的映射方法在不同环境和激光雷达类型下的高精度、高效率和适应性,我们在三种不同的环境中对三种典型的激光雷达进行了实验(城市环境、室内环境和非结构化室外环境)。使用的激光雷达的详细信息如表 I 所示。在每次实验中,我们将我们的方法与最先进的对比方法进行比较。所有实验都在配备有 Intel i7-10700 @ 2.9 GHz、16 GB RAM 和 Nvidia GeForce GTX 730 与 2 GB RAM(如果使用 GPU)的台式计算机上进行。

传感器类型频率扫描模式FoV
HDL-64E S2机械式10Hz重复式360°×32°
Realsense L515固态30Hz重复式70°×55°
Livox Avia固态10Hz非重复式70°× 77°

表 I:不同类型的激光雷达

五. 结果

在这里插入图片描述
图5:序列00到10的轨迹。蓝色轨迹是我们方法获得的相机路径,红色轨迹是地面真实值。黑点表示起始点。
在这里插入图片描述
在这里插入图片描述
图6:在KITTI训练序列00中,我们自适应体素地图中的平面特征示意图。平面特征通过其不确定性(平面协方差矩阵的迹,见公式(8))着色。平面显示为一个圆盘,半径由公式(4)中定义的点协方差矩阵 𝐴 的最大特征值决定。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/58607.shtml

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

相关文章

使用LangChain控制大模型的输出——解析器Parser

LangChain框架中有两个好用的工具: 提示词模板(PromptTemplate)用于指定LLM的输入,解析器(Parser)来正确解释LLM给出的输出 即: 提示词模板(PromptTemplate):用于格式化地接受输入string变量,作为完整的提示词。 如 给…

数据结构与算法实验练习(二)(排序及线性表的应用)

数据结构与算法分析课下实验练习,现记录一下解答过程,欢迎大家批评指正。 声明:本题目来源于西安交通大学电信学院原盛老师,任何单位或个人在使用、转载或引用本题目时,请务必标明出处为“西安交通大学电信学院原盛老…

关于回溯与分支限界的一些介绍

这篇文章将介绍回溯算法与分支限界算法的有关概念、具体应用及代码等内容。 一、回溯法 1.1 概念 回溯法是一种试探法,所以它也叫试探算法。它尝试构建问题的解,并且在发现解不满足条件的时候撤销选择(即“回溯”),…

day05-Filebeat扩展

Filebeat对接ES加密集群 #查看集群状态 [09:22:25 rootelk1:~]#curl 10.0.0.91:9200/_cat/nodes -u elastic:1234561.编写配置文件 [09:52:06 rootelk3:/etc/filebeat]#vim 12-log-to-es_tls.yamlfilebeat.inputs: - type: logpaths:- /var/log/nginx/access.log*json.keys_un…

Vue全栈开发旅游网项目(3)-Vue路由配置

1. 配置路由 1.1 导入路由工具 文件地址:src\router\index.js import { createRouter, createWebHistory } from vue-router//导入配置路由的工具 import HomeView from ../views/HomeView.vue//导入组件const router createRouter({//创建路由对象history: cre…

代随(136):图论dfs——邻接矩阵

题干&#xff1a; 代码&#xff1a; #include <iostream> #include <vector> using namespace std;vector<vector<int>>res; vector<int>path;void dfs(vector<vector<int>>&graph, int x, int n) {if(x n){res.push_back(pat…

精选录屏软件大赏:满足不同场景需求的录制利器

现在是互联网的世界&#xff0c;所以很多时候学习、工作我们都离不开电脑。在我们通过互联网查看网课、开网络会议的时候是不是会因为速度太快而来不及记录&#xff1f;那我推荐使用一些windows录屏软件来记录所有重点&#xff0c;方便我们后期复盘。 1.FOXIT录屏大师 链接&a…

【python】OpenCV—findContours(4.5)

文章目录 1、功能描述2、原理分析3、代码实现4、效果展示5、完整代码6、参考 1、功能描述 输入图片&#xff0c;计算出图片中的目标到相机间的距离 2、原理分析 用最简单的三角形相似性 已知参数&#xff0c;物体的宽度 W W W&#xff0c;物体到相机的距离 D D D&#xff0…

【华为HCIP实战课程二十八】中间到中间系统协议IS-IS邻居关系排错,网络工程师

一、ISIS邻居关系条件 1、同一层次(比如Level-2路由器不能和Level-1路由器形成邻居关系) 2、同一区域(L1必须同一区域) 3、同一网段 R1和R2之间分别配置如下IP地址和掩码: R1 的接口S1/0/0掩码为/24 R2的接口S1/0/0配置成掩码/28: 此时R1和R2依然可以建立ISIS邻居关系…

文件操作和 IO(一):文件基础知识 文件系统操作 => File类

目录 1. 什么是文件 1.1 概念 1.2 硬盘, 内存, 寄存器之间的区别 1.3 机械硬盘和固态硬盘 2. 文件路径 2.1 绝对路径 2.2 相对路径 3. 文件分类 4. File 类 4.1 属性 4.2 构造方法 4.3 方法 1. 什么是文件 1.1 概念 狭义上的文件: 保存在硬盘上的文件广义的上的文…

Flutter Color 大调整,需适配迁移,颜色不再是 0-255,而是 0-1.0,支持更大色域

在之前的 3.10 里&#xff0c; Flutter 的 Impeller 在 iOS 上支持了 P3 广色域图像渲染&#xff0c;但是当时也仅仅是当具有广色域图像或渐变时&#xff0c;Impeller 才会在 iOS 上显示 P3 的广色域的颜色&#xff0c;而如果你使用的是 Color API&#xff0c;会发现使用的还是…

web自动化测试平台开发之核心执行器

web自动化测试平台开发之核心执行器 一、如何从自动化框架到核心执行器二、核心执行器框架逻辑梳理三、核心执行器利用命令驱动执行 一、如何从自动化框架到核心执行器 脚本:底层用了三个内容:pythonpytestselenium&#xff0c;线性脚本&#xff0c;只是单纯的把功能测试用例转…

Rust 力扣 - 2090. 半径为 k 的子数组平均值

文章目录 题目描述题解思路题解代码题解链接 题目描述 题解思路 半径为 k 的子数组平均值 等价于 子数组长度为2 * k 1的总和 除于 2 * k 1 我们遍历长度为2 * k 1的窗口&#xff0c;我们只需要记录窗口内的平均值即可 题解代码 impl Solution {pub fn get_averages(num…

直接内存、死锁、方法句柄

直接内存 1. 不是虚拟机运行时数据区的一部分&#xff0c;也不是《Java虚拟机规范》中定义的内存区域 2. 直接内存是在Java堆外、直接向系统申请的内存区间 3. 来源于NIO,通过存在堆中的DirectByteBuffer操作Native内存 4. 通常&#xff0c;访问直接内存的速度会优于Java堆&am…

C++《list》

在本篇当中我们将学习STL中的list&#xff0c;在此list就是我们之前在数据结构学习过的链表&#xff0c;在本篇中我们要来了解list当中的成员函数该如何使用&#xff0c;由于list各个函数的接口和之前学习过的vector类型&#xff0c;因此在学习list的使用就较为轻松。在lis篇章…

【牛客刷题实战】二叉树遍历

大家好&#xff0c;我是小卡皮巴拉 文章目录 目录 牛客题目&#xff1a; 二叉树遍历 题目描述 输入描述&#xff1a; 输出描述&#xff1a; 示例1 解题思路 问题理解 算法选择 具体思路 解题要点 完整代码&#xff08;C语言&#xff09; 兄弟们共勉 &#xff01;&…

vmvare启动freebsd操作系统密码忘记了怎么办?

本章教程,主要介绍,通过vmvare安装的freebsd操作系统,密码忘记了,如何重置密码。 一、重启虚拟机 在重启过程中,按键盘中是数字2,进入单用户模式。 二、进入到shell界面 在出现“Enter full pathname of shell or RETURN for /bin/sh:”直接按回车键。 三、输入命令 mou…

【设计模式系列】代理模式(八)

一、什么是代理模式 代理模式&#xff08;Proxy Pattern&#xff09;是一种结构型设计模式&#xff0c;它为其他对象提供一种代理以控制对这个对象的访问。代理模式在不直接访问实际对象的情况下&#xff0c;提供了对目标对象的间接访问。通过引入一个代理对象来间接操作实际对…

WPS查询函数VLOOKUP,匹配寻找值自动带入值

想实现在下表输入物料名称后&#xff0c;把上表中的单位自动带入 那就要用到VLOOKUP函数&#xff0c;获取第2个表第1列的值后去第1个表的第1列匹配&#xff0c;匹配到后得到行数值&#xff0c;把第1个表的第2列赋值给第2个表的第2列。 Vlookup函数参数为Vlookup(查找值&#…

sqoop问题汇总记录

此篇博客仅记录在使用sqoop时遇到的各种问题。持续更新&#xff0c;有问题评论区一起探讨&#xff0c;写得有不足之处见谅。 Oracle_to_hive 1. main ERROR Could not register mbeans java.security.AccessControlException: access denied ("javax.management.MBeanTr…