基于ROS和激光雷达的移动机器人系统设计与实现
2020-09-08黄通交侯英岢倪益华吕艳张光耀
黄通交, 侯英岢, 倪益华, 吕艳, 张光耀
(浙江农林大学 工程学院,杭州311300)
0 引 言
SLAM(Simultaneous localization and mapping)同时定位与地图构建是指携带传感器的机器人在移动的过程中,实时估计自身在环境中的位置的同时构建描述周围环境的地图模型[1-2]。SLAM需要同时解决自身定位和构建环境地图两个问题,是实现移动机器人自主导航的关键,这对机器人的运动控制、路径规划、任务实施具有重要的意义[3]。
本文在研究SLAM算法的基础上,使用小型工控机作为上位机,STM32单片机作为下位机,基于RPLIADR A2激光雷达,在Linux系统下使用ROS机器人系统进行开发,设计并实现了室内移动机器人的同步定位与建图功能。
1 系统总体方案设计
室内移动机器人的主体材料采用亚克力材质,主要由上位机和下位机两部分组成,系统总体结构如图1所示。使用小型工控机作为机器人系统的上位机,在其上运行Linux系统及ROS次级机器人操作系统;下位机用STM32作为主控芯片,输出PWM波形对直流电动机进行运动控制,通过IIC与imu通信获取加速度信息。移动机器人在顶层安装上海思岚(SLAMTEC)公司生产的RPLIADR A2激光雷达,通过串口将数据发送到上位机,由工控机处理数据并通过SLAM算法构建地图,通过WIFI将地图和机器人位置信息发送给远端的个人PC以实现实时显示及远程控制功能[4-5]。
2 系统硬件设计
2.1 上位机
图1 系统总体结构
由于普通笔记本和工业计算机的体积和质量都比较大,不适合在小型移动机器人上使用,因此本文选用Soarsea公司生产的v200小型主机作为上位机。Soarseav200是低功耗且具有高计算性能的小型主机,其尺寸为113 mm×108 mm×30 mm,具有2个64位的物理核心、2 GB的低功耗运行内存,以及丰富的外设,有一个HDMI接口和多个USB接口,具有体积小、功耗低、运算速度快等优点。因此Soarsea-v200既能满足在移动平台上体积小的要求,又能满足SLAM算法的实时运算的要求。
2.2 底层主控版
STM32系列单片机是意法半导体(ST)公司生产的高性能嵌入式处理器,内核架构为Cortex-M3,工作频率最高为72 MHz,有IIC、USART、PWM、CAN等外设,具有主频高、外设资源丰富、功耗低等优点,广泛应用在工业、医疗等领域[4]。
STM32f103控制芯片、直流电动机、IMU、电源等接线图如图2所示,应用机器人操作系统提供的ROSserial通信协议,将底层控制集成到ROS中,则下位机主控芯片相当于ROS中的一个节点,可以方便地对移动机器人进行控制和数据传输。
图2 工控机和主控板的接线图
2.3 激光雷达
本文选用的激光雷达是上 海 思 岚(SLAMTEC)公司 生 产 的RPLIADR A2国产单线激光雷达,基于激光三角测距原理,每秒最高8000 次采样和最高15 Hz的旋转频率,可实现半径8 m范围内的全方位360°二维平面扫描测距,在室内中短距离测量使用场景下效果较好,性价比高。激光雷达安装在系统顶层,如图3所示。
图3 激光雷达安装图
3 系统软件设计
3.1 ROS系统
本文软件平台为ROS机器人操作系统,相当于运行在Linux 系统上的次级操作系统。ROS系统免费且开源,支持C++、Python 等多种语言的程序设计,方便开发者进行开发。ROS集成很多开源软件包供开发者修改并使用,可用于建图、导航、路径规划等功能的实现。且提供了RViz、Gazebo等仿真软件,通过仿真可以验证算法的有效性等,有助于快速完成机器人系统的开发[6-7]。ROS系统最大的优点是其采用松耦合的设计方式,系统中的每个功能都是一个节点程序,在后续机器人开发功能需求变化时,增添或删除对应的程序节点即可,设计方式灵活。
3.2 ROS分布式系统部署
SLAM及导航算法运算需要采集大量实时的传感器数据,而无线数据传输受到网络延迟影响,因此需要在移动机器人底盘上搭载小型工控机,而实时生成的地图数据需要在屏幕中显示,因此可通过无线网络将工控机与远程笔记本进行连接,通过这种方式可以方便地满足工控机与移动底盘、工控机与远程笔记本之间的相互通信。ROS分布式系统通信的特性很好地满足了上述功能需求,具体的分布式系统实现步骤及要求如下:
1)设定主从机,在同一个ROS系统中只能运行一个节点管理器(ROS Master),Master需运行在主机上,本文设定工控机为主机,远程笔记本为从机。
2)将主从机连接到同一路由器下,为方便主从机在网络中找到对方,以及方便其他配置,分别在自己系统中/etc/hosts文件中设置对方的IP地址及名字。
同时需要将ROS系统的环境变量ROS_HOSTERNAME和ROS_MASTER_URI配置设置在.bashr文件中,使主从机中所有的节点都能找到运行Master节点的主机IP地址,分别配置如下:
其中,第一行配置系统的IP地址,第二行配置主机的IP地址。
在ROS系统运行过程中,工控机订阅传感器数据实时运行算法软件包及速度信息控制移动机器人底盘运动,远程笔记本上的RViz图形显示节点、teleop键盘控制节点等进行数据可视化和发布命令。ROS分布式系统设计保证了消息的同步,减轻了计算机系统的内存压力,有助于系统实时性的实现。
3.3 SLAM算法
本文所采用的SLAM 算法是Cartographer 算法,Cartographer算法是谷歌在2016年开源的SLAM算法,该算法可通过激光雷达等传感器信息实时生成栅格地图,可用于二维和三维SLAM建图。Cartographer算法基于图优化理论框架,分为前端和后端两部分:前端主要负责扫描匹配,将激光雷达信息处理后由submab子图进行匹配,当新生成的子图没有新的数据插入时会进行局部回环检测。如果找到与当前位置估计最佳的匹配结果,则将子图加入到回环约束中。对估计位姿的优化主要由后端完成,Cartographer算法采用分支定界法对地图搜索进行加速[8-10]。其理论过程如图4所示。相比于Gmapping算法,不论是地图精度还是算法鲁棒性,Cartographer算法都比Gmapping更好。该算法在移动机器人领域应用非常广泛。
4 SLAM实验分析
4.1 实验场地
为对本文构建的室内移动机器人进行测试与验证,根据算法建图需要及室内机器人工作环境的特点,选取较为空旷、地面较为平整且能构成闭环作为测试环境,如图5所示,其二维尺寸图如图6所示。
4.2 SLAM仿真实验
图4 Cartographer SLAM算法理论过程
图5 机器人建图实验场地
图6 实验场地尺寸图
为提高开发效率和节约开发成本,同时也为后续的实际实验积累经验,本文首先利用ROS机器人系统提供的仿真平台进行仿真实验。首先利用Gazebo软件中的build editor工具生成环境模型,图7是根据真实实验环境二维图创建的环境模型。将包含机器人关节信息、运动学等参数信息的xacro文件导入到Gazebo仿真平台中,同时加入激光雷达传感器模型。
图7 在gazebo中构建的仿真环境
仿真实验步骤,运行编写好的launch 启动文件,分别启动以下节点 文 件:1)启动Gazebo并加载自己构建的仿真环境,如图8所示;2)启动RViz,并载入配置环境,如图9 所示;3) 启动Cartographer.launch,加载一些默认参数;4)最后启动键盘控制节点,控制小车绕行环境一周,Cartographer SLAM算法包生成地图。
在Gazebo和RViz 中运行的仿真结果中,最后通过运行rosrun map_server map_saver -f office_sim 保存仿真结果地图。
4.3 实际环境建图实验
实际环境地图构建实验步骤如下:1)运行底盘程序启动机器人,以及激光雷达启动程序;2)启动用于建图的Cartographer算法节点,实时生成地图;3)启动RViz工具,观察实时生成的地图和机器人当前的位姿;4)启动键盘控制节点,并设置速度和角速度值,通过键盘控制机器人在试验场地中运行一圈;5)通过map_server工具将生成地图保存下来。Cartographer算法生成的地图如图11所示。
为分析Cartographer算法的建图精度,对实验场地中的9 个特征尺寸进行测量,并测量其在RViz软件中显示的图测值,将实际值与图测值进行对比,并计算其绝对误差和相对误差,测量数据和误差值如表1所示。
工控机的CPU为双核处理器,使用sudo htop命令查看算法运行时系统的CPU占用率及内存占用,为便于统计,将两个核的CPU占用进行求和,在Cartographer SLAM算法运行期间,内存占用平均为706 MB,CPU占用率如图12所示。
图8 Gazebo仿真界面
图9 RViz仿真界面
图10 仿真输出地图
图11 Cartographer算法生成的地图
表1 Cartographer 算法尺寸测量数据表
图12 算法运行期间CPU占用率
从实验结果图和测量数据表可以看出,移动机器人系统运行Cartographer算法构建的栅格地图与真实环境较为相符,平均相对误差较小,且运行期间的CPU占用率不高。
5 结 论
本文以小型工控机作为上位机,stm32f103单片机作为下位机,通过RPLIADR A2激光雷达获取环境信息,利用ROS分布式系统及Cartographer算法构建了移动机器人SLAM系统。仿真实验及实际环境测试结果表明,该移动机器人具有良好的建图精度和系统性能,而且具有模块化、拓展方便等优点,可用于ROS框架和移动机器人的基础实验。