APP下载

SLAM自主导航系统设计

2022-04-20秦晓双

科教创新与实践 2022年2期

秦晓双

摘要:随着机器人认知技术的发展,自主机器人对任务的描述正在从物理信息向语义信息转变,这就对自主机器人对环境的建模描述的精确性和一致性提出了更高的要求。为了解决这一问题,机器人的自主探索协同定位与建图(SLAM)自主导航系统设计成为当今研究热点。本文设计的自主导航系统是在基于ROS操作系统下的智行Mini平台实现的,利用gmapping包,move_base包,amcl包,以及navigation包搭建了一套完整的建图导航机器人系统,实现了建图及自主导航功能。

关键词:SLAM;自主导航;ROS;建图

一、前言

现代科技日新月异,人工智能技术作为科学技术的前沿和重要发展方向,已经成为国内外研究机构、高新技术企业的热门研究课题。高智能自主机器人在军事、民用和科研等领域的不断涌现正展现着人工智能技术的具体发展。自主机器人可以在各种环境的探测、工厂加工生产、灾难救援和日常生活服务等各领域中得到应用并发挥巨大的作用。

在实际应用过程中,机器人在执行很多任务的时候对其工作环境事先并不知道,即环境的形状、大小和障碍物等信息都是未知的。自主机器人应像人一样具备环境感知、信息处理、决策判断和行为执行的能力。同时,随着机器人认知技术的发展,自主机器人对任务的描述正在从物理信息向语义信息转变,这就对自主机器人对环境的建模描述的精确性和一致性提出了更高的要求。为了解决这一问题,自主机器人在陌生的环境中必须具备自主完成地图构建、定位和自主导航的能力,即机器人的自主探索协同定位与建图(SLAM)。

二、软件设计

2.1 使用gmapping包创建地图

在ROS中,地图是一张位图,表示网络被占据的情况,其中白色像素代表没有被占据的网格,黑色像素代表障碍物,灰色像素代表未知点,因此可以使用任意的图像处理程序处理该位图。在本系统中,由于配有 Kinect 双目视觉传感器,所以机器人在其目标范围内行动时可以自己创建地图。为了生成任意具有相同数据的测试地图供以后不同参数的gmapping使用,系统使用ROS的 gmapping实时定位与绘制地图(SLAM)节点,这个节点会把从 Kinect传感器中得到的数据整合到一张位图中。运行时让机器人在一个区域内活动,同时记录测量数据并放入rosbag文件中,然后运行SLAM节点生成一张地图。

2.2 使用move_base包进行路径规划和障碍物躲避

使用 move_base包实现路径规划和障碍物躲避分为两步,即首先指定导航目标。在指定导航目标前,机器人要提供在指定框架下的目标方位,move_base包通过使用MoveBaseActionGoal 消息指定目标。接下来需要为路径规划设定参数,在 move_base包节点运行前需要4个配置文件,这些文件定义了一系列相关参数,例如越过障碍物的代价、机器人的半径、路径规划时要考虑未来多长的路、机器人移动的速度等。

2.3 使用amcl包自主定位

amcl包用于让机器人在已有的地图里利用从当前机器人视觉传感器中得到的数据进行定位。当amcl包第一次启动时,机器人需要设定一个初始方位,之后amcl 包利用该初始方位确定自己的位置。机器人初始方位设定好之后,可以使用“2D Nav Goal”按钮为机器人在地图上指出不同的导航目标。必要时,可以使用鼠标滚轮放大或者缩小。在机器人运动时,机器人周围会围绕一堆绿色箭头,这些箭头代表amcl包返回的方位范围。当机器人在这个环境周围活动时,这堆箭头可以缩小并作为额外的扫描数据,让amcl包修正它对机器人方向和位置的估算。

2.4 使用navigation包实现智行mini的导航功能

导航功能的实现主要是依靠 navigation 功能包集来完成的,navigation 是 2D 的导航包集,它通过接收里程计数据、tf 坐标变换树以及传感器数据,为移动机器人输出目标位置以及安全速度。

导航功能的实现要有的三个因素就是地图、导航的起点、终点目标,并在导航过程中不断根据里程计、激光雷达等传感器数据来确定自己的位置。在 navigation 导航功能中,首先会根据代价地图规划处起点到终点的路线,然后结合里程计信息以及激光雷达的数据判断当前位置并规划处当前位置附近的局部路线以达到避障的效果,最终将局部规划的路线以速度指令的形式输出。

三、系统运行

在启动手柄控制机器人来完成建图后,要实现自主导航功能,首先需要打开终端,输入roslaunch zoo_robot robot_lidar.launch启动底盘,然后打开新的终端,输入roslaunch robot_slam navigation.launch运行导航功能,然后打开新终端,输入roslaunch robot_slam view_nav.launch,就可以在Rviz下看到机器人在环境场景中的一些信息了,如图1所示。接下来要通过2d Nav Goal选择目标点了,这里我们选择启动脚本,通过代码发布航点。

打开新的终端输入 roslaunch robot_slam navigation_multi_demo.launch,也就是运行了一个名为 navigation_multi_demo.launch 的 python 脚本,之后输入1确认,就会开始自动发布航点,机器人就会自动开始运动。

四、总结

本次设计以ROS技术为基础,使用ROS平台对机器人软件系统进行搭建,搭建了機器人的自主导航系统以及地图创建系统,使其能在上位机控制实现地图创建,同时具有自主探索导航功能。通过本次设计,使我对SLAM自主导航系统设计的整个过程有了很好的掌握,对移动机器人有了一定的了解,巩固了相关知识。最大的收获是对于课本有了更深刻的了解与认识,真正做到了理论与实践相结合,学以致用。

参考文献:

[1] 邓志,黎海超. 移动机器人的自主导航技术的研究综述[J]. 科技资讯,2016.

[2] 陈金宝,韩冬,聂宏. ROS开源机器人控制基础[M]. 上海:上海交通大学出版社,2016.

[3] Joao Santos, Rui P. Rocha. An Evaluation of 2D SLAM Techniques Available in Robot Operating System. IEEE 2013.