(一)简介
1、常用VSLAM开源框架对比,初步研究方向确定
2、ORB-SLAM3的数据集测试,各种模式下的运行性能对比,及IMU模式下与Vins对比实验
3、adas视频在ORB-SLAM3下的运行测试,及出错分析与修改
4、AVP-SLAM算法及众包地图构建论文研究,验证基于ICP的点云配准
5、对比AVP-SLAM与基于结构的由粗到精高精度地图定位方案,确定低成本的基于高精度地图的定位方案
6、确定方案VIO:介绍对比ORB-SLAM3与vins-mono的惯导融合方案异同,重点vins的IMU初始化,IMU相关残差,及其边缘化原理,对比两者结构,初步选择vins方案
7、IPM图像拼接:周视相机内外参标定方案,针孔相机及鱼眼相机的IPM推导,鱼眼相机标定,鸟瞰图拼接
8、基于kitti数据的建图模块构建,bug调试并优化rviz上点云显示
9、车道线语义分割相关调研和测试工作
10、之后工作的方向、细节
(二)VSLAM开源框架对比
不同传感器组成的特点:
1、纯单目:尺度不确定性导致需要初始化,同时由于尺度不确定可以实现大尺度范围下工作;
2、纯双目:可以通过三角化直接获取真实尺度,鲁棒性较单目高;由于视觉误匹配等各种原因,双目的精度会比单目差一点;
3、视觉+IMU:IMU 的引入可在快速运动时能够减少一些丢失,鲁棒性提高;而精度上与 VO 相近或略有下降。
各方案详细对比:
类别 | 算法 | 前端 | 后端 | 回环 | 精度 | 鲁棒性 | 开发 | 实时性 |
纯单目 | LSD-SLAM | Edge direct | PG | FABMAP PG | 3 | 在光照变化较小情况下,跟踪稳定性好,鲁棒性好 | 易 | 可在CPU 实时运行半稠密建图 |
ORB-SLAM2 | ORB | Local BA | DBoW2 PG+BA | 4 | 慢速运动下鲁棒性好,可实现重定位 | 易 | 由于基于特征点,运行速度较慢 |
SVO | Direct | Local BA | 无 | 3 | 源码只适用平面场景,平移运动 | 易 | 轻便,运行速度快 |
纯双目 /RGB-D | RTAB-MAP | GFTT/BRIEF | Local BA | DBoW2 PG | 3 | 相对于RGBD-SLAMV2较好 | 难 | 在ROS下可在大规模场景中流畅运行 |
RGBD-SLAM-V2 | Featrues | Local BA | DBoW2 PG | 3 | 鲁棒性一般 | 易 | 实时性较差,必须慢速运动 |
单目+IMU | VIORB-SLAM2 | ORB | Local BA | DBoW2 PG+BA | 4 | 加入IMU,较好于ORB-SLAM2 | 中 | 与ORB-SLAM2类似 |
VINS-MONO | ShiTomasi+KLT | Local BA | DBoW2 PG | 4 | 基于滑窗重定,跟踪失败可重定位 | 易 | 模块可拆分,运行效率较高 |
ORB-SLAM3 | ORB | Local BA | DBoW2 PG+BA | 5 | 鲁棒性高,跟踪失败仍能继续工作 | 易 | 系统较大,实时性一般 |
双目+IMU | VINS-FUSION | ShiTomasi+KLT | Local BA | DBoW2 PG | 4 | 鲁棒性高于VINS-MONO | 中 | 模块可拆分,运行效率较高 |
根据方案完整度,二次开发可行性,及道路应用场景要求,选定ORB-SLAM3,及vins-mono进行深入研究。
(三)ORB-SLAM3运行测试
数据集测试:
【注】1.特征点提取后,要在distributeOctTree函数里用到了sort排序,应该是排序加入了不稳定因素,使得每次保留的特征点不一样;2.多线程:并行运行过程中,每次电脑的运行状况不同;3.算EPnP的ransac不是稳定的;导致每次运行结果都有变化,故以下结果中RMSE和SCALE取运行多次的均值。
数据 | 运动特征 | 模式 | Max (cm) | Min (cm) | Median (cm) | RMSE (cm) | SCALE |
MH_01 (easy) | length:80.6m time:182s 回环多,速度慢 | pure mono | 10.4 | 0.3 | 3.0 | 3.6 | -- |
pure stereo | 6.3 | 0.2 | 2.7 | 3.1 | 1 |
mono+IMU | 14.0 | 0.4 | 4.5 | 5.8 | 1 |
stereo+IMU | 14.7 | 0.4 | 5.1 | 6.2 | 1 |
MH_02 (easy) | length:73.4m time:150s 回环多,速度慢 | pure mono | 42 | 0.7 | 5.8 | 6.5 | -- |
pure stereo | 4.6 | 0 | 1.24 | 2.1 | 1 |
mono+IMU | 11 | 0.4 | 3.4 | 4.6 | 0.999 |
stereo+IMU | 8.8 | 0.1 | 2.7 | 3.8 | 1 |
MH_03 (medium) | length:130.9m time:132s 回环多,距离长,速度快 | pure mono | 25.3 | 0.1 | 3.4 | 4.3 | -- |
pure stereo | 9.6 | 0.2 | 1.9 | 2.5 | 1 |
mono+IMU | 13 | 0.6 | 5.4 | 6.3 | 0.995 |
stereo+IMU | 10.7 | 0.5 | 3.9 | 5.2 | 0.995 |
MH_04 (difficult) | length:91.7m time:99s 回环少,速度快,中间有段环境光度变化大 | pure mono | 40.5 | 2.1 | 8.8 | 13.2 | -- |
pure stereo | 25.7 | 1.1 | 9.5 | 12.75 | 1.008 |
mono+IMU | 27.8 | 1.8 | 11.5 | 15.55 | 0.986 |
stereo+IMU | 17.2 | 0.7 | 6.0 | 6.6 | 0.998 |
MH_05 (difficult) | length:97.5m time:111s 与MH04相似 | pure mono | 23.6 | 0.6 | 5.3 | 6.4 | -- |
pure stereo | 16 | 0.4 | 3.9 | 5.4 | 0.994 |
mono+IMU | 27.3 | 0.3 | 7.6 | 9.2 | 0.992 |
stereo+IMU | 17.4 | 1.4 | 7.4 | 8.5 | 0.991 |
adas拍摄数据测试:
车载数据测试运行失败纠错:
1)adas车辆数据运行测试,数据输入模块修改;
2)测试adas车辆转向视频,出现初始化和跟踪失败;
3)初始化失败,推测原因:相机垂直光心方向平移较少;视频初段动态场景占比较大,导致跟踪内点较少不能顺利完成初始化;
(四)基于全局地图定位方案设计
参考论文:
-
RoadMap: A Light-Weight Semantic Map for Visual Localization
towards Autonomous Driving;
-
AVP-SLAM: Semantic Visual Mapping and Localization for Autonomous Vehicles in the Parking Lot.
传感器设置;
实现流程:
-
初始化:路段起点GPS信号作为起点初始值,保存当前帧作为起点参考帧K0;
-
局部建图:VIO提供运动估计,并建立局部语义点云地图;
-
全局地图优化:VIO在离线建图状态下,开启回环检测,优化全局语义地图。
-
实时定位:同建图部分一样,VIO里程计采用superpoint网络提取特征点,剔除动态物体特征点后进行运动估计;
-
全局优化:在行进过程中,通过毫米波雷达检测车辆周围障碍物,在没有遮挡时将当前周视图与全局地图进行点云配准得到全局约束来进行全局优化,获得精确定位。
预期目标
1)室内泊车效果:
2)道路行驶效果:
(五)视觉+惯导框架选择
为毛选择VINS-MONO :
1、联合初始化优势:
2、前端跟踪优点:
3、后端局部优化的滑窗与边缘化原理:
(六)点云配准ICP算法验证
算法步骤:
- 匹配:应用初始变换,找最近点
- 加权:调整一些对应点对的权重,剔除不合理点对
- 计算 loss,最小化 loss,求解当前最优变换
- 回到步骤 1 进行迭代,直到收敛
目标函数:
实验验证:
(七)鸟瞰图投影拼接
相机标定方案:
逆透视变换:
透视变换(单应矩阵为投影矩阵)
逆透视变换(相机外参计算变换矩阵)
投影拼接结果:
1)大巴车鸟瞰图拼接:
2)kitti前视单目逆透视鸟瞰图:
(八)建图模块构建
实现思路:
- kitti数据集打包为bag文件,按照数据时间戳将图像数据与IMU数据对齐
- 访问当前关键帧,图片经过逆透视变换,投影为汽车坐标系下的真实点云
- 采用vins-mono框架下的视觉惯性里程计,通过图片与IMU融合信息优化求解汽车当前位姿(相对与开机第一帧的位姿)
- 利用得到的位姿,将语义点云坐标变换至全局坐标系(第一帧为坐标原点)
- 稠密点云滤波,回环检测部分加入局部点云配准结果进行约束,提升地图全局优化效果
建图结果:
(九)车道线语义分割
开源代码:https://github.com/Jinglever/baidu-lane-detection-2019
参考文章:https://aistudio.baidu.com/paddle/forum/topic/show/953213
分割网络及训练样本:
- baseline是百度2019年的车道线识别挑战赛初赛第一名的代码,采用的是最基础的unet网络backbone也是最原始的,分割结果:miou=0.684
- 数据集来自百度2019年的车道线识别挑战赛,分割类别:实线、虚线、导向线等9类
- 作者训练策略:裁剪原图缩小到3种分辨率(768x256, 1024x384, 1536x512)进行递进训练
分割效果(不好):
分割后建图结果:
信息量:初步估计,加入未成功分割出的语义信息后,点云数据约:28M/km
(十)后续工作内容
语义分割部分:
- 采集自己的道路标志数据,进行样本标注。
- 网络可以尝试deeplab v3+,unet++等更强的;或者unet网络替换Resnet等其他backbone看是否有更好的效果,或者可以考虑多模型融合。
- 尝试不同训练阶段使用不同的loss或者组合。
- 考虑加入红绿灯、指示牌等立体标志语义信息。
完整建图:
- 目前只是在kitti数据集上进行功能模块验证,后续需要完成自己的IMU内参标定,IMU+相机联合标定,数据同步,实验调试实现IMU+相机的初始化步骤;
- 用自己的IMU+相机数据进行VIO精度测试,进而测试vins-mono长时长里程定位精度,并针对性修改相应模块;
- 在VIO优化完成后,启用vins-mono全局优化模块(必要时加入节点帧点云配准约束和GPS信号约束)对特定地点进行语义地图构建,测试地图闭环精度;
- 对于非地面标志的立体物体(如红绿灯、标志牌等),考虑采用多视图几何+单目深度估计的方法将2维检测结果还原为物体的三维信息并加入地图。
- 全局地图信息量压缩。
定位:
- 开机重定位功能的实现:二次开机时传感器初始化及车辆重定位方案设计实现;
- 局部地图截取策略的设计实现,基于点云配准的定位模块实现;
- 加入GPS信号,与视觉+惯导数据松耦合;或利用GPS+IMU的联合定位信息,与视觉数据融合,提高定位鲁棒性;
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)