林连秀,叶芸,姚剑敏,郭太良
(福州大学 物理与信息工程学院, 福建 福州 350002)
摘要:ORB-SLAM(基于ORB特征识别的同时定位与地图构建系统)的源代码无法在嵌入式开发板运行,其构建的点云图太稀疏无法满足移动机器人路径规划要求。针对这个问题,文章提出将ORBSLAM进行改进与优化,移植到嵌入式开发板完成SLAM过程。首先,删除原PC端Linux系统下的轨迹、点云图、一些依赖库,保留并改进src和include文件夹下大部分C++代码;其次,在嵌入式平台以JNI调用方式调用改进后的C++代码,增加OpenCV、g2o、DBoW2、Eigen等依赖库;最后根据处理后的关键帧连接绘制栅格地图,完成实时轨迹显示和地图构建。实验结果表明,通过移植实现了在嵌入式开发板进行SLAM过程,硬件配置要求和成本大大降低,所构建的栅格地图占存量更小且更直观反映实际环境的布局情况,地图误差控制在±0.5 m的较高精度范围内,较大程度地提高了SLAM性能。
关键词:ORB-SLAM;嵌入式;移植;栅格地图
中图分类号:TP242文献标识码:ADOI: 10.19358/j.issn.1674-7720.2017.05.016
引用格式:林连秀,叶芸,姚剑敏,等.基于ORB-SLAM的移动机器人嵌入式实现与优化[J].微型机与应用,2017,36(5):50-53.
0引言
*基金项目:福建省自然科学基金(2014J01236);福建省科技重大专项(2014HZ0003-1);福建省资助省属高校专项课题(JK2014003).同时定位与地图构建(SLAM)技术是移动机器人在未知环境中,通过对环境的观测,递增地构建环境地图,并通过构建的环境地图实现对机器人的定位,它是实现机器人自主导航和定位的关键技术。目前实现SLAM的算法很多,其中ORB-SLAM以追踪效果好、地图精度高、定位稳定性好等优势脱颖而出,成为研究热点。
ORB-SLAM算法由Raúl M A等人于2015年发表在IEEE Transactions on Robotics[1],且在PC的Linux系统上开放了开源ORB-SLAM系统。采用该ORB-SLAM开源算法,在PC Linux系统上较好实现了SLAM过程,但等同于PC的硬件配置需求成本高,对移动机器人普通嵌入式开发板不适用[2]。ORB-SLAM算法主要由追踪、地图构建、闭环控制3个线程组成,其中地图构建部分平均处理每关键帧约385 ms,相对比较耗时,具备较大优化空间[3]。采用ORB-SLAM开源算法所构建的地图是用点云图方式显示,点云很稀疏,不容易看出所构建的室内结构[4]。对移动机器人地图要求上,栅格地图表示法优于点云图表示法,一方面可以大大节省内存空间,另一方面也便于后续路径规划过程中进行碰撞检测和空间可行性分析[5]。从硬件开发成本考虑,如若用PC进行移动机器人开发,显然只用到PC很小部分功能,造成功能浪费、成本偏高,而嵌入式开发板有着低功耗、低成本、适当的CPU运算效能与友善的软件接口等优势[6]。
针对以上ORB-SLAM源代码只能运行在PC而无法在嵌入式开发板上运行,且其构建的点云图太稀疏无法满足移动机器人路径规划要求的问题,本文对此进行了较大改进,保留ORBSLAM部分源码并做出修改,移植到嵌入式开发平台,修改地图构建中的耗时部分,增加基于栅格地图实时轨迹显示部分。移植到普通嵌入式开发板后的ORB-SLAM,不仅大大降低了对硬件平台的要求,还完成了基于栅格地图的实时轨迹显示,使地图能清晰了然地反映实际环境的布局情况,且所建地图控制在较高精度范围内。
1ORB-SLAM改进与优化
1.1总设计流程的改进
本文将原PC端Linux系统下的ORBSLAM进行了移植和改进,最终在Android平台完成了基于栅格地图的轨迹绘制即完成了实时地图构建,改进后的总设计流程如图1所示。
在上述流程图模块中,本文主要修改的部分是:修改所保留的ORB-SLAM原src和include文件夹下的C++代码;在LOCAL MAPPING部分中进行了大部分删减,只做优化部分;删除了原实时点云及轨迹显示部分,在嵌入式平台添加GRID MAP部分即基于栅格地图的实时轨迹显示部分。
1.2ORB-SLAM源码的修改
ORB-SLAM算法的实现主要在src和include文件夹下,完成追踪、地图构建、闭环控制和重定位等任务。本文对源码所作的修改工作主要有:删除MapDrawer.cc和Viewer.cc代码即删除轨迹、点云图显示部分的代码;删除Linux下依赖复杂的ROS系统部分的代码;更换不同系统下的OpenCV、g2o、DBoW2、Eigen等库;修改输入接口,以便直接连接摄像头在线使用;注释掉部分代码,包含保存当前帧图片、点云的代码等。
1.3LOCAL MAPPING部分的改进
LOCAL MAPPING线程用于处理新的帧,更新优化它们本地邻近的帧。它对关键帧作确定新的地图云点、更新局部区域、局部偏差调整、去除冗余关键帧等工作。LOCAL MAPPING在整个系统中耗时相对较长,其平均处理每关键帧要用时约385 ms,而像TRACKING平均处理每帧只要约30 ms。考虑到一方面LOCAL MAPPING相对耗时,一方面这部分作删减后精度不会受到很大影响,这为移植到嵌入式平台提供了一个可行之处。所以本文对LOCAL MAPPING部分中的Triangulate ORB、Update Local Area、Prune Redundant KeyFrame进行了删减,只做优化部分,主要部分的设计如图2所示。
1.4GRID MAP部分的设计
机器人地图包括几何地图、点云地图、拓扑地图和栅格地图等,其中原ORBSLAM采用点云地图来表示,其所构建的点云图中点云很稀疏,完全不能看出任何结构。而栅格地图将环境分解成一系列具有二值信息的网格单元,对环境描述直观清晰,适当调整栅格的大小既可以降低存储消耗,又保留环境的空间结构,同时也便于后续路径规划过程中进行碰撞检测和空间可行性分析,所以本文去除点云图表示法而改用栅格地图表示法。本文采用的栅格地图用黑格表示障碍物,白格表示无障碍物可通过区。GRID MAP主要部分的设计如图3所示。
由设计图3可知,本文设计的显示端显示三个部分:一是USE_CAMERA_INPUT,显示摄像头采集到的当前图像,未经过任何处理;二是DRAW_FRAME,对当前图像帧进行3D ORB特征点的提取与匹配,并在窗口显示特征点追踪情况;三是DRAW_GRID_MAP,绘制最终处理后的所有KeyFrames,追踪当前KeyFrames和CameraCenter。采用栅格地图表示法将各KeyFrames用线连起来,绕室内全覆盖运行即可完成最终室内地图的绘制,地图以矢量形式存储供移动机器人合理规划路径和重定位之用。
2实验结果与分析
2.1实验硬件配置对比
实验硬件配置为PC和自制的移动机器人模型,其中移动机器人模型主要用到的模块有基于Android平台的开发板、单目摄像头、电机,PC和开发板参数如表1所示。PC系统拥有很强的运算能力,但通常只用到小部分,倘若用于机器人开发而配置一个PC,不仅众多未开发资源被浪费,且其在购买成本、功耗性、便携性、集成性方面都具有较大劣势。而嵌入式开发板具有低功耗、低成本、适当的CPU运算效能与友善的软件接口等优点,被称之为低价计算机。对比表1参数,将ORBSLAM从PC移植到嵌入式开发板上实现,则大大降低了对硬件配置的要求,成本、功耗也大大降低,缩小了机器人体积,方便携带。
实验选用的单目摄像头为小蚁摄像头,采用 “张正友”标定法原理,标定模板采用包含12×12的正方块的棋盘格,每个棋盘格大小为30 mm×30 mm,在MATLAB下运行程序载入20张不同角度、像素为640×480的棋盘格图片进行相机标定,标定结果如表2所示。
2.2移植后的ORB-SLAM运行结果分析
本文建立的栅格地图为640×960像素的地图,占用栅格大小为30,机器人实际宽度为0.15 m,如图4所示,白色部分为移动机器人绕室内一圈的轨迹,完整栅格地图即为移动机器人绕室内全覆盖移动,最终白色部分表示可通过区,黑色部分表示障碍物区。由表3可知,地图轨迹点与实际标定点的误差最大为0.539 m,其轨迹误差一般能控制在±0.5 m的较小范围内,约为地图尺寸的0.78%,相比原PC Linux系统实现的轨迹误差约为地图尺寸的1%,误差并未扩大反而有所缩小,即定位精度得到提高。
图5为修改前所构建的点云图,图中轨迹由相机位姿估计点构成,左下图为相机实时采集的图像并对特征点进行提取与匹配。图6为修改后所构建的栅格地图,左上图为相机采集的原图,左下图为特征点提取与匹配图,右图为栅格地图。首先从占存量对比分析,移动机器人按同样路线绕室内一圈构建一张1 280×960的地图,原Linux系统运行的ORB-SLAM所建的点云图占存量约为4 940 KB,而移植后的栅格地图占存约98 KB,相差大约50倍的耗存量,可见使用栅格地图表示法在节约存储空间上具有非常大的优势。再从直观性对比分析,原Linux系统运行的ORB-SLAM所建的点云图非常稀疏,只含有稀疏的地图特征点来构成轨迹,看不出实际空间结构与布局,这稀疏的地图对于机器人下一步的应用会造成很大的困难。而基于栅格地图绘制的ORBSLAM地图,每个栅格可直接映射到现实环境的某个区域,白格表示已经运行的可通过区,黑格表示障碍物区,机器人绕室内全覆盖一次即可直观地得到布局情况,其所存储的障碍信息非常便于移动机器人进行动态避障以及路径规划。
2.4移植前后运行指标对比
先对原ORB-SLAM与移植后ORB-SLAM代码运行情况进行对比分析,本文移植过程中在同一台PC上安装了WIN7+Ubuntu双系统用于开发ORB-SLAM,将ORB-SLAM代码在同一台PC上运行,原Linux系统CPU占用率高达约180%,移植到WIN7后CPU占用率约48%,可知原ORB-SLAM因为依赖一些Linux系统自带库使运行速度得到限制。再对LOCAL MAPPING部分运行速率进行对比,原ORB-SLAM的LOCAL MAPPING部分主要包含KeyFrame Insertion、Map Point Cullin、Map Point Creation、Local BA、KeyFrame Culling,总体运行时间约为464.27 ms。优化后,通过减小与字典的匹配次数,减小关键帧重新计算的次数,将总体运行时间提高到约280.50 ms,删减ORB-SLAM的LOCAL MAPPING部分速率得到40%的提升,较大程度地简化了移植工作。
3结论
本文提出并实现了将ORB-SLAM通过改进与优化,最终移植到嵌入式开发板完成SLAM过程,CPU占用率和运行速率得到提升,大大降低了硬件成本和配置要求。针对原点云图太稀疏无法满足移动机器人路径规划要求的问题,改用栅格地图表示法,从而使地图占存量缩小了约98%,且更直观地反映了实际环境的布局情况。通过移植,最终的轨迹误差一般能控制在±0.5 m的较小范围内,相比原轨迹误差得到了缩小。这种改进技术不只适用于移动机器人,同样也适用于像VR/AR那样需要用到嵌入式开发板来完成定位的技术领域。
参考文献
[1] RAU'L M A, MONTIEL J M M, TARD-S J D. ORB-SLAM: a versatile and accurate monocular SLAM system[J]. IEEE Transactions on Robotics, 2015,31(5): 1147-1163.[2]RAU'L M A, TARDS J D. Probabilistic semi-dense mapping from highly accurate feature-based monocular SLAM[C]. Robotics: Science and Systems, 2015.
[3] RAU'L M A, TARD-S J D. ORB-SLAM: tracking and mapping recognizable features[C]. RSS 14 Workshop on Multi VIew Geometry in RObotics (MVIGRO), 2014.
[4] RAU'L M A, TARD-S J D. Fast relocalisation and loop closing in keyframe-based SLAM[C]. IEEE International Conference on Robotics and Automation (ICRA), June 2014.
[5] 张彪,曹其新,王雯珊. 使用三维栅格地图的移动机器人路径规划[J]. 西安交通大学学报,2013,47(10): 5761.
[6] 金丽科技.让嵌入式Linux变身为低价计算机(上)[J]. 电子与电脑,2007,14(5):6164.