高腾腾,李彩虹,刘国名,郭娜,王迪
(山东理工大学 计算机科学与技术学院, 山东 淄博 255049)
移动机器人是一种在复杂环境下工作,具有自规划、自组织、自适应能力的智能系统[1]。在移动机器人的相关技术研究中,自主导航是其核心问题,也是实现智能化和自主移动的关键技术,具有重要的研究意义。简单来说,自主导航系统能够确定机器人当前位姿,控制机器人沿一条高效、通畅的路线移动到指定目标位置。
自主导航系统中,应用最广泛的是GPS定位导航[2-4]与INS惯性导航[5-7]。其中GPS导航通过GPS实时接收卫星信息调整机器人位姿,促使机器人完成既定路线的智能化追踪。这种方式在室外空旷环境有比较好的导航效果,但在室内环境中,由于建筑物等对GPS信号的干扰,极易使机器人造成定位误差,无法追踪规划好的路线。惯导系统通过计算传感器数据的方式推算机器人航迹,实现定位与导航。这种方式在短时间内,导航精度比较高,但随着时间的增长,因漂移现象积累的误差将会使机器人逐渐丧失导航能力。文献[8-11]针对GPS导航系统与惯导系统的缺点,提出INS/GPS组合导航系统,在一定程度上提高了导航精度。但在室内场景下,其提升效果并不理想。文献[12]提出地面铺设交变磁场轨道与读取IC卡定位的方式进行导航系统设计,成本较大且导航点无法自由调节。文献[13]提出一种多惯性导航系统信息融合方法,有效提高了传统单惯性导航系统的导航精度。文献[14-15]提出结合惯导系统与视觉导航系统,有效发挥两种导航技术的优势,进而提高导航精度。
本文针对GPS导航系统与INS惯导系统缺点,参照文献[13-15]的研究成果,基于ROS平台[16],采用编码器里程计与激光雷达相结合的传感系统,提出一种应用于室内环境的自主导航系统。
设计在Gazebo仿真软件运行且能够发布里程计数据与雷达数据的URDF移动机器人模型,使其能够匹配自主导航系统,完成未知环境下的导航测试。
设计机器人底盘的URDF文件,使机器人能够接受自主导航系统的移动控制指令并发布里程计数据。文件主要包括添加惯性参数、碰撞属性的载物板连杆、驱动轮连杆、支撑轮连杆,添加传动装置并配置电机控制方式、减速比的驱动轮关节,用于接收控制指令并发布里程计消息的Gazebo控制器插件。
设计机器人传感系统的URDF文件,使机器人能够感知环境,发布传感器数据协助导航系统进行地图构建、实时避障、定位等。本文采用Gazebo激光雷达插件,模拟真实激光雷达并发布深度信息。设计的机器人模型如图1所示。
图1 运行在Gazebo中的机器人模型Fig.1 Robot model running in Gazebo
自主导航系统分为前后两端,前端依据里程计、激光雷达信息,采用Rao-Blackwellized粒子滤波算法,使机器人感知周围环境并完整构建地图,提供给后端。后端根据地图、激光雷达信息,采用自适应蒙特卡罗定位法[17],以辅助手段修正惯性导航里程计长时间因漂移现象积累的定位误差,矫正机器人位姿,实现机器人精准定位,从而有效避免惯导系统与GPS导航系统缺点。同时,后端采用A*算法规划机器人当前位姿与目标点之间路径,采用DWA(dynamic window approaches)算法实时避障,能够使机器人沿一条无碰撞、代价较低路线移动到目标位置。自主导航系统前端设计流程如图2所示,主要使机器人通过传感器对所处环境进行建模,继而能提供地图信息协助后端进行定位以及路径规划。
图2 自主导航系统前端设计流程Fig.2 Front end design process of autonomous navigation system
自主导航系统后端设计流程如图3所示,其依据传感器信息及地图数据对机器人精确定位,根据机器人当前位置、设定目标位置与环境模型进行全局路径规划,找到一条无碰撞最优路径。通过局部路径规划算法控制机器人追踪路径并及时躲避突发障碍物,从而顺利到达终点。在机器人自动行驶至终点过程中,会自动更新障碍物信息到原始地图,以便为下次导航提供参考。
图3 自主导航系统后端设计流程Fig.3 Back end design process of autonomous navigation system
环境建模由导航系统前端通过ROS开源Gmapping[18]功能包实现。其通过使用Rao-Blackwellized粒子滤波算法,订阅机器人移动时发布的坐标转换信息与激光雷达数据,发布地图数据与机器人位姿分布熵的估计,最终完成二维栅格地图的建立。
运行Gmapping功能包需要依据机器人进行调参,部分参数设计如下:
odom_frame: odom
map_update_interval: 5.0
maxRange: 5.0
maxUrange: 4.5
linearUpdate: 0.5
angularUpdate: 0.436
srr: 0.01
str: 0.01
stt: 0.02
particles: 80
xmin: -1.0
ymin: -1.0
xmax: 1.0
(2)在进行避雷保护线设置时,避雷保护性的高度必须要控制在规范设计要求内,以将比例线的防雷保护作用充分进行发挥。避雷保护线确定后,需要对避雷线的搭接长度进行相应确定,且焊接避雷线时需要按照技术要求进行焊接,防止出现虚焊与脱落的情况。对于各个电气设备则需要做好接地处理操作,且需要对配电箱的接地位置进行明确标注,以避免出现各种不规范误触操作。
ymax: 1.0
delta:0.05
参数设计直接影响建图效果。map_update_interval为地图更新频率,此值若设置过高,需要机器人缓慢移动才能准确建图,否则容易造成建图失败或地图不精确。相反,此值过低容易造成CPU资源浪费。此处设置一个中间值5.0。particles为Rao-Blackwellized粒子滤波算法中粒子数,此处设置为80,保证算法精确的同时还有较高的速度。maxRange、maxUrange根据雷达属性裁剪激光光束的可用范围为5.0、4.5,舍弃误差较大数据,使用并保留传感器部分精确数值。另外,为减少激光数据的冗余运算量,根据linearUpdate与angularUpdate设置机器人移动0.5 m或0.436 rad后进行一次激光扫描数据的处理。
导航系统是自主导航系统的核心,它能够依据环境模型与传感器信息,完成机器人定位、路径规划与追踪、实时避障与地图维护功能。导航系统主要由ROS提供的开源Amcl与Move_base功能包实现。系统结构框架如图4所示,其各个节点含义如下:
1)Global_planner 全局路径规划;
图4 导航系统结构框架Fig.4 Navigation system structure frame
2)Local_planner 局部路径规划、实时避障、发送机器人移动指令;
3)Recovery_behavior 配置机器人导航失败时的执行动作;
4)Global_costmap 全局代价地图,提供给全局路径规划器使用;
5)Local_costmap 局部代价地图,提供给局部路径规划器使用;
6)Amcl 矫正机器人在已知地图上的位姿信息;
7)Map_serve 为导航系统加载先验地图;
8)Sensor transform 发布机器人各个部件之间的坐标关系;
9)Odometry sources 发布机器人的里程计信息;
10)Sensor sources 发布机器人的传感器信息;
11)Base controller 接收机器人移动指令,实现机器人移动。
其中:1)~5)节点是导航系统所必须的,由Move_base功能包提供;6)和7)节点不是导航系统必备节点,本文为精确机器人定位与加载前端构建的地图,使用这两个节点;8)~11)节点主要用于发布机器人的状态信息。
机器人运动过程中,会因为地面打滑、漂移等因素造成里程计坐标系与地图坐标系不重合,形成定位误差,间接造成机器人卡住、不能沿规划的路径行走等问题。Amcl是2D机器人运动的概率定位系统,实现了自适应蒙特卡罗定位法,通过粒子滤波器跟踪已知地图上的机器人位姿,能对机器人进行定位矫正。本文使用Amcl功能包矫正机器人的定位误差。
运行Amcl功能包需要进行调参与配置,本部分设计参数如下:
odom_model_type: diff
odom_alpha5: 0.1
gui_publish_rate: 10.0
laser_max_beams: 60
laser_max_range: 12.0
min_particles: 500
max_particles: 2 000
laser_likelihood_max_dist: 2.0
update_min_d: 0.25
update_min_a: 0.2
odom_frame_id: odom
resample_interval: 1
transform_tolerance: 1.0
kld_err: 0.05
参数更改直接影响导航效果。其中,odom_model_type为里程计模型类型,设置为两轮差速;laser_max_range定义雷达扫描范围为12.0与雷达自身扫描允许的最小范围,其不需要裁剪激光光束,大量的激光数据将得到更多的周边环境信息,有利于定位;min_particles、 max_particles分别设置算法中使用的最小、最大粒子数量为500、2 000,粒子量的增加能提高定位精度。同时,为减小计算量与噪声影响,通过laser_max_beams设置更新滤波器时仅使用雷达扫描的60个等间距光束。不能过少设计光束个数,否则会因信息量太少造成定位不准确。
Move_base功能包是导航系统的核心,不仅提供全局路径规划器与局部路径规划器,还同时维护两个代价地图。其中全局路径规划使用A*算法,用于已知环境下的路径规划;局部路径规划使用DWA算法,用于实时避障,规划机器人每个周期内的角速度、线速度,发送指令控制机器人底盘移动。
与Amcl、Gmapping功能包一样,Move_base功能包同样需要调参、配置后才能使用,以下是配置move_base功能包的四个参数文件。
4.2.1 通用文件配置
此文件配置global_planner全局路径规划器与local_planner局部路径规划器的基本参数如下:
obstacle_range: 2.5
raytrace_range: 3.0
footprint_inflation: 0.01
robot_radius: 0.175
inflation_radius: 0.15
max_obstacle_height: 0.6
min_obstacle_height: 0.0
observation_sources: scan
scan:{data_type:LaserScan,topic:/scan,marking:true,clearing:true,expected_update_rate:0}
其中:obstacle_range设置机器人将2.5 m范围内障碍物更新到地图中,以便为下次导航提供最新环境模型;而对于不存在的障碍物信息,raytrace_range设置若其在机器人周边3 m范围内,在地图中给予清除,防止为下次导航带来干扰;robot_radius是机器人半径,以防与障碍物发生碰撞;inflation_radius将障碍物半径扩展0.15 m,使得机器人能与障碍物进一步保证安全距离。
4.2.2 全局代价地图配置
此文件用于配置Move_base功能包所维护的全局代价地图,参数如下:
global_costmap:
global_frame: map
robot_base_frame: base_footprint
update_frequency: 1.0
publish_frequency: 1.0
static_map: true
rolling_window: false
resolution: 0.01
transform_tolerance: 1.0
map_type: costmap
其中:update_frequency为代价地图的更新频率,其值越高地图精确度越低,值越低则CPU负担越重,此处要充分保证地图准确度,设置为1.0 Hz;static_map设置map_server为true,才能加载前端构建的环境模型。
4.2.3 局部代价地图配置
此文件用于配置Move_base功能包所维护的局部代价地图,参数如下:
local_costmap:
global_frame: odom
robot_base_frame: base_footprint
update_frequency: 3.0
publish_frequency: 1.0
static_map: false
rolling_window: true
width: 6.0
height: 6.0
resolution: 0.01
transform_tolerance: 1.0
局部代价地图参数与全局代价地图参数含义相同,但考虑到两者的适用范围,以及室内复杂性,修改static_map为false,使用动态地图,以便于机器人能够实时探测环境进行避障;修改rolling_window为true,以保证机器人移动时能够处在局部代价地图中心。
4.2.4 本地规划器配置
此文件用于配置local_planner局部路径规划器,参数如下:
controller_frequency: 3.0
TrajectoryPlannerROS:
max_vel_x: 0.5
min_vel_x: 0.1
max_vel_y: 0.0
min_vel_y: 0.0
planner_frequency:1.0
latch_xy_goal_tolerance: false
meter_scoring: true
oscillation_reset_dist: 0.05
stop_time_buffer:0.2
sim_granularity: 0.025
angular_sim_granularity: 0.025
dwa: true
其中:controller_frequency设置系统发布移动指令频率为3.0 Hz,使得机器人能及时接收信息并做出移动;dwa设置系统使用DWA算法用于局部路径规划;planner_frequency对全局路径规划的执行频率设置为1.0 Hz,使得机器人突遇障碍物时,仍然能沿一条最优路径移动;另外,为防止机器人因刹车不及时触碰到障碍物,根据stop_time_buffer设置机器人提前停止的时间长度为0.2 s。
为了验证所设计自主导航系统的可行性,在Gazebo仿真软件下,加载设计的URDF移动机器人模型,使其搭载自主导航系统并在所设计的室内环境下,测试机器人的导航效果。
本次仿真软件环境为:操作系统Ubuntu16.04,ROS Kentic,物理仿真软件Gazebo,数据可视化软件Rviz。硬件环境为:内存8 G,显卡GTX 850,CPU 核心频率2.9 GHz,型号酷睿i5-4210H。
5.2.1 地图构建
Gazebo仿真软件设置的室内信息与加载的机器人模型如图5所示。启动自主导航系统前端,控制机器人移动使其感知环境信息并建图。地图构建过程如图6所示,其左侧为运行在Gazebo仿真环境中的机器人,右侧是Rviz对机器人构建的地图数据进行可视化。机器人最终能够获取与室内环境相符的地图。
图5 Gazebo仿真环境Fig.5 Gazebo simulation environment
图6 二维栅格地图的构建与定位Fig.6 Construction and positioning of two-dimensional grid map
5.2.2 路径规划
启动自主导航后端,加载前端构建的地图,以机器人所在点为A,设置目标点为B,测试路径规划与定位功能。实验过程如图7所示,其左侧为运行在Gazebo仿真环境中的机器人,右侧是Rviz可视化的地图数据、导航系统确定的机器人位姿数据和规划的路径数据。机器人能够在地图中准确定位,规划一条从A点到B点的最优路线并使其自动追踪。
图7 路径规划Fig.7 Route plan
5.2.3 实时避障
重新启动自主导航后端,加载前端构建的地图,以机器人所在点为A,设置目标点为B,在导航系统控制机器人移动时,在前方添加障碍物,测试其避障功能。移除障碍物,设置目标点C,测试机器人能否及时更新地图并顺利到达C点。实验过程如图8所示,其左侧为运行在Gazebo仿真环境中的机器人,右侧是Rviz可视化的地图数据、导航系统确定的机器人位姿数据和规划的路径数据。机器人能够及时避障且更新地图。
图8 实时避障Fig.8 Real-time obstacle avoidance
对于前端环境建模,根据图6二维栅格地图构建过程,可以看出机器人每移动至新位置,均能通过传感器感知环境及时更新地图,最后获得的地图信息也基本与机器人所处环境相同。说明在此设计中,Gmapping功能包使用合理且其参数设计可行。对于后端,根据图7可以看出,机器人能够比较准确定位自身到环境模型中,甚至移动至目标点后,其位置依旧比较准确。同时,图7中机器人根据地图规划出来的绿色行进路线,也不存在冗余路段,路径最短且比较平滑。在图8中,在规划的绿色路径上临时放置障碍物,机器人能够将传感器探测到的部分障碍物信息及时更新至地图,并通过局部路径规划算法进行避障,移除临时障碍物,机器人也能够将其信息在地图中及时清除,其中,红色路线是机器人实际行走信息。最后,对导航过程进行综合分析,发现突遇障碍物时机器人避障时间略长,因此后期将对局部路径规划DWA算法进行改进,继而提高自动导航系统效率。
本文以机器人操作系统ROS为开发平台,应用其提供的开源功能包,经过配置、调参、组合,设计出能够用于室内机器人的自主导航系统,设计URDF机器人模型、设置仿真环境,使机器人模型搭载自主导航系统并在仿真环境中进行测试。结果表明,机器人能够准确地学习地图信息,并且在地图中进行路径规划,做到路径跟随与实时避障,为后期基于ROS操作系统设计真实机器人,提供了理论参考和实际应用价值。