Loam livox: A fast, robust, high-precision LiDAR odometry and mapping package for LiDARs of small Fo

Loam livox: A fast, robust, high-precision LiDAR odometry and mapping package for LiDARs of small FoV

Points Selection And Feature Extraction 选点和提取特征

在这里插入图片描述

A. Points selection 选点

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

B. Feature extraction 提取特征

Iterative Pose Optimization 迭代位姿优化

A. Residual of edge-to-edge 边到边

我们使用 ξ k \xi_k ξk ξ m \xi_m ξm分别表示所有的在当前帧和地图的所有边线特征。对于每一个 ξ k \xi_k ξk中的点,我们在 ξ m \xi_m ξm中找到最近的5个点。为了加速搜索的速度,我们建立了一个 ξ m \xi_m ξm的kdtree。而且,这个kd-tree的线程是一旦收到上一针registered 帧或者子帧就会被另一个并行的线程构建。这样做的话当接收到新数据的时候,KD-tree就可以立马被用上。

我们用符号 P l P_l Pl代表当前帧内 ξ k \xi_k ξk的一个点。有一点我们需要注意的是,点 P l P_l Pl是在当前雷达局部坐标系的,但是 ξ m \xi_m ξm表示的是全局地图坐标系里的点,为了找到 P l P_l Pl ξ m \xi_m ξm里面最近的点,我们需要把局部雷达坐标系投影到全局坐标系里面,公式如下:
在这里插入图片描述
这里的雷达位姿是当前帧内最后一个点被扫描到的时候,同时需要被位姿优化,即还没优化的时候的位姿。这里我们使用雷达一帧内收到最后一个点的位姿来代表雷达整个一帧的位姿,并且所有的点都会基于整个位姿被投影到全局的地图里。同时需要注意的是当前帧的最后一个点实际上就是下一帧的第一个点。(这里文章为什么会这么写????,难道是因为livox扫描的pattern特殊?)

我们用 P i P_i Pi表示 P w P_w Pw里第i个在 ξ m \xi_m ξm里最近的点。为了保证 P i P_i Pi确实是在一条线上,我们计算 P w P_w Pw内m个最近的点均值和方差。本论文里设m为5。如果最大的特征值是第二大特征值的三倍还多,我们认为 P w P_w Pw里面最近的点会构成一条线,同时 P w P_w Pw会位于这条线上。残差可以这样计算:
在这里插入图片描述
这里的部分比loam那里简洁不少

B. Residual of plane-to-plane 平面到平面

和边特征点相似的是,对于当前帧内平面特征集合里面的一个点,我们找到5个地图内最近的平面特征的点。我们同样需要确定5个最近点确实是在同一个平面内,需要计算他们的协方差矩阵。如果最小的特征值是第二小的特征值小三倍,我们计算这两个平面的误差距离如下:
在这里插入图片描述

C. Inframe motion compensation 帧内运动补偿

帧内运动补偿
3D点由于是在不同时刻扫描到的,同时还伴随着雷达不停的运动。为了消除运动畸变的影响,我们提出如下两种方法:

C.1 Piecewise Processing 分段处理

一个简单且高效的消除运动畸变的方法就是分段处理。我们将传来的帧分为三个连续的子帧,然后将这三个子帧独立匹配到迄今为止积累的同一张地图。在每一个子帧扫描的期间,所有的点都会被投影到全局地图根据子帧终点的雷达位姿。这样做的话,每一个子帧的时间间隔是原帧的1/3。 尽管这个方法看起来很简单,但是效果出奇的好。另外,这种分段处理的好处是通过并行匹配每个子帧来利用现代 CPU 中的多核结构。

C.2 Linear interpolation 线性插值

另一个常用的运动补偿的方法就是线性插值。我们使用 ( R k , T k ) (R_k, T_k) (Rk,Tk)表示当前帧的最后一个点对应的雷达位姿, ( R k − 1 , T k − 1 ) (R_{k-1}, T_{k-1}) (Rk1,Tk1)表示前一帧,用 ( R k − 1 k , T k − 1 k ) (R^k_{k-1}, T^k_{k-1}) (Rk1k,Tk1k)代表两帧之间的相对运动,这样的话:
在这里插入图片描述
假设 T k − 1 T_{k-1} Tk1是在之前帧最后一个点的采样时间。对于任何一个在当前帧采样时刻t内的一个点,我们可以计算 s = ( t − t k − 1 ) / ( t k − t k − 1 ) s=(t-t_{k-1})/(t_k-t_{k-1}) s=(ttk1)/(tktk1), 然后位姿可以线性的插值在t时刻:
在这里插入图片描述
对于k-1时刻的位姿,当前时间的lidar位姿计算如下:
在这里插入图片描述
我们可以通过插值的位姿投影t时刻的点到全局坐标系,表示如下:
在这里插入图片描述

D. Outliers rejection, dynamic objects filtering

为了避免移动的物体在真实环境下带来的扫描匹配的精度,我们实现了一个动态目标滤除的方法如下:我们重新找到每一个特征点的最近点,同时添加边到边的残差和平面到平面的残差对于目标的function,我们先迭代一小轮的位姿优化。真个算法如下表示:
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值