刘德志,孙作雷,曾连荪
(上海海事大学 信息工程学院, 上海 201306)
摘要:构建了小型2D激光扫描仪驱动解决方案。以RPLIDAR为例,基于低成本硬件及其合理的通信规约设计,提升数据获取的可靠性。基于CMake交叉编译链使硬件驱动具有跨平台特性。同时,通过增加launch文件,使其支持ROS (Robot Operating System)。并分别在Windows和ROS系统下完成测试。相应的代码已在Github上开源,可免费用于移动机器人的导航、构图与3D重建、同步定位与地图构建(SLAM)等科研。
关键词:驱动;激光雷达;跨平台;开源
0引言
随着工业、军事及民用领域对自动化和人工智能技术需求的日益增长,与移动机器人相关的理论及应用已成为研究热点。对于移动机器人而言,最常见的任务之一是在环境中绘制地图并进行导航,而2D激光扫描仪是室内外机器人最常用的传感器。目前,市场上已有一些广泛应用于科研的2D激光扫描仪,并在越来越多的论著中被提及。例如德国的SICK系列、日本的Hokuyo系列等。
但是,结合国内外使用现状,这些激光雷达具有如下弊端:(1)体积较大,在小型的机器人移动平台上不适合安装。(2) 售价较高,且多为国外产品,小型科研组难以承担较为高昂的硬件设备预算,同时也很难广泛用于民用领域。对于低成本小型激光雷达,2008年KONOLIGE K等人已经提出低成本激光雷达硬件设计思路[1],但直到2013年,一些公司才做出了相应的产品,价格仅为上述产品的十分之一。本文基于KONOLIGE K等人的设计思路及目前市场上现有雷达的通信规约,设计了可靠、高效的激光雷达驱动。该驱动具有以下特点:(1)跨平台性,可在Windows、Ubuntu环境下使用;(2)使用简单,研究者仅需简单设置即可加入自己的工程;(3)开源,可免费用于科研。
1低成本激光雷达原理
所有的单点扫描设备,例如SICK和Hokuyo设备,采用激光时间飞行原理(Time of Flight),即通过测量激光发射和反射的时间来计算距离目标点的距离。而本方案采用激光三角测距技术,所用的红外线传感器与激光时间飞行原理所用的激光扫描器不同,所以极大地节省了成本。
1.1硬件结构
低成本激光雷达主要由激光测距核心、扫描电机、传动和USB适配器三部分组成。测距核心是激光雷达最重要的组成部分。在分别给子系统供电后,测距核心在扫描电机的带动下将开始顺时针360°旋转扫描并获得扫描测距数据。
1.2测距机理
激光三角测距技术通过反射光线的角度来测量距离。图1展现了三角测距的几何图。红外线发射器发射一个红外线,经物体反射回来并投影到接收器上。一个理想的接收器是调整好的,这样红外线光束与某些射线是平行的。
利用相似三角形的原理,垂直距离是:
激光束的距离也取决于激光相对于图像轴的角度:
1.3数据帧格式
当激光雷达工作时,可进行每秒高达2 000次的测量动作。每个采样点经过内部DSP处理器实时解算,得出被照射到的目标物体与激光雷达的距离值以及当前的夹角信息,并以表1的数据帧结构通过USB适配器输出。
2驱动设计
基于目前市场上现有的低成本小型激光雷达RPLIDAR硬件及其通信规约,设计并完善了驱动。(1)合理规划激光雷达的驱动流程,既保证读取数据的高效,又增加异常处理保护硬件的安全。(2)编写Makefile文件,采用交叉编译[2],生成的驱动可以跨平台使用,可供研究者在Windows、Linux、MacOS系统下使用。(3)设计存储格式,使用二进制格式保存数据文件,将测量数据记录下来用于未来的分析、处理、开发和算法验证。(4)支持Robot Operating System(ROS),为使用低成本激光雷达研究机器人的导航与定位、环境扫描与3D重建、同步定位与地图构建(SLAM)等领域提供了极大的方便。
2.1驱动模块设计
本驱动的设计使用C++语言,基于模块化思想,可分为激光雷达健康状况检测、通信错误处理、扫描准备、扫描数据获取等模块[3]。获取激光雷达扫描测量数据的整个流程见图2。
准备扫描模块:启动一个后台工作线程,异步地接受来自激光雷达的扫描测距数据序列,并保存在内部的缓存当中。
获取扫描数据模块:抓取被激光雷达驱动事先接收并缓存的测距数据序列。该模块将始终返回一个最新的完整的360°的扫描测距序列。每次调用后,保存扫描数据序列的内部缓存将会清空,以确保每次获得不重复的数据[4]。
2.2输出数据格式
把激光雷达的测量数据保存为后缀名为.dat二进制文件,供后期研究分析[5]。激光雷达的工作频率为6 Hz,每扫描一圈有360个测量点,称为一条记录。为了方便管理和后期的研究,在每条记录前加上时间戳。记录的数据结构见表2。
3实验验证
本驱动默认采样静态库方式组织,使用者只要简单设置就可以整合到自身项目中:引用驱动库的外部头文件(位于sdk/inlcude文件夹);在链接阶段,引用编译好的静态库(rplidar_driver.a)即可。以低成本小型激光雷达的代表性产品rplidar为例,使用该驱动在多种操作系统下测试结果如下。
3.1Windows环境中单帧扫描
编写显示界面程序,把本驱动库整合到此程序中。此程序的功能是实时采集雷达扫描数据,并在GUI界面上将0~360°环境下测距信息以平面图的方式显示出来[6]。在走廊中测试得到静态数据如图3所示。图中圆心为RPLIDAR的位置,点集为障碍物。
3.2ROS中单帧扫描
ROS是专为机器人软件开发所设计的一套开源的电脑操作系统构架,它提供了一系列的开源程序库和工具以帮助研究者迅速创建机器人应用软件。
在本驱动库的基础上,增加几个ROS特有的文件并作相关设置即可使用。此部分代码已在Github上开源。在ROS的RViz工具中实现的静态扫描图如图4所示。
3.3实现构建地图
在ROS中可以很方便地使用本驱动,然后调用开源的Hectorslam包来构建地图。移动机器人正在构建地图如图5所示。本实验已经做成视频上传到网络并开源。
4结论
基于激光雷达硬件及其通信规约,构建了灵活、高效、开源的驱动。简单介绍了低成本小型激光雷达的测距原理,重点阐述了驱动的设计和实现细节。在两种环境下的测试和利用本驱动实现mapping证明了该驱动的易用性及可靠性。未来本驱动将用于机器人的定位与导航、同步定位与地图构建的算法验证工作。
参考文献
[1] KONOLIGE K, AUGENBRAUN J, DONALDSON N. A lowcost laser distance sensor[C]. ICRA,2008:30023008.
[2] 聂和平. 基于ARM9的嵌入式Linux系统移植与驱动开发[D].南京:南京邮电大学,2013.
[3] 李进,王太宏,张恩迪. 嵌入式linux中nRF24l01驱动的设计与实现[J]. 计算机系统应用, 2011,20(9):226229,237
[4] OKUBO Y, YE C, BORENSTEIN J. Characterization of the Hokuyo URG04LX laser rangefinder for mobile robot obstacle negotiation[C]. International Society for Optics and Photonics, 2009:73321273321210.
[5] 张雪晶,孙作雷,曾连荪,等. 基于联合相容分支定界的关联算法研究[J]. 微型机与应用, 2015,34(15):8284,88.
[6] CIVERA J, DAVISON A J, MONTIEL J. Inverse depth parametrization for monocular SLAM[J]. IEEE Transactions on Robotics, 2008, 24(5): 932945.