1. 引言
人工智能、芯片制造、互联网等技术的快速发展,机器人行业市场需求的飞快增长,再次点亮了机器人行业的未来。随着各类高新技术的不断升级、创新,人类的学习、工作、生活等都会变得更加智能化,人类的日常生活将会变得科技感十足。最能接近人类生活的高新技术莫过于机器人技术,其中机器人的软件开发技术尤为关键,曾经诞生了多种针对机器人开发的软件框架,它们为机器人行业的发展奠定了基础,其中应用最为优秀的软件框架之一就是ROS (Robot Operating System)机器人操作系统 [1]。
在复杂未知环境中,进行自主定位和地图构建是机器人实现自主导航、探索的基础,所以它是整个机器人行业能够迅猛发展的前提条件之一。目前,应用最多的GPS全球定位导航系统 [2] 主要应用于室外等建筑物稀疏的环境中,对室内环境下的即时定位和未知环境下的地图构建则应用较少。SLAM起源可以追溯到1986年,基于概率的方法首次引入到机器人实时定位和建图中 [3]。SLAM技术经过30余年的发展已经能够很好地解决复杂未知环境中的定位与地图构建问题。
ROS作为目前应用最广、最优秀的机器人操作系统,它为机器人的SLAM建图、自主导航提供了很多功能全面的功能包,并提供了丰富的可视化显示与仿真工具,而Gazebo仿真平台与Rviz可视化平台就是其中的代表。Gazebo具备强大的物理引擎、高质量的图形渲染、便捷的编程和图形接口,并且免费开源。Rviz既可以实现外部信息的图形化显示也可以对Rviz中的对象发布控制指令实现对机器人的控制与监测。ROS机器人操作系统极大地提高了机器人的研发速度,使机器人开发变得更加简单,开发成本更低廉。
2. ROS机器人操作系统
Willow Garage公司在2010年发布了开放源码的ROS框架,这一举措使得ROS在机器人领域掀起了开发与应用的热潮。此后,Pioneer、TurtleBot等机器人平台都开始支持ROS框架。以上的种种举措使得ROS的开源功能包数量呈指数级增长,它的应用涉及到服务机器人、工业机器人、植保机器人等诸多领域。近年来国内的机器人行业科研人员也逐渐接受,并使用ROS框架,他们取得了显著的成果,并通过在ROS社区中分享经验、成果促进了ROS社区的迅猛发展。ROS机器人操作系统的飞快发展,使得它成为一种机器人领域的应用标准。
ROS的设计目标是提高机器人研发中的软件复用率,总体来讲,ROS的特点主要有以下几点:1) ROS的核心是一个分布式、低耦合的通讯机制,由具备发布和订阅功能的RPC协议完成节点间的通信。2) ROS提供多种机器人开发工具、支持多语言编程极大的降低了机器人开发的难度,提高了机器人的开发效率。3) ROS开源社区免费开源提供大量的架构精简、集成度高的机器人应用功能,可以帮助我们快速开发功能原型。4) ROS已经成为一个庞大的生态系统,ROS软件包的数量呈指数级增加,越来越多第三方工具的支持,为机器人开发提供了系统化的解决方案。
ROS中把具体任务的进程、独立运行的可执行文件这些最小的执行单元统称为节点(Node),不同的节点可以运行在同一网络中的不同主机,节点的编程语言可以各不相同,但是节点在系统中的名称必须唯一。节点的控制中心是ROS Master,它为节点提供命名、注册服务以及参数服务器,并跟踪和记录话题/服务通信辅助节点间相互查找,辅助节点间建立连接,实现节点的分布式、松耦合通讯。
节点间的通讯方式可分为异步通讯(话题Topic)和同步通信(服务Service)。话题是节点间用来传输数据的重要总线,使用发布/订阅模型,数据由发布者传输到订阅者,同一个话题的发布者和订阅者均可为多个。话题传输的数据类型称为消息(Message),它包括ROS提供的标准类型和用户自定义类型,使用与编程语言无关的.msg文件定义。话题通讯流程图如图1所示。

Figure 1. Flow chart of topic communication
图1. 话题通讯流程图
服务是节点间的逻辑处理重要总线,使用客户端/服务器(C/S)模型,客户端发送请求数据,服务器完成处理后返回应答数据,适用于与编程语言无关的.srv文件定义请求和应答数据结构,编译过程中生成对应的代码文件。服务通讯流程图如图2所示。

Figure 2. Flow chart of service communication
图2. 服务通讯流程图
3. SLAM与Gmapping功能包
同步定位与地图构建(Simultaneous Localization and Mapping,简称SLAM),即机器人自身位置不确定情况下,在完全未知的环境中创建地图,同时利用地图进行自主定位和导航 [4]。定位,即根据传感器的信息和内部的算法预估出机器人在地图上的坐标位置,或者用一个问题来表示:我在哪?地图构建,即根据传感器的信息和内部的地图处理算法来构建一张全新的地图或者是修正已知的地图,同时将地图信息提供给定位算法作为先验地图。SLAM建图的基本过程如图3所示。
SLAM按照传感器分类,可分为基于激光雷达的SLAM、基于视觉的SLAM、还有基于声纳、红外等传感器的SALM。视觉传感器有价格低、重量轻、获取信息丰富和易于数据关联等优点,但是受到光线的影响较大,且不适合高速运动的情况;激光雷达具有精度高、稳定性好、技术成熟、建图比较直观、不存在累计误差等特点。激光SLAM是目前最稳定、最主流的定位导航和地图构建方法,这一点在近些年谷歌、特斯拉、百度等无人驾驶汽车行业巨头的成功案例中能够很好的被证明。
ROS为机器人SLAM建图提供了大量的高度集成化的功能包,其中常用的功能包有Gmapping功能包、Hector功能包、Cartographer功能包以及Rtabmap功能包等 [5]。目前,应用最广范、性能比较稳的是Gmapping功能包。
Gmapping算法是目前应用最广的2D SLAM方法,它基于RBPF粒子滤波算法,通过获取激光雷达和里程计信息来进行建图 [6],其中IMU信息可以作为输入信息提高建图精度,但是IMU信息不是必需的输入信息。Gmapping功能包中封装了gmapping核心算法,并实现了在ROS框架下与其它功能包的通信,其输出地图的话题是nav_msgs/OccupancyGrid,其中核心节点是slam_gmapping节点。Gmapping功能包的总体架构如图4所示。本实验的Gmapping功能包的输入信息包括深度信息(激光雷达数据)和里程

