0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

一种快速的激光视觉惯导融合的slam系统

3D视觉工坊 来源:3D视觉工坊 作者:Liam 2022-11-09 09:55 次阅读

本文提出了一种快速的激光视觉惯导融合的slam系统,可以分为LIO和VIO两个紧耦合的子系统。LIO直接把当前的扫描点和增量构建的地图对齐,地图点也会辅助基于直接法的VIO系统进行图像对齐。为了进一步提高vio系统的鲁棒性和准确性,作者提出了一种新的方法来剔除边缘或者在视觉中遮挡的地图点。

本文方法可以适用于机械雷达和固态雷达,并能实时的ARMIntel处理器上运行,作者已经开源了代码。

代码地址:https://github.com/hku- mars/FAST- LIVO

本文的主要贡献有:

一个建立在两个基于直接法的紧耦合的完整的激光视觉惯导融合的slam框架;

一个直接高效的最大程度重用LIO构建的地图的VIO框架,具体来说利用地图点和观测到的图像像素块结合后投影到一个新的图像上通过最小化光度误差来得到全部状态的位姿估计结果。

通过在视觉中使用雷达点云可以避免特征的提取和三角化,同时可以在测量层对视觉和激光雷达进行融合。

开源了这项伟大的工作。

这项工作的系统框架如下所示:

1d06fd6c-5fba-11ed-8abf-dac502259ad0.png

LIO:利用后向递推的方法剔除点云的运动畸变,利用去畸变的点云基于点到平面的距离进行帧到地图的匹配。

VIO:视觉基于当前的FOV从全局的视觉地图中选取当前能观测到的子地图并剔除被遮挡和深度不连续的点,然后基于稀疏光流进行帧到地图点匹配。

最后激光点到平面的残差和视觉的光度误差及IMU前向传播的值放到基于误差状态的迭代卡尔曼滤波器中得到准确的位姿,并利用该位姿把新的观测加到地图中。

状态估计: 系统利用紧耦合的ESIKF来进行状态估计,首选需要知道两个运算的定义:

1d4729c8-5fba-11ed-8abf-dac502259ad0.png

其中Exp和Log表示旋转矩阵和旋转向量之间的基于罗德里格斯公式的映射关系。

状态转移模型: 在本文的系统中假设激光雷达,相机和imu之间的时间offset是已知的,定义imu的第一帧为全局坐标系,三个传感器之间固联且外参已知。第i帧imu在离散模型下的状态转移方程为:

1d52f74e-5fba-11ed-8abf-dac502259ad0.png

T表示imu采样的时间间隔,x是状态,u是输入,w是噪声,f的具体形式为:

1d67c28c-5fba-11ed-8abf-dac502259ad0.png

前两个状态分别表示imu在全局坐标系下的姿态和平移,最后一个表示重力在全局坐标系下的方向。 前向传播: 利用前向传播来得到i+1时刻的状态和协方差矩阵,具体形式为:

1d8d9048-5fba-11ed-8abf-dac502259ad0.png

在前向传播中把噪声项设置为0,其中Q是噪声的协方差矩阵。大家应该知道下尖是后验,就是已经融合了视觉和激光雷达观测的结果,通过运动方程我们可以得到新的视觉或者激光雷达来的时候的先验的状态,然后等激光或者视觉帧来的时候进行对应的量测更新。

(这里多说一点,在做自动驾驶的时候,由于观测后的补偿量可能较大导致位姿产生小范围的跳变,所以我们一般都会把大的补偿量分成小的补偿量进行补偿,虽然这种做法不严密但是能保证位姿的平滑性,大家也可以想想有什么更好的办法)。

帧到地图的量测更新:

激光雷达的测量模型:

新的激光帧来之后首先进行点云运动畸变矫正,当进行帧到地图匹配到时候我们假设新观测的点在和他近邻的地图中的平面上(用方向向量和中心点表示),如果先验的位姿是准的可以得到如下约束:

1da81cd8-5fba-11ed-8abf-dac502259ad0.png

