近年来,随着信息技术和人工智能技术的迅速发展,智能机器人已广泛应用于现代制造车间工厂,承担车间物料运输、上下料等工作,已成为制造车间物品智能分拣或智能传送系统不可或缺的一部分。实现制造车间移动机器人自主导航的核心,在于如何有效地应对机器人在未知环境中进行精准定位与高效路径规划的挑战。一方面,制造车间环境对移动机器人定位有较高精度要求,而基于里程计惯性导航方法
[1],机器人在移动过程中不可避免会产生航迹计算偏差;另一方面,制造车间常常处于室内环境,北斗卫星、GPS等导航技术在室内存在信号弱、定位误差大等问题
[2]。
显然,传统的导航技术无法满足制造车间移动机器人的要求。ROS作为开放式的机器人操作系统,提供大量开源的硬件驱动和算法功能包
[3],不但可以实现机器人控制,而且可以模拟移动机器人及制造车间加工环境,通过配置算法提高移动机器人的定位精度。因此,研究基于ROS的制造车间移动机器人路径规划仿真方法,将为物流机器人自主导航提供验证平台。
1 基于ROS的制造车间移动机器人导航仿真系统设计
1.1 基于ROS的制造车间导航仿真框架
ROS是机器人软件领域的一个基础平台
[4],其为机器人软件开发者提供了一种简单快捷的通信框架,通过定义不同的节点,ROS允许节点发布、接收和聚合各种信息,保证机器人能够顺利完成决策、感知和控制等任务。
ROS集成了大量的开发工具
[5],通过调用所需算法、合理利用仿真工具及设置相关参数,即可完成制造车间移动机器人导航仿真,如
图1所示。制造车间仿真环境由机器人模型和制造车间模型组成,而它们由ROS中的统一机器人模型URDF描述并创建,其通过仿真工具Gazebo实现可视化。Gazebo可以通过添加各种物理属性(如质量、摩擦系数等),提供高度还原的机器人模拟环境;而仿真数据信息由传感器信息、地图信息及环境信息三部分组成,由Rviz三维可视化工具实现,并以插件形式整合机器人的各种调试数据(如图像、地图和模型数据等)。这些插件可以是机器人模型插件、激光雷达插件等,通过Rviz可以直观地观察机器人的详细信息(如大小、形状、颜色,以及激光雷达的相关数据);利用VS code编译工具调用Cartographer、Gmapping功能包,分别实现制造车间下的机器人环境建图,调用Navigation2功能包实现机器人定位及路径规划。Navigation2功能包集成了自适应蒙特卡洛定位(adaptive Monte Carlo localization,AMCL)算法、A*算法、Dijkstra算法及DWB算法。
为了解决制造车间机器人调度仿真中的实时性问题,摒弃了原ROS的master-slave架构
[6],采用了Ubuntu22.04和ROS2 humble系统。
1.2 制造车间仿真模型
在ROS系统中,URDF模型作为统一的机器人模型描述标准
[7],提供了模型搭建的基础。而TF作为实时追踪多个坐标系的重要工具,能够直接选定坐标系来追踪机器人的位置和姿态信息。为了满足制造车间仿真调度的任务需求,移动机器人的具体任务可以分为接收传感器信号和根据算法在制造车间仿真模型中完成调度两个方面。建立了一个包含激光雷达和TF关节的移动机器人模型,具体的参数在
表1中列出。
图2展示了添加TF坐标系的移动机器人模型在Rviz和Gazebo中的显示情况。在Rviz中,红色的箭头代表机器人的当前位姿。
为了确保制造车间仿真调度模型地图的精确性,采用Gazebo来建立实体制造车间的三维环境。在这个环境中,建立了一个8 m×10 m×2 m的制造车间模型。模型包含8个1.5 m×0.8 m×1 m的机台,两个直径0.5 m、高1 m的仓储。机台与机台之间有一条宽0.6 m的过道,此种设计确保了车间的流畅运作。
图3展示了制造车间仿真模型的详细情况。
1.3 制造车间移动机器人导航系统设计
ROS除提供开发工具外,还为开发者提供了大量开源功能包
[5]。在此,利用Cartographer算法和Gmapping算法完成制造车间建图工作,利用Navigation2功能包完成机器人定位及路径规划。此外,ROS将上述功能包封装成节点的形式供开发者使用。
Cartographer功能包基于经典图优化算法
[8],Gmapping功能包基于RBPF粒子滤波算法
[9]。在ROS中,Cartographer的运行核心节点是Cartographer-node,Gmapping的运行核心节点是Slam-gmapping。这两种算法都利用机器人里程计信息和激光雷达传感器数据构建室内地图,实现精准的定位功能。
Navigation2是ROS中负责机器人导航的重要功能包
[10],其利用从各种传感器(如里程计和激光雷达)获取的信息流,确保机器人能够安全到达目的地。利用Navigation2中的关键组件,如动作服务器、导航服务器、环境表达和状态估计,实现了AMCL和路径规划算法(A*、Dijkstra及DWB算法)的集成和调用。
图4展示的是移动机器人导航系统框架。
由
图4可知,ROS中的航迹跟随器可以为机器人设置多个目标点。行为树是一个多任务控制框架,为机器人提供所需完成的任务节点。BT Navigation服务器是Navigation2的核心,其通过一种基于行为树的导航器实现,旨在提高导航任务的灵活性,提供一种“出发点-目标点”的形式指定复杂机器人行为。规划服务器基于全局代价地图来实现,能够调用A*及Dijkstra算法实现路径规划。控制服务器基于局部代价地图实现,能够调用DWB算法实现局部路径规划。恢复服务器的功能是当机器人导航失败时,能够执行下一步操作。Navigation2通过恢复、控制、规划三大服务器实现移动机器人控制,控制机器人速度、加速度等参数。Map-server是ROS提供的机器人加载、读取和存储地图的工具,将Cartographer或Gmapping建好的环境地图加载到Navigation2中。AMCL是蒙特卡洛自适应算法功能包,基于经典粒子滤波算法原理实现。Navigation2通过接收TF坐标、里程计数据及传感器数据实现移动机器人在代价地图上的路径规划。
2 机器人导航仿真的SLAM与路径规划算法
为了构建制造车间的移动机器人导航仿真系统,需要解决机器人在未知环境中的SLAM问题,并开展以规划器为核心的路径规划算法研究。SLAM主要涉及两个方面:机器人如何根据传感器和周围环境数据实现精准定位,以及如何利用这些定位信息构建增量式地图
[11]。根据环境信息感知度的不同,路径规划方法分为局部路径规划和全局路径规划。应用Cartographer算法和Gmapping算法,首先在已经搭建好的制造车间仿真模型和机器人模型中成功完成了制造车间的SLAM建图;接着采用AMCL算法,确保机器人在制造车间中的精确定位;最后,在全局路径规划上,对比了A*算法和Dijkstra算法,在局部路径规划上采用DWB算法。通过这一系列步骤,完成机器人仿真调度模型搭建。
2.1 机器人导航仿真的建图算法
2.1.1 Cartographer算法
Cartographer算法采用编写ROS-launch执行文件和编译Cartographer算法配置文件的方式让该算法在制造车间和机器人模型之间实现调度,利用Gazebo打开制造车间和机器人仿真模型,使用Rviz将仿真结果进行显现。当建图系统启动后,算法会将接收到的第一帧数据信息插入算法构建的Submap中,算法的流程框架如
图5所示。当机器人建立初始地图时,利用键盘操控机器人的方法,使机器人搭载的激光雷达搜索制造车间模型的每一个角落。随着机器人的移动,激光雷达接收到的数据信息不断发生变化,环境地图会根据新增加的数据信息完成更新和迭代,从而完成整个环境地图的构建。
在机器人建图的过程中,可以根据制造车间模型的实际需要来确定构建的环境地图是否完整。在完成环境建图后,可通过Navigation功能包中的Map-sever来保存地图,保存的地图即最终环境建图的结果。从Rviz中可以清晰地看出机器人当前的所在位置,
图6中红色边框展示的就是激光雷达扫描到的模型全貌,中央的红色圈即当前激光雷达扫描的频率帧。
2.1.2 Gmapping算法
由于目前ROS2中尚未推出适应建图算法Gmapping的版本,因此采用Ubuntu20.04和ROS noetic系统来实现Gmapping的调用。Gmapping算法采用编写Launch执行文件的方式在制造车间模型调用算法。在建图的初始阶段,算法会先初始化一部分粒子从而构建初始地图,虽然地图的完整度和尺寸随着机器人不断移动而逐渐增加,但Gmapping算法在每一次采样后都会重新计算,每一次地图更新的逻辑都相对独立,其算法框架如
图7所示。随着环境范围的增加,算法需要的粒子数目也在增加,每次更新地图所需时间也在不断增加,因此,Gmapping的可拓展性限制了该算法在大型环境中的发展空间,地图精度与建图环境大小二者不可兼得。
机器人在初始Rviz软件时,会立即初始化周围粒子,此时激光雷达接收的这一部分数据会立即更新该粒子群,建立机器人的初始化状态。键盘操控机器人在制造车间模型中运动,从而完成整个环境地图的构建,具体建图过程如
图8所示。与Cartographer算法的建图过程类似,Gmapping算法也可以根据制造车间模型的实际需要来确定构建的环境地图是否完整。
2.1.3 算法建图对比
机器人建图调用了Cartographer算法和Gmapping算法,选用相同的终点位姿完成两种方法下的机器人自主导航建图,将生成的环境地图进行比较,如
图9所示。两种方法生成环境地图时间及CPU平均占用率如
表2所示。
直观上来说,Cartographer和Gmapping都实现了制造车间整体环境的建图,但在地图边界的识别线效果上,Gmapping不如Cartographer平直顺滑。在建图精度上,Gmapping建图会出现地图重叠的现象。选用制造车间仿真模型较小,Gmapping算法涉及时间复杂度和空间复杂度的平稳问题求解,建图所需粒子数和占据计算资源均较少,建图障碍边界识别和Cartographer差别不大。Gmapping主要依靠里程计的数据,需要牺牲一定的空间复杂度保证算法的计算效率,建图精度随环境特征增加而下降,所以地图边界线的清晰度和建图时间长短上Gmapping弱于Cartographer。在建图过程中,随着机器人的不断移动,里程计误差也在不断增加,进而发生地图重叠的现象,因此,机器人导航仿真采用Cartographer算法。
2.2 机器人导航仿真的定位算法
AMCL算法是一种已知环境地图的粒子滤波定位算法
[12]。采用Navigation2功能包完成AMCL算法的研究工作,并将Rviz机器人位置与Gazebo中的机器人实际位置进行对比,探究该算法在仿真中的定位误差。绿点代表的是机器人可能出现的概率粒子群,绿点密度越大说明机器人在该区域出现的概率越大,见
图10。
在机器人移动过程中,概率粒子群会朝着机器人的移动方向行进。同时,算法会不断运算概率粒子群的运动模拟,确保其与机器人实际运动保持一致。当机器人到达终点时,粒子群也会相应更新,实现重新定位。
2.3 机器人导航仿真的全局路径规划
Dijkstra算法是一种基于广度优先搜索的路径规划算法
[13],通过贪心思想实现。该算法以初始点为中心向机器人的周边区域全面扫描节点,直到找到目标终点,再通过算法的评价函数进行反向搜索,筛选相关节点,找到最短路径。A*算法常被认为是Dijkstra算法的扩展
[14],是一种将广度优先搜索式和启发式结合在一起的路径规划算法。在算法规划路径的过程中,移动机器人不仅需要考虑与离自身最近节点的距离,还要考虑自身位置和目标终点间的距离,通过估价函数灵活选择在不同情况下耗费代价最小的路径方案。
采用Navigation2功能包规划器调用Dijkstra算法。在机器人的运动过程中,实现边规划边定位,将全局路径规划算法配置成机器人规划器的形式写入机器人仿真中,规划器以参数文件的形式与环境地图、定位器等被机器人调用。在进入Rviz的初始界面后,首先确定机器人的初始点位置,利用上文的配置AMCL定位算法完成机器人的定位,完成对环境地图的识别。利用Navigation2中的Goal工具设置机器人的目标终点,当确定目标终点后,路径规划器会直接运行Dijkstra算法,并计算算法运行时间,Rviz中能够清晰地显示生成一条红色的全局路径,如
图11所示。
运用相同的方法调用A*算法,该调用方法下所选距离为曼哈顿距离。与上述Dijkstra算法设置相同的初始点和终点位姿,Rviz中能够清晰地显示生成了一条红色的全局路径,如
图12所示。分别运行Dijkstra和A*两种全局路径规划算法,设置机器人相同的最大运行速度,对机器人规划路径时间分别计时。从
图13两种算法下机器人完成整条路径规划的时间比较可以看出,A*算法的规划速度较Dijkstra算法的规划速度快。
在仿真环境中,由于机器人在避障过程中会调整位姿,里程计会存在漂移现象,随着机器人的不断移动,里程计误差也在不断累积,里程计的推算定位无法对机器人的被动移位进行正确估算。因此,在机器人每完成一次路径规划后,重新运行AMCL算法。首先根据里程计数据获取机器人初始位置,再根据激光雷达数据计算初始位置偏移值,从而完成机器人在地图上的重新定位。
图14为采用A*算法的路径规划器用恢复规划器自适应调整定位的前后对比,红色识别框代表的是当前机器人位姿下的激光雷达识别到的障碍物信息,黑色边框代表实际障碍物情况。
2.4 机器人导航仿真的局部路径规划
DWB局部路径规划算法是机器人对于环境信息未知或部分已知,通过机器人搭载的传感器实时监测环境信息,根据在全局代价地图上全局路径规划得到的路径和传感器接收的环境信息在局部路径上进行决策和调整。采用Rviz实现建图、定位与路径规划的可视化,通过在Rviz中的Display选项中订阅/map、/robot-model、/global-path、/local-path等话题,可以观察到移动机器人在自主导航过程中的环境地图、机器人模型、全局规划路径、局部规划路径以及机器人位姿的相对变化。
基于ROS的Rviz软件完成局部路径规划调整路径的显示,首先,采用Goal工具确定机器人的行进初始点和目标终点,全局路径规划器会为机器人规划出一条合适的全局路径;然后,机器人在行进过程中不断接收里程计和激光雷达信号,配置好的DWB算法的局部路径规划器开始发挥作用,对机器人的实际行进路径进行动态调整;最后,当机器人到达目标终点时,另一个Rviz窗口会显示机器人的实际行进路线。通过对比全局规划路径和实际路径,即可得到机器人局部路径规划器的调整结果。
图15所示为采用A*算法规划器的机器人在行进过程中局部路径规划器规划过程,红线为全局规划路径,黄线为机器人行进的实际路径。
3 基于Slam-toolbox的机器人导航仿真测试
基于前文完成的制造车间仿真模型SLAM,展开了以规划器为核心的路径规划算法研究,完成移动机器人调度模型的建图定位及路径规划。为验证移动机器人调度模型的有效性,采用Slam-toolbox工具完成机器人仿真调度模型下的仿真测试,即实现在未知环境下的同步建图。
Slam-toolbox工具采用了一种弹性姿态图定位算法
[15],该种建图方法可以跟踪环境中已经生成地图的局部要素,而不是将已生成的地图视为偏差,避免了里程计滑移现象带来的地图重叠影响。该算法大大提高了机器人的定位精度,有效减小了建图过程因里程计滑移带来的误差。在使用Slam-toolbox工具实现同步建图时,为机器人配置好对应的A*全局路径规划算法和DWB局部路径规划算法,采用的建图算法为Cartographer算法,最终完成了机器人导航仿真的测试(
图16)。
从
图16可以清晰地看出,机器人随着自身运动完成了自主导航,黑色边框代表的是机器人已扫描到的障碍物信息,紫色边框代表的是激光雷达对障碍物扫描信息与已构建环境地图信息的验证结果,连续红点代表的是当前激光雷达扫描到的障碍物信息,白色区域为机器人已完成的建图区域,绿色区域为制造车间的未知环境,红线代表的是机器人全局路径规划路线,绿色箭头及其朝向代表的是此次机器人导航目标点位姿。
Slam-toolbox工具箱生成的环境地图相比于运用键盘控制的Cartographer算法生成的环境地图精度更高,障碍物的黑色边框信息也更明显,二者的清晰度相差无几,
图17展示的是Slam-toolbox同步建图效果。通过与
表2的结果进行对比,发现采用Slam-toolbox的同步建图应用了精确的弹性姿态图定位算法,里程计带来的误差被大大减小,增强了Cartographer算法的建图能力。其环境建图所需时间为492 s,程序运行时的CPU占用率为75%。因此,精确的定位与清晰的环境地图是相辅相成的,良好的定位技术可以提高环境地图的建图效果,精准的环境地图作为参数也有助于精准定位的实现。
4 结论
在分析基于ROS的制造车间路径规划、定位和建图算法发展的现状基础上,建立了一个制造车间移动机器人导航仿真系统。基于ROS的仿真工具,深入研究了自主建图与定位算法、路径规划算法的相关核心技术,通过算法的应用和参数的调试改进,完成了移动机器人在制造车间仿真模型的导航测试,结论如下:
1) 对机器人的运动学关系和动力学关系以及传感器进行了URDF建模分析,基于ROS设计了制造车间仿真模型,分别运用Gmapping算法和Cartographer算法完成了地图构建,对比了两种算法建图的优缺点。利用AMCL算法完成了机器人在制造车间模型中的定位,实现机器人定位。
2) 通过在Navigation2功能包设置规划器的方式完成了A*和Dijkstra全局路径规划算法的调度,对比了A*算法和Dijkstra算法的优缺点,完成了DWB局部路径规划算法的调度。通过Rviz中的Goal工具设置初始点和目标终点,完成机器人的路径规划。
3) 通过Slam-toolbox工具箱完成了机器人的同步建图,实现了制造车间仿真环境下的机器人导航,进一步提高了环境地图精度与机器人的定位能力。