Figure 4. General block diagram of Gmapping feature pack
图4. Gmapping功能包的总体框图
计信息,实验的目的在于复现Gmapping功能包的建图功能,不涉及gmapping算法优化和局部参数的调整,所以功能包中的很多参数不进行变动。只需将必要的参数进行调整,包括tf和scan两个Topic订阅,map_metadata、map和~entropy三个Topic发布,一个dynamic_map服务(Service)。其中tf用于基坐标系、激光雷达坐标系、里程计坐标系间变化,scan用于激光雷达扫描数据;map_metadata用于发布地图Meta数据,map用于发布地图栅格数据,~entropy用于发布机器人姿态分布熵的估计;dynamic_map用于获取地图数据。本实验通过编写launch文件对其进行配置,此处命名为gmapping.launch。
4. Gazebo仿真系统设计
Gazebo是一个三维多机器人仿真软件,它可以模拟复杂环境中机器人的移动、关节的运动 [7]。ROS官方为Gazebo提供了一个强大的离线数据库,里面包含各式各样的能够模拟真实环境的模型,用户也可以在软件中自由创建模型。同时,Gazebo可以与Rviz产生联动,使得开发者可以从多个角度观察仿真的过程、结果,提高了科研人员的研发效率。
利用URDF建模方法创建机器人模型,大致可分为四步:1) 使用圆柱体创建一个车体模型;2) 使用圆柱体分别创建左侧、右侧车轮;3) 使用球体创建前后支撑轮;4) 创建激光雷达传感器。机器人的URDF文件编写可以参考文献 [8]。
由于URDF建模存在模型冗长内容重复、不便于二次开发以及不能进行各个参数的运算等缺点,本论文对机器人物理仿真模型进行了优化,大致可分为五步:1) 为Link标签添加惯性参数和碰撞属性;2) 为各个Link添加Gazebo标签,使其能在Gazebo中能有更好的颜色信息等属性;3) 为各个Joint添加传动装置;4) 添加Gazebo控制器插件,完成机器人左右轮的差速控制,实现机器人前进、后退、转弯功能;5) 编写对应的机器人模型启动的launch文件,在Gazebo中加载机器人模型。值得注意的是,为了保证模型顺利加载,需要将Gazebo的离线模型文件库下载到本地。机器人模型优化部分关键代码如下。
为Link添加碰撞属性:
为Joint添加传动装置:
transmission_interface/Simpletransmission
hardware_interface/VelocityJointInterface
hardware_interface/VelocityJointInterface
2
添加Gazebo控制器插件
……
1
150.0
1
2.0
cmd_vel
odom
odom
……
在Gazebo中使用Building Editor工具创建一个封闭的机器人仿真建图空间,完成仿真环境的绘制。仿真机器人模型和仿真环境创建完成后,需要编写一个包含以上两部分内容的launch启动文件,启动仿真机器人模型和仿真环境节点,此处的节点命名gazebo.launch。gmapping仿真环境模型如图5所示。蓝色的圆形是仿真机器人在仿真环境中的俯视图。

Figure 5. Gmapping simulation environment model
图5. Gmapping仿真环境模型
5. 仿真验证
本实验使用的ROS版本为kinetic,选用的电脑操作系统是Ubuntu16.04,仿真器选用Gazebo,显示界面使用Rviz。首先,通过gazebo.launch文件启动仿真环境(机器人仿真建图空间和机器人仿真模型)。然后,通过使用命令行工具安装Gmapping功能包,并通过已经编写好的gmapping.launch文件启动建图相关的多个仿真节点,gmapping仿真节点启动后会自动订阅雷达信息和里程计信息,为建图做好准备。最后,使用键盘控制节点对应的launch文件完成键盘对机器人的控制,通过电脑方向键移动机器人使激光雷达完成对整个空间的扫描进而完成地图构建,其中u是向左转,i是向前走,o是向右转,m是倒退,使用map_server命令行工具保存gmapping建图结果。
本实验过程通过Rviz可视化工具可以实时记录建图效果,通过充分移动机器人位置提高Gmapping建图质量,仿真建图过程如图6所示。仿真实验结果如图7所示。
6. 结论
本文通过ROS提供的Gazebo仿真软件完成了对实现SLAM算法的仿真环境绘制,并应用Gmapping功能包实现了基于激光雷达的SLAM算法仿真建图。从所建仿真地图可以看出,Gmapping算法可以很好地完成模拟室内环境下的仿真地图构建,并且建图质量比较高。为以后在真实环境中构建地图提供了参考经验。