这个约束是把当前的点利用先验的位姿投影到地图上,找到最近的平面后投影点应该在平面上,所以两个点相减得到的向量为平面上的向量,和平面的法向量垂直,点乘为0。

实际上,为了找到距离该点最近的平面,利用先验的位姿把点投影到地图中找到距离该投影点最近的五个点(地图点是用ikd_tree维护的)来拟合平面,为了考虑雷达点的测量噪声,会加上一个矩阵表示每个点的权重。

2.视觉的测量模型:

当接收到一帧新的图像,我们从全局的视觉地图中提取落在当前视野内的地图点。对于地图中的点,已经被先前的帧观测过很多次,我们找到和当前观测角度相近的一帧作为参考帧,然后把地图点投影到当前帧获取地图点的光度值,应该和参考帧中的patch获取的光度值一样,以此构建残差:

1db8fdbe-5fba-11ed-8abf-dac502259ad0.png

预印版没有解释A,我猜测因为是像素块进行光度匹配,所以A矩阵是权重矩阵,patch中心点权重高,周围点权重低,大家可以看代码验证一下。 基于迭代的卡尔曼滤波器更新:
通过公式3我们可以得到先验的状态和协方差的值,先验的分布可以表示为:

1dcb28b8-5fba-11ed-8abf-dac502259ad0.png

当视觉和激光的观测来的时候我们可以进行量测更新以得到状态量后验的结果:

1ddbb0e8-5fba-11ed-8abf-dac502259ad0.png

上式为非凸的函数,可以基于高斯牛顿的方法优化求解最小值,但是高斯牛顿和基于迭代的卡尔曼滤波器是等价的,参考文献的21有证明。为了保证流型的约束,在每次迭代的时候,都把误差状态参数化到切空间中(通过第一个公式定义的方法),得到的误差状态更新到状态量然后进行下次迭代直到收敛,收敛的状态和协方差用于imu的前向递推,也用于视觉地图和激光雷达地图点增量更新。

地图管理: 地图主要有LIO构建的雷达点云图和VIO构建的用patchs表示的视觉全局地图。

1.雷达地图管理: 激光雷达点云图的管理和FAST-LIO2一致,利用ikd_tree进行管理,ikd_tree提供了一些查询、插入和删除的接口,还可以根据配置参数下采样地图,同时新帧来的时候基于kd_tree的数据结构可以大大缩短最近点查找的时间(基于并行化加速后,2000个点大概0.6ms)。

2.视觉全局地图管理: 视觉的全局地图是原来观测过的雷达点云的集合,每个雷达点都对应着多个观测到这个激光点点视觉帧到多个像素块。

视觉全局地图的数据结构和更新的方法如下: 数据结构:为了快速找到落在当前视野内的地图点,我们利用体素保存视觉全局地图。

体素通过哈希表来管理,每个体素中保存点的位置,多个观测到该点的像素的patch的金字塔和每个patch金字塔的相机位姿。

视觉的子地图和外点剔除:即使体素的数量比视觉地图定的数量少的多,但是确定他们中的哪些在当前的视野中仍然非常耗时,尤其是体素数量很大时。为了解决这个问题,作者针对最近的雷达扫描的每个点基于哈希表查找这些体素。如果相机FoV和雷达大致对齐,则落在相机FoV中的地图点很可能包含在这些体素中。

因此,视觉子图可以通过这些体素包含的点进行FoV检查获得。 视觉子图可能包含在当前的图像帧中被遮挡或具有不连续深度的地图点,这会降低VIO的精度。为了解决这个问题,作者基于当前的状态量将视觉子图中的所有点投影到当前帧并在每个40x40的像素网格中保留深度最小的点。

此外,作者将当前帧雷达扫描点投影到当前帧,并检查他们的深度来检查他们是否遮挡了投影到9x9领域内的其他地图点。被遮挡的点也会被剔除。 视觉子地图更新:在对齐新的图像帧后,我们将当前图像中的patch附加到FoV内的地图点中,这样地图点就可能具有均匀分布视角的有效patch。

