基于ROS的服务机器人实训课程虚拟仿真教学研究
作者: 刘相权 秦宇飞
摘 要:针对目前服务机器人实训课程教学存在的设备成本高、学生操作机会不足等问题,该文提出基于ROS的仿真实训课程教学方案。依托真实系统和仿真实训室,构建基于ROS的服务机器人建模与运动仿真、建图与导航仿真、平面视觉检测仿真、三维视觉检测仿真、物品自动抓取综合应用仿真5个实训项目,详述每个项目的实施要点,实现虚实结合的实训模式。经过实践证明,虚拟仿真实验教学不仅提高实训教学效率,同时极大激发学生的学习兴趣与自主创新意识。
关键词:服务机器人;虚拟仿真;建图与导航;视觉检测;实验教学
中图分类号:G640 文献标志码:A 文章编号:2096-000X(2024)05-0073-05
Abstract: Aiming at the problems of high equipment cost and insufficient operation opportunities for students in the teaching of Service Robot Training course, a simulation training course teaching scheme based on ROS is proposed. Relying on the real system and simulation training room, five training projects such as service robot modeling and motion simulation based on ROS, SLAM and navigation simulation, plane visual inspection simulation, three-dimensional visual inspection simulation and automatic grasping comprehensive application simulation are constructed. The implementation key points of each project are described in detail, and the training mode of combining virtual and reality is realized. Practice has proved that the virtual simulation experiment teaching not only improves the training teaching efficiency, but also greatly stimulates students' learning interest and independent innovation consciousness.
Keywords: service robot; Virtual simulation; mapping and navigation; visual inspection; experiment teaching
教育部办公厅印发的《2019年教育信息化和网络安全工作要点》指出:“推动大数据、虚拟现实、人工智能等新技术在教育教学中的深入应用。”由此可见,国家高度重视虚拟现实在教学方式方法改革中的应用。
ROS作为一种开源软件,集成了全球机器人领域顶尖科研机构的研究成果,成为世界上较先进、通用的机器人与人工智能科研和教育平台。其涵盖了建图与导航定位、物体识别、运动规划、多关节机械臂运动控制和机器学习等内容。
针对服务机器人实训课程教学存在的设备成本高昂、学生操作机会不足、操作危险及创新能力培养困难等问题,本文提供了在机器人实训教学中基于ROS可以实现的仿真应用,以促进学生实践动手能力的提高,提升学生的职业竞争力[1]。
一 实训课程教学规划
服务机器人实训课程的课时为两周(共10天),设置有5个仿真实训项目,进度安排见表1。
(一) 服务机器人建模与运动仿真实训项目
通过这个仿真项目的训练,学生可以掌握URDF文件中的物理模型结构、传感器的代码描述,最后通过实例实现基于激光雷达传感器的闭环运动控制仿真[2]。建模与运动仿真实训项目内容如下。
1 URDF的物理模型描述
在ROS系统中,机器人的三维模型是通过URDF(Unified Robot Description Format)文件进行描述的,是一种基于XML规范扩展出来的文本格式。从机构学角度讲,机器人通常被分解为由连杆和关节组成的结构。而URDF就是用来描述这一系列关节与连杆的相对关系的工具。除此之外,还包括惯性属性、几何特点和碰撞模型等一系列附加参数。
2 URDF的传感器描述
在模型文件中,包含了全向移动底盘描述、RPLidar A2的激光雷达描述、Kinect v2的立体相机描述,在Gazebo仿真中,将会根据立体相机描述输出相应的数据。Kinect v2的描述内容根据输出数据格式分成了三个部分:SD深度图数据、HD高清彩色图像数据和QHD半高清彩色图像数据。
3 基于激光雷达传感器的闭环运动控制仿真
在一个标准的ROS程序里,获取机器人从仿真环境里采集到的数据,再反馈回去控制仿真环境里的虚拟机器人。整个程序的实现流程如图1所示。
程序启动后,如图2所示,机器人开始以0.05米/秒的速度向前移动;当机器人前方1米处出现障碍物时,机器人停止移动,以0.3弧度/秒的速度原地转动;当机器人转到前方1米范围内没有障碍物,停止转动,继续以0.05米/秒的速度向前移动。
(二) 建图与导航仿真实训项目
通过这个仿真项目的训练,学生首先在了解SLAM建图原理的基础上,掌握SLAM建图和Navigation导航的仿真;接着用开源地图导航插件完成在仿真环境中的导航任务[3-4];最后通过语音指令实现机器人的自主导航功能。建图与导航仿真实训项目内容如下。
1 进行SLAM建图和导航仿真
在本项目中,建立了一个模拟家庭环境的场景,如图3所示,场景中共有4个房间,分别为客厅、卧室、餐厅和厨房,在每个房间里都放置了一些床、柜子之类的家具;场景有2个出入口,服务机器人初始位置就位于场景的中心位置。
ROS支持多种SLAM算法,本项目主要使用的是Gmapping,是在激光雷达的基础上,融合了电机码盘里程计等信息。我们可以使用USB手柄或键盘控制机器人移动,在场景里巡游,Gmapping会把机器人行经的区域地图都扫描出来。在Rviz窗口中,可以看到建好的地图如图4所示。
建好地图后,为机器人指定导航的目标地点和目标朝向,ROS的导航系统会自动规划出一条紫色的路径。路径规划完毕后,机器人开始沿着这条路径移动,机器人到终点后,会原地旋转,调整航向角,最终朝向和初始设置的目标朝向一致,如图5所示。
2 基于插件的导航调用
如果是在多个导航目标点之间巡航,并且需要在导航任务的间隙插入一些识别抓取等操作,代码和工作量将成倍增加,为简单起见,可以下载一款名为waterplus_map_tools的开源地图导航插件,该插件基于Rviz的可视化操作,相比代码描述更加直观。用鼠标设置导航点,加上少量代码,就可以完成导航任务。如图6所示,在地图上设置了4个导航目标点,启动运行后,导航插件会自动规划全局路径,机器人沿着这条路径自主移动,依次到达各导航目标点。
3 语音识别和自主导航综合实例
在这个实例中,通过使用一款名为xfyun_waterplus的开源语音识别包,将自主导航功能与语音识别结合,机器人通过语音识别引擎识别语音指令(Go to the kitchen),然后按照语音指令,执行相应的任务(自主导航到“kitchen”这个航点)。
(三) 平面视觉检测仿真实训项目
通过这个仿真项目的训练,学生可以掌握在ROS系统中获取机器人的视觉图像,并将其转化为OpenCV格式,显示在窗口中;实现机器人视觉中的颜色特征提取和目标定位功能,并进一步根据目标位置计算速度并输出给机器人,完成一个目标跟随闭环控制;最后在仿真环境中通过使用级联分类器实现人脸识别功能[5]。平面视觉检测仿真实训项目内容如下。
1 使用OpenCV获取服务机器人的视觉图像
如图7所示,通过编程可以实现的功能有:①从服务机器人的头部相机获取实时的视觉图像;②将获取的视觉图像转换成OpenCV格式,并显示在窗口程序中。
2 使用OpenCV进行颜色特征提取和目标定位
如图8所示,通过编程可以实现的功能有:①对机器人视觉图像进行颜色空间转换,从RGB空间转换到HSV空间,排除光照影响;②对转换后的图像进行二值化处理,将目标物体分割提取出来;③对提取到的目标像素进行计算统计,得出目标物的质心坐标。
如图9所示,可以看到检测到的目标物的中心坐标值。
3 实现服务机器人的目标跟随
通过编程可以实现的功能有:①进行颜色特征提取和目标定位;②根据目标位置计算机器人运动速度,完成目标跟随功能。
启动程序后,如图10所示,可以看到Gazebo里的橘色球开始随机运动,服务机器人也开始跟随其运动。实例将识别检测和运动行为结合起来,形成一个典型的视觉闭环控制系统。
4 实现服务机器人的人脸检测
通过编程可以实现的功能有:①从机器人头部相机获取彩色图像;②使用OpenCV的级联分类器实现人脸检测。
启动程序后,如图11所示,可以看到,机器人已经检测到人脸,并用一个紫色方框将其锁定。还让机器人运动起来,通过不同视角去测人脸识别的鲁棒性。
(四) 三维视觉检测仿真实训项目
通过这个仿真项目的训练,学生首先通过使用立体相机获取其输出的三维点云数据;接着利用点云数据实现桌面高度的检测以及桌面上物品的坐标定位;最后结合机器人机械臂,完成对桌面上物品抓取的功能[6]。三维视觉检测仿真实训项目内容如下。
1 服务机器人的三维点云数据获取
服务机器人上的头部立体相机每接收到一帧深度图像,ROS就会将其转换成三维点云,在实际开发中,通常将其转换成基于机器人坐标系的PCL点云格式,把其存储到点云数组,这样就可以使用丰富的PCL函数来处理点云数据。
编好程序启动运行后,会弹出Gazebo的仿真界面,如图12所示,在该场景中,服务机器人面前摆放着一张桌子,桌子上放置两瓶饮料。
同时还会弹出一个Rviz界面,如图13所示,里面显示立体相机采集到的点云集合。
2 使用PCL点云库进行平面特征提取
在获取到三维点云数据的基础上,进一步实现对载物平台的高度测量。
首先使用一个直通滤波器对获取到的三维点云截取保留距离地面高度0.3米到1.5米之间的点集,这样只保留载物平台高度周围的点集。截取后的点云结果存放在容器对象cloud_src里。接着使用RANSAC方法的分类器操作函数segment()对点云cloud_src进行平面检测,检测出的平面三维点,存放在容器planeIndices里。最后对容器planeIndices里所指示的平面三维点的z值进行统计,进行一个均值处理,获得平均高度值,平均高度就是载物平面的大概高度。