AVP-SLAM算法学习

文章目录

1 AVP-SLAM算法流程

论文提出了一个基于视觉的定位解决方案,利用强健的语义特征来辅助车辆在停车场中导航。车辆周围使用了四个摄像头。通过IPM(逆透视变换)将图像变换成鸟瞰图。然后神经网络检测语义视觉特征,包括车道、停车线、路标和减速带。基于这些特征构建了语义视觉地图。通过厘米级的语义特征匹配,可以在地图上对车辆进行定位。

1.1 传感器输入

1.1.1 视觉传感器:由四个鱼眼相机组成的环视摄像头

首先由四个相机通过IPM变换生成四张俯视图,然后根据四个相机之间的关系将其拼接成一整张图,作为整个SLAM系统的图像输入
1.IPM( Inverse Perspective Mapping )逆透视变换

AVP-SLAM算法学习

透视变换指的是世界坐标系下的某个3D点映射到2D图像平面的过程
当拿着相机正对着地面的一块方形地板拍照,相机平面完全和地板平面平行,相机的光轴和地板平面垂直,这时得到的图片里,地板的形状也是方形的,这里将相机所在的平面称为 平面A
但是当相机斜对着地板平面,即相机平面和地板平面不再平行,在得到的图片里地板的形状可能就变成长方形或者平行四变形,这里将相机所在的平面称为 平面B

逆透视变换: 就是将 平面B中的地板等图像,变换到 平面A,使得图像中的地板形状能够保持它本来方形的样子(投影关系有点像ORB-SLAM中的纯旋转问题)。
在自动驾驶或者自主泊车算法实现过程中,需要检测地面的车道线,指引线等标识,但是安装于车体上的相机拍摄得到的图片里,车道经过映射后出现了变形,因此在算法处理时进行逆透视变换处理,将侧视得到的相关信息映射到俯视的角度,也即 鸟瞰图

逆透视变换处理: 其本质就是通过标定获得 侧视平面俯视平面的投影变换矩阵
(1)在地平面上放置标定板图像,并获得棋盘格图像上四个顶点的坐标
(2)在拍摄的图像平面提取角点,并获得地平面上四个顶点对应角点在图像空间中的坐标值
(3)通过四个坐标点间的对应关系,获得地平面到图像平面间的投影变换关系H( 是不是在求单应矩阵?同一平面的旋转变换关系
(4)对整个图像进行逆向映射到地平面空间中

逆透视变换的效果可以见链接:https://www.cxybb.com/article/qq_32864683/85471800

2.图像拼接
根据四个相机在车体的安装位置,很容易地可以获得四个相机的相对位置,由相机间的相对位置将经过逆透视变换的四张图片拼接成一张大鸟瞰图。

; 1.1.2 辅助传感器:IMU+轮速计

IMU和轮速计分别在 建图定位过程中起到了作用。
1.在建图中的作用
在建图过程中,IMU和轮速计提供车体的位姿信息(这里似乎没有用到视觉里程计相关的算法,车库中的特征点太稀疏了??),然后根据位姿信息将每一帧局部的视觉语义地图映射和添加到全局坐标系
2.在定位中的作用
首先通过对提取的语义特征信息进行匹配(类似于场景识别或者回环检测),得到视觉定位结果,然后通过EKF将里程计定位信息和视觉定位信息进行融合,得到车体最终的位置。

1.2 建图模块

1.2.1 语义特征提取

输入:一张拼接后的大图
输出:由语义信息组成的局部地图,如下图
使用了 CNN网络进行了语义特征的检测, U-Net进行分割。

AVP-SLAM算法学习

; 1.2.2 更新全局地图

根据之前图像IPM的变换关系,可以将这些语义信息映射到三维空间中,并且根据里程计信息,将这些语义特征不断的变换到全局坐标下。

1.2.3 回环检测

回环检测为了解决里程计的漂移的问题,这里使用了语义特征的局部地图不断的ICP全局地图,不断的局部优化。

1.3 定位模块

通过将语义特征与先前的构建出来的地图进行匹配来对车辆进行定位。最后,采用扩展卡尔曼滤波器(EKF)将视觉定位结果与里程计融合,保证了能够正在无纹理的停车场环境中,系统能够输出稳定的定位结果。

1.4 停车位检测

由于停车线和停车位角点是从IPM图像中检测出来的,因此很容易自动检测停车位。角点用于预测停车点的位置。如果停车线与预测的停车位匹配良好,则该预测被认为是正确的。

思考与总结

AVP-SLAM和纯视觉SLAM还是有点区别的,SLAM是同时定位与建图的缩写,在VSLAM中定位指的是随着机器人的运动实时计算得到机器人在世界坐标系下的位姿,但是这种位姿除了用于创建全局地图还有全局优化之外并不能起到我们说的定位的作用,因为单纯的开源SLAM算法并没有将地图服复用起来,其中所说的Localization更像是位姿计算。
AVP-SLAM更像一个比较完整的工程,有建图,有定位,地图可以复用即实现自主泊车。建图时利用IMU和轮速计获取位姿信息而非相机传感器,此时视觉模块更倾向于提供特征信息的功能。在定位时,则是通过语义信息的匹配实现视觉定位,然后融合IMU和轮速计的信息实现定位。明确自身位置信息之后才能进行后续的自主泊车。

想到有两个很有意思的事情,写一下自己比较浅显的想法:
1.自主泊车的实现存在一个前提,就是得知道车位在哪里,或者说我必须知道一个空着的停车位,才能完成后续的工作。这样就带来两个问题或者只适用于以下两种情况:

(1)停车位固定。全局地图创建成功后,停车位想对于车库入口的相对位置是确定的,这样就可以借助IMU和轮速计进行导航,中间借助视觉语义信息的匹配不断进行误差纠正。

(2)停车位不固定,但是对于每个车位都有监控手段(比如红外感应,或压力感应之类的)。然后和1中一样完成后续的自主泊车。

(3)停车位不固定,没有车位监控,使用巡航模式让车自己沿某个路线(可以遍历整个车库),然后根据语义信息寻找空车位,找到之后进行停泊车。

2.根据现实情况,车库中每个车位的信息都在实时变化,故而最开始创建的地图下次再使用时车位周围的环境发生变化了怎么办,比如建图时车库比较空旷,泊车时车位周围都有车已经停靠,甚至有的还把停车位的标识线压住了,这种情况怎么识别?
要学习一下车位附近汽车停靠时的特征信息吗?有车时,没车时,有车压线时,没车压线时,然后到达停车点附近时挨个和每种情况进行匹配来确定停车位的具体位置吗??

算法复现

在git上找到一个大牛基于 gazebo仿真把AVP-SLAM复现了一下,直接贴一下git地址和小破站上的演示视频吧
code地址:https://github.com/liuguitao/AVP-SLAM-PLUS
小破站地址:https://www.bilibili.com/video/BV11R4y137xb/

后期有了新的理解或者复现了再继续补充。。

Original: https://blog.csdn.net/guanjing_dream/article/details/124659114
Author: 超爱吃小蛋糕的66
Title: AVP-SLAM算法学习

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/597792/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球