具体而言,作者在帧对齐后选择具有高光度误差的patch,如果距离上次添加patch超过20帧,或者当前帧中patch距离上次添加了patch的参考帧中的像素位置超过40像素,则将向地图点中添加新的patch。从当前图像中提取新的大小为8×8像素。并构建金字塔,并保存相机的位姿。

除了向地图点添加patch之外,还需要向视觉全局地图添加新的地图点。为此作者将当前图像分成40×40像素的网格,并在其上投影最近一次激光雷达扫描中的点。每个网格中具有最高梯度的投影激光雷达点将添加到视觉全局地图中,以及在其中提取的patch和相机位姿。为了避免将边缘上的激光雷达点添加到视觉地图中,跳过了具有高局部曲率的边缘点。






审核编辑:刘清

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 处理器
    +关注

    关注

    68

    文章

    18275

    浏览量

    222157
  • SLAM
    +关注

    关注

    22

    文章

    390

    浏览量

    31590
  • 激光视觉
    +关注

    关注

    0

    文章

    7

    浏览量

    5997

原文标题:激光视觉惯导融合的slam系统

文章出处:【微信号:3D视觉工坊,微信公众号:3D视觉工坊】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    工程实践中VINS与ORB-SLAM的优劣分析

    ORB-SLAM一种基于特征的单目视觉SLAM系统,广泛用于实时三维地图构建和机器人定位。该系统
    的头像 发表于 04-08 10:17 374次阅读
    工程实践中VINS与ORB-<b class='flag-5'>SLAM</b>的优劣分析

    基于滤波器的激光SLAM方案

    激光 SLAM 任务是搭载激光雷达的主体于运动中估计自身的位姿,同时建立周围的环境地图。而准确的定位需要精确的地图,精确的地图则来自于准确的定位,定位侧重自身位姿估计,建图侧重外部环境重建。
    发表于 03-04 11:25 202次阅读
    基于滤波器的<b class='flag-5'>激光</b><b class='flag-5'>SLAM</b>方案

    基于视觉SLAM的研究现状

    目前视觉SLAM系统可以在微型个人计算机(PC)和嵌入式设备中运行,甚至可以在智能手机等移动设备中运行(Klein和Murray,2009)。与室内或室外移动机器人不同,自动驾驶车辆具有更复杂的参数,尤其是当车辆在城市环境中自动
    发表于 12-04 09:22 730次阅读
    基于<b class='flag-5'>视觉</b><b class='flag-5'>SLAM</b>的研究现状

    一种基于RGB-D图像序列的协同隐式神经同步定位与建图(SLAM)系统

    提出了一种基于RGB-D图像序列的协同隐式神经同步定位与建图(SLAM)系统,该系统由完整的前端和后端模块组成,包括里程计、回环检测、子图融合
    的头像 发表于 11-29 10:35 232次阅读
    <b class='flag-5'>一种</b>基于RGB-D图像序列的协同隐式神经同步定位与建图(<b class='flag-5'>SLAM</b>)<b class='flag-5'>系统</b>

    什么是激光雷达3D SLAM技术?

    什么是激光雷达3DSLAM?在了解这个概念之前,我们首先需要弄懂什么是“SLAM”。SLAM,英文是SimultaneousLocalizationandMapping,意思是即时定位与建图。通俗
    的头像 发表于 11-25 08:23 1072次阅读
    什么是<b class='flag-5'>激光</b>雷达3D <b class='flag-5'>SLAM</b>技术?

    中强光智能3D激光SLAM无人叉车技术特点详解

    中强光智能自主研发的3D激光SLAM无人叉车KSRB1425由智能3D激光导航出发,结合视觉及多项感知融合技术,搭配先进的演算能力,实现智能
    的头像 发表于 11-10 15:59 458次阅读

    探讨目前主流3D激光SLAM算法方案

     激光SLAM局部定位精度高但全局定位能力差且对环境特征不敏感,而视觉SLAM全局定位能力好但局部定位相对激光雷达较差,两者
    发表于 10-23 11:01 821次阅读
    探讨目前主流3D<b class='flag-5'>激光</b><b class='flag-5'>SLAM</b>算法方案

    一种结构化道路环境中的视觉导航系统详解

    根据结构化道路环境的特点提出了一种将边沿检测和道路环境知识相结合的机器视觉算法 , 并结合基于行为响应的路径规划方法和智能预瞄控制方法 , 实现了套基本的机器人视觉导航
    发表于 09-25 07:23

    AVT1200 北斗高精度车载定位终端

    相位差分技术,实时获得精准位置,支持定向功能,可辅助判断汽车航向。 支持惯性传感导航技术:在GNSS信号失锁的情况下,通过内置的传感器数据运算,实现车辆持续定位. 支持地图融合定位技术:将卫星定位、
    发表于 09-08 14:29

    SLAM领域中的VIO(视觉惯性里程计)

    IMU测量可以提高视觉SLAM在某些复杂场景的鲁棒性,在于相机快速运动、动态障碍物、光线明暗变化明显、环境中纹理缺失等导致图像信息质量较差的情况下,利用IMU信息仍能得到有效的定位结果。
    的头像 发表于 09-07 16:57 1374次阅读
    <b class='flag-5'>SLAM</b>领域中的VIO(<b class='flag-5'>视觉</b>惯性里程计)

    视觉SLAM是什么?视觉SLAM的工作原理 视觉SLAM框架解读

    近年来,SLAM技术取得了惊人的发展,领先一步的激光SLAM已成熟的应用于各大场景中,视觉SLAM虽在落地应用上不及
    的头像 发表于 09-05 09:31 1785次阅读
    <b class='flag-5'>视觉</b><b class='flag-5'>SLAM</b>是什么?<b class='flag-5'>视觉</b><b class='flag-5'>SLAM</b>的工作原理 <b class='flag-5'>视觉</b><b class='flag-5'>SLAM</b>框架解读

    一种融合语义不变量的点线立体SLAM系统

    能导致线段数据的不正确关联,从而将误差引入系统并加剧系统的累积误差。针对这一问题,本文提出了一种结合语义不变量的点线立体视觉SLAM
    的头像 发表于 09-01 17:16 345次阅读
    <b class='flag-5'>一种</b><b class='flag-5'>融合</b>语义不变量的点线立体<b class='flag-5'>SLAM</b><b class='flag-5'>系统</b>

    什么是SLAM视觉SLAM怎么实现?

    上周的组会上,我给研一的萌新们讲解什么是SLAM,为了能让他们在没有任何基础的情况下大致听懂,PPT只能多图少字没公式,这里我就把上周的组会汇报总结一下。 这次汇报的题目我定为“视觉SLAM:一直在
    的头像 发表于 08-21 10:02 2196次阅读
    什么是<b class='flag-5'>SLAM</b>?<b class='flag-5'>视觉</b><b class='flag-5'>SLAM</b>怎么实现?

    视觉SLAM开源方案汇总 视觉SLAM设备选型

    SLAM至今已历经三十多年的研究,这里给出经典视觉SLAM框架,这个框架本身及其包含的算法已经基本定型,并且已经在许多视觉程序库和机器人程序库中提供。
    发表于 08-10 14:15 460次阅读
    <b class='flag-5'>视觉</b><b class='flag-5'>SLAM</b>开源方案汇总 <b class='flag-5'>视觉</b><b class='flag-5'>SLAM</b>设备选型

    3D激光SLAM是用LOAM还是LeGo-LOAM?

    激光slam中,LOAM(Lidar Odometry and Mapping in Real-time)系列具有举足轻重的地位。
    的头像 发表于 06-28 09:25 433次阅读
    3D<b class='flag-5'>激光</b><b class='flag-5'>SLAM</b>是用LOAM还是LeGo-LOAM?