时间:2024-08-31
吕勇,余雷,王诗颂
(苏州大学机电工程学院,江苏苏州,215021)
关键字:ROS平台;移动机器人;避障算法
高等教育是衡量一个国家发展水平的重要标志。随着社会的快速发展以及国家政策的提出,地方高校需要积极响应并做出改变,培养满足企业的新型工科人才,在“新工科”背景下进行一流本科专业的建设。我校机电学院的电气工程及其自动化专业经过不懈的努力,已顺利通过中国工程教育专业认证,同时也是教育部卓越工程师教育培养计划专业、江苏省一流本科专业以及苏州大学一流本科专业。
近年来,随着机器人技术的快速发展,在工业制造、物流快递以及安防监控等领域的应用日趋普遍。在新工科背景下,并结合高等学校的特点,如何培养出具有创新能力并符合企业需求的高素质人才,成为当前研究的重要课题。机器人技术作为交叉学科的典型代表,涉及了计算机、自动控制、机械以及人工智能等知识,因此对学生的综合运用能力有比较高的要求。在实验教学中,要让学生通过具体的实践去更好的理解理论知识,并将理论与应用相结合,起到融会贯通的效果。
机器人作为电气工程及其自动化专业的十分重要的课程之一,从类别来看,其主要分为工业机器人以及服务机器人两种。本文以服务机器人中的移动机器人[1]作为切入点,基于ROS平台展开具体的实验教学方法研究。实验教学不能仅局限于课堂讲授,为了让学生从复杂的底层代码阅读与理解中解放出来,本实验只需要在软件平台上添加新的模块实现功能。实验设计依赖ROS的话题机制,以C++语言作为编程语言,在小车turtlebot2上进行例程的实现。
ROS(Robot Operating System)平台是一个机器人操作平台,其诞生于斯坦福STAIR项目。作为机器人学习的平台包含有大量的开源代码,以及包括TF坐标变换、QT工具箱、RVIZ可视化工具以及GAZEBO仿真平台在内的大量机器人开发工具。ROS所发售的TURTLEBOT机器人是ROS官方打造的基于ROS的软硬件学习平台。ROS很多的开源代码都是以TURTLRBOT机器人作为硬件平台实现的。本实验所搭建的例程实现平台以TURTLEBOT2机器人为硬件基础[2,3]。
实验中还涉及到深度相机,与传统相机有所不同,深度相机可以捕捉环境的景深信息,因此深度相机可以作为传感器为gmapping 建图提供环境信息。而与激光雷达相比,深度相机在建图准确率与速度上明显比不上激光雷达,这一点通过深度相机 kinect2和激光雷达velodyne所建的图中就可以得知。但是,kinect2在行人识别上可以获得明显优于激光雷达的效果,深度相机可以直接采用基于深度学习的方法进行人像识别,从而进行针对人的避障。
本实验采用A*算法进行避障,该算法是一种静态路网中求解最短路径的有效方法,也是解决众多搜索问题的有效算法。当算法中的距离估算值与实际值越接近,相应的搜索速度也越快。在使用A*算法时,会创建两张表,一张是open表,其中保存未访问过的节点;另一张是closed表,其中保存已访问过的节点。我们从起始点出发,查询与起始点相邻的点,此时,所有下一个点的启发值均为1。
在实际实验过程中,我们指导学生更侧重A*算法的应用,在有理解能力的基础上再深入了解A*算法。为了增加对比效果,在使用的导航包turtlebot-navigation中还包含了其它避障算法,比如dijkstra算法,学生可以通过更改相应的配置文件来实现不同避障算法下的移动机器人自主导航。
Rviz是ROS自带的三维可视化平台,以话题的形式让数据在各例程中进行交流。Rviz相当于一个可以订阅所有话题的平台,并按照消息类型将数据可视化,并可以在地图中发布目标点。该平台可以方便地图的构建与自主导航,图1是利用gmapping在Rviz可视化建图的具体例子。
图1 Rviz可视化建图
在完成建图以后,我们的移动机器人需要弄清楚自己在地图中的具体位置,因此我们在实验中采用了定位软件包AMCL定位。该软件包的全称是Adaptive Monte Carlo Localization,即自适应蒙特卡洛定位,也称之为模拟法,是一种判断置信度的方法。由于机器人可能在地图上的任何位置,因此可以结合传感器的输出数据进行分析,概率值最大的那个区域一般就判断为机器人所在的位置。
在该实验中,我们主要完成添加障碍物并进行可视化两项子任务。为了模拟已知环境中忽然出现人体的情况,我们采用添加障碍物的方法进行模拟。添加障碍物实际上是将障碍物发布到“/map”这个节点中去,为了准确地将障碍物发布到地图中的某一个位置,我们需要使用/clicked_point这个话题机制,并最终以坐标的形式发布出来。由于地图是以一维数组的形式存储,在构建的地图中,只有0和100两种状态,分别代表可通行点和障碍物点。因此,在地图中添加障碍物时,如果知道了这个点的坐标,可以在一维数组中找到对应这个坐标的编号。计算Rviz中所点击位置对应一维数组中第几个数的代码如下所示:
在完成地图中添加障碍物以后,我们需要将将其在Rviz中进行可视化。事实上,我们并不是为障碍物套上一层可视化的外壳,而是创造障碍物的位置,利用/point_marker这个话题创造一个障碍物点,并添加其膨胀层。为了更清楚的进行观察,将障碍物点的rgb设置为r=255.0, g=0以及b=0,即为红色,同时设置该点在x, y方向上的尺度。添加可视化外壳的代码如下所示:
本实验利用ROS开源的Kinect+gmapping进行建图,在建图过程中,为了便于学生开展实验,我们并未选取过于复杂的地形,而是在实验室外的过道内进行建图,生成的pgm地图文件如图2所示。
图2 走廊建图生成的pgm文件
在完成建图后,我们用ROS开源的程序进行导航,再结合我们添加的障碍物功能以及避障功能完成该实验。实验流程如图3所示:首先是建立一张空白地图,然后添加障碍物,最后设置目标点,移动机器人在自主导航的过程中采用A*算法。
图3
上述实验中,设置目标点以后,图3中的移动机器人[4,5]遵循A*算法稍微绕开障碍物。为了进一步观察移动机器人遇到障碍物的反应,我们在图4中记录完整的避障过程,具体如下:首先,移动机器人与障碍物的距离靠近时,会选择在一旁等待;其次,等待数秒后,移动机器人重新驶向原定目标点;最后,在成功避开障碍物以后,移动机器人最终达到目标点。
图4
通过以上的具体实验,本实验以ROS平台为核心,在教学过程中采用了“任务驱动的自主学习”方法,设置了现实中的移动机器人需要避障这一实际问题。在完成实验目标的过程中,将避障问题又分为四个子任务,学生以小组为单位在仿真平台上进行动手能力的实际训练,从而可以拓展学生对机器人相关知识理解的深度与广度。
此外,本实验不仅涉及到硬件知识的掌握,比如激光雷达和Kinect相机,还要对相应模块的添加具有一定的编程能力,还可以引导学生在算法上进行优化,比如传统的A*算法,使其避障更高效。该实验从实践角度巩固学生在课堂上所学的知识,有利于学生提高动手能力,并为将来就业打下坚实的基础。
我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自各大过期杂志,内容仅供学习参考,不准确地方联系删除处理!