贾凡,蒲沛,童德林,农胜旺
江苏大学汽车与交通工程学院,江苏镇江 212013
基于视觉的同时定位与建图(V-SLAM)是移动机器人导航的热门研究方向。视觉 SLAM 依托相机获得环境信息,搭载不同的相机进行特征提取、选择关键帧,获得不同的建图效果。ORB-SLAM即是一种完整的V-SLAM系统,核心是使用 ORB(oriented fast and brief)即特征提取算法作为整个视觉 SLAM 中的核心特征。ORB-SLAM 算法的核心思想为基于 ORB 描述量进行特征匹配和重定位,并采用在一个输出窗口的关键帧和位姿的BA联合优化算法来获得尺度[1]。该种视觉SLAM系统较其他有更好的视角性,能更容易且清晰地进行场景重建及扩展,且位置精度较高。
本文运用Arduino平台的建模仿真与函数载入功能,其他硬件主要包括驱动模组、S12XE控制芯片以及LDC1000传感器等,发现和探究在Arduino平台搭载ORB-SLAM算法的室内导航小车并进行实践运用的可行性。通过仿真分析,探寻其在大规模的医院内部为不熟悉该医院的人们进行导航,最终将他们带到需要去的科室、病房或挂号、收费等地点的实际功能。
本文所使用的ORB-SLAM算法在工作过程中可分为特征检测与跟踪、建立地图、闭环检测与校正这3个阶段。具体流程如下:特征检测与跟踪阶段,在此阶段中首先应该先从环境图像中检测出相应的ORB特征,并根据上一帧的图像信息对当前帧的图像信息进行优化补充,从而估计出当前小车所处的位置与姿势;然后通过相邻地图点采集到的环境图像信息来检测更多的特征,进而对估计到的位姿进行细化与完善[2];最后从中提取相应的关键帧,建立局部地图。ORB-SLAM工作流程如图1所示。
图1 ORB-SLAM工作流程
在建立地图阶段中,建图部分的主要工作是建立局部地图,并通过添加实时采集的关键帧来更新局部地图,同时剔除冗余老旧的关键帧,通过这种方式来保证局部地图的及时性[3]。在闭环检测与校正阶段中,通过相应的反馈环节对建立的局部地图进行相应的检验与调整,从而保证其准确性。随后使用Arduino平台的虚拟仿真功能,探究在视觉SLAM算法运行过程中可能存在的问题,如其与循迹小车在程序上的不兼容之处等,并对程序进行相应的改良,来满足图像信息的多方向多次使用,保证双目相机采集到的图像信息能够实现地图构建、自动避障及面部识别等应用的要求,对信息进行多功能、全方面地利用。在试验过程中,通过更改双目相机搭载的位置,对不同位置下收集到的图像信息在传递过程中的完整度和效率进行分析比较,从而找到在一般使用过程中能最大限度地接受全视角图像信息的安装位置。
所设计出的智能小车能够从单一的寻迹导航中解除束缚,快速地对更复杂的外部环境信息做出反应,能够在密集的路面情况中灵活运作,设计最优路线,并且根据双目相机反馈的外界信息中的人脸信息,自动进行配速与发出表情和语音等功能,做到人性化设计。同时能够保证自身机身的使用安全,延长使用寿命,减少能量损耗。
智能小车采用Arduino Uno主控芯片及S12XE微控制器芯片,处于系统的核心位置,联结整个系统的其他各个模块,如超声测距系统、光电传感器及红外传感器等。其他部件采用S12XE外围电路、CAN总线收发器等组成。小车核心MCU与各传感器示意如图2所示。
图2 小车核心MCU与各传感器示意
首先在Arduino平台上运用函数输入功能,输入ORB-SLAM算法函数,使用Python编程语言和Qt开发框架结合于一体的图形工具文件PyQt,设计适当的环境识别系统,初步虚拟仿真出搭载视觉SLAM系统的导航小车。
Arduino平台具有语言编程功能,编写相应的程序后可利用平台上的模拟仿真功能进行传感器拓展,并进行模拟感知,通过控制双目相机、LED屏幕等装置来获取环境信息并进行反馈。为在Arduino平台上设计出寻迹小车并搭载上双目相机,运用ORB-SLAM 算法建立即时地图,并传递信息于小车的控制系统以代替光电管接收到的路面印记信息,最终通过Arduino平台的功能进一步实现小车的导航系统。智能小车的3种工作状态如图3所示。
图3 智能小车的3种工作状态
在后端优化校正线程,主要对所采集图像数据的传输轨迹进行优化处理,包括传输过程的闭环检测、局部或全局BA优化以及局部地图的扩展。
采用分段式优化处理方式,将图像数据精度达到一定高度的特征点标记为合格地标点,不再对其进行优化,减少了同一时间段内所处理的数据总量,同时也提高了系统的数据处理速度[4]。为了进一步减小误差,在试验中将SLAM算法下相机生成的轨迹文件保存到Camera Trajectory文件中,并与地面实际轨迹进行轨迹误差比较,采用绝对轨迹误差(ATE)的方式[5]对比不同SKAM算法下相机采集到的外部信息的轨迹误差之间的优劣。接着对采集到的每帧图像进行预处理,使用时间戳把特征检测阶段中估计出的相机所处位置与实际相机位置进行对比分析。
利用ORB-SLAM建立局部地图,之后收集到相关位置信息,然后通过输入相关算法函数来构建小车的避障系统,最终才能达成智能导航这一目标。具体步骤如下:
(1)载入MAX驱动函数;
(2)定义UltraSonic函数;
(3)命名障碍物距离值指定引脚;
(4)定义变量die;
(5)初始化MAX函数将测算到的障碍物距离值保存在变量die中;
(6)在串口显示器上显示障碍物距离值。
通过相关主函数来完成以下功能:
(1)判断障碍物距离值所处区间;
(2)die≥45:小车保持直行;
(3)15≤die<45:小车自动开始播放警示音效;
(4)die<15:小车会原地掉头避开障碍物,最终往复。
在V-SLAM系统中,前端跟踪线程需要通过将外部环境的3D点投影到当前帧画面的2D点,进而确定相机在当前环境下所处位置,为了保证导航的准确性,还需要采集多个特征点在下一个画面帧的具体位置或者偏差量。
本文针对导航小车在两种不同类型的室内环境下稀疏重建外部环境进行了仿真试验,通过对采集的特征点所组成的局部地图数据进行分析。在环境较密集的办公室中,由于办公桌上有较多的办公设施,相机采集了大量的无用特征点,所用方法并未能取得理想的效果。而在大型厂房,厂房内有少量大型设备,还有预先放置的砖瓦、垃圾桶等障碍物。墙面平整且大部分呈白色,只有少部分墙体表面有管道和变压设备,特征点较少且分布较为密集。结果表明,所设计的导航小车系统在大型厂房这种障碍物明显且相对分散的场合具有良好的使用性能。
通过对试验结果的分析,发现区域匹配算法可以最大限度地完成这种相邻帧之间特征点的匹配,故而可最大限度地降低图像信息传输中存在的误差,并减小后续优化校正线程的计算负担。需要注意的是,在试验中还应尽可能地选择特征点较密集的区域,否则在不同帧画面的匹配过程中仍然会存在较大误差。
对于具体的相邻帧之间匹配过程,经过对多种匹配方式的仿真研究,结果表明,变换网络进行模板仿射变换无疑是最好的选择。在图像选取目标环境区域后,由内部程序对该图像进行一定程度的尺寸转变后输入到变换网络,通过变换网络对该图像进行仿射变换,直到某一结果最大程度上和下一帧采集到的图像信息上的某区域相吻合,使得区域内的特征点得到匹配从而更好地搭建局部地图[6]。利用这种技术,不仅可以保证相机在小车行驶不平路段和转弯时也能发挥良好的性能,而且降低了SLAM算法的运算负担,保证了导航的迅速[7]。
综上,无论是在轨迹误差方面还是在相机估计位值方面,本文所采取的优化方式都有着相当良好的表现,轨迹对比如图4所示。通过对办公室小场景环境下的真实轨迹和优化后相机的轨迹进行对比,并建立相关函数分析每段相机位置与预估位置间的差异,得出平均偏移误差为0.095 32。在对大型厂房所得数据进行分析时,系统后端优化校正线程的效果也非常显著,真实轨迹和相机轨迹基本上吻合,仅仅只在极少数地区存在细微误差,在该环境下的平均偏移误差为0.097 13。通过对比搭载不同SLAM算法的各个系统在相同场景下的性能,本文提出的算法不仅能满足导航功能的要求,而且能更加准确地处理带有深度的数据,并且在快速性、准确性、实时性等方面具有不俗的优势。
图4 轨迹对比
本文从导航小车的应用场景、设计和搭建、循迹原理和SLAM算法的载入等几个方面介绍了导航小车的设计初衷和理念,其包含了Arduino平台的虚拟仿真、ORB-SLAM算法等前沿技术。所设计的这一款导航小车即为基于Arduino平台的循迹小车并搭载双目相机运用ORB-SLAM算法。
相比较于传统的循迹小车,经过改良的导航小车不仅能精确行驶循迹路线,还能在非循迹情况下实现自动导航的功能,并实现高精度的场景重建与避障功能,最终得到的小车功能更加完善。导航小车各个硬软件都采用了比较成熟的技术,性能和功能稳定性均得到了保障。