基于ROS和机器视觉的移动回收机器人设计*

2022-03-25 01:03:52曾梓锐梁永盛黄永鹏刘东湖李欣
广东石油化工学院学报 2022年1期
关键词:移动机器人物体垃圾

曾梓锐,梁永盛,黄永鹏,刘东湖,李欣

(广东石油化工学院 计算机学院,广东 茂名 525000)

目前,大部分垃圾清理机器人用于清理灰尘、碎屑等细小物体,不能处理稍大的物体,应用场景也单一,只能在平坦的地板上使用。此类机器人市场上多采用“即时定位与地图构建(简称SLAM)”技术使用LDS激光雷达扫描室内环境并绘制地图,使用算法导航移动,实现清扫[1]。除此之外,大型的垃圾分拣机器人应用于垃圾回收站,其使用传送带对传入的垃圾进行自动分拣并处理,分拣准确率高,但机器占地大,位置固定,不利于移动。现有研究多用机器视觉识别垃圾物体类别,构建机械手运动模型拾取物体[2]。硬件设计多采用固定的设备,使用STM32控制板和电机驱动模块[3,4],若要更换硬件设备则需要重写控制代码。

本设计结合现有的垃圾清理机器人和垃圾分拣机器人技术,在机器人移动平台上安装机械臂。使用ROS技术实现灵活更换部件,而不需要重写控制代码,实现机器人在复杂环境中回收中小型垃圾,用于大型活动现场、海滩、商场等不同场景。有效地减少了清洁人员的劳动量,提高工作效率,减少污染,节能环保。

1 移动机器人系统架构

机器人系统主要由远程服务器和移动机器人组成,系统架构如图1所示。机器人包括硬件部分和软件部分,其技术核心是ROS技术、图像识别技术,主要使用Python语言编程,不涉及底层驱动代码。服务层为远程服务器,使用Python编写服务端实现图像识别,同时在多机工作中做任务划分,协调机器人之间的任务。应用层搭载在机器人上的Ubuntu系统,基于ROS开发软件层。硬件部分包括机器人的电源、上位机、机械臂、摄像头等设备。

图1 机器人系统架构

2 系统硬件设计

系统硬件部分分为服务器和移动机器人。(1)服务器主要用于运行图像识别服务,需要有较好的性能,并且连接外网。本文选用阿里云服务器,服务器配置如下:轻量应用服务器,双核CPU,4 GB内存,40 G系统盘,Ubuntu18.04系统。此外,训练垃圾分类模型需要性能较强的GPU,本文使用图形服务器进行训练,配置如下:PowerEdge T630,英特尔至强E5 2600 v4处理器CPU型号,16 G DDR4内存,4 TB机械硬盘,2张GTX1080Ti GPU,显存22 G。(2)移动机器人分为上位机和下位机。上位机可选用树莓派4B或支持嵌入式的Linux机器。本文选用移动机器人RIA E100,硬件参数为:Intel i5处理器,4GB内存,120 G SSD,系统使用Ubuntu16,装有ROS Kinetic;车轮与机械臂各有自身的控制器作为下位机,使用USB与上位机连接,通过TCP/IP通信;移动机器人可根据不同使用场景更换轮式或者履带式车轮。车身前部搭载一个RGB摄像头,Pixhawk IMU和2D雷达,电池使用24 V直流锂电池,容量7.5 Ah。RIA E100机器人实物见图2,硬件系统框架见图3。

图2 RIA E100机器人实物 图3 RIA E100系统硬件框架

机器人搭载5自由度的机械臂,实现抓取地面上的物体,实际使用场景中可以更换机械夹或机械爪。本文在仿真环境下建模,机械臂的仿真外观见图4,其URDF结构描述如图5所示。图5中joint为可旋转、移动的关节,link表示连接。图5中link1为图4底座上的第一个机械臂(黑色),joint2是连接link1和link2的关节,以此类推,最后的gripper是末端的两个机械爪。

图4 机械臂外观设计 图5 机械臂结构

3 系统软件设计

ROS主要为机器人开发提供硬件抽象、底层驱动、消息传递、程序管理、应用原型等功能和机制。同时,整合了许多第三方工具和库文件,帮助用户快速完成机器人应用的建立、编写和多机整合[5]。基于ROS开发解决了难以编写底层驱动的问题,为更换硬件提供了方便,不需要重新编写驱动程序。软件层基于ROS的节点框架模式设计,由摄像头节点、Python节点、舵机运动节点、SLAM导航运动节点组成,各节点之间独立运行,使用基于TCP/IP的通信方式,实现模块点对点的松耦合连接,其工作流程见图6。

图6 系统工作流程

机器人使用统一机器人描述格式(URDF)表示,包含了机器人模型的运动学与动力学描述、机器人的几何表示、机器人的碰撞模型。ROS通过读取URDF文件获取机器人的参数,使用ros_controllers功能包控制机器人;通过Move It!功能包的Moveit! Setup Assistant工具配置机械臂的自碰撞矩阵、虚拟关节列表、规划组定义、机械臂位姿、末端执行器及被动关节列表生成SRDF文件,即可通过Move It!功能包的API接口编程控制机械臂,同时可以选用不同的运动规划器来实现机器人的运动规划,如RRT[6]。通过URDF、SRDF抽象的描述机器人和ROS功能包提供的架构,即可使用同一套控制程序控制不同规格的机器人。

4 关键算法

4.1 OpenCV轮廓识别算法

识别模块数据通过订阅摄像头的数据来获取。并将获得的图像数据进行预处理,预处理的方法主要有滤波降噪和图像分割。图像预处理完后通过用 Canny 算子检测边缘,以不断逼近边缘的方式提取轮廓并画出来[7]。判断是否为物体,若是物体则将物体图像上传到服务器,并识别是否为标识的垃圾物体,若是则控制机器人靠近,执行抓取;不是则绕开继续移动。

4.2 物体分类训练、识别算法

使用Python的PyTorch框架进行模型的搭建与训练,使用ResNeXt模型做迁移学习,对采集到的垃圾图像集进行训练,得到结果模型,使用Flask框架做服务端识别图像并返回识别结果。

(1)训练过程。利用爬虫从网络收集常见的垃圾图像,以及自行拍摄的图像组成数据集。图像数据按照垃圾分类标准分为:厨余垃圾、可回收垃圾、有害垃圾、其他垃圾。使用Python加载数据并进行预处理,定义torch模型训练和验证方法,使用resnext101_32x16d模型,固定特征提取层,不需要更新梯度,冻结某些层的梯度,调整分类个数,做迁移学习,在图形服务器上进行训练和评估,得到结果模型。具体工作流程见图7。

(2)识别过程。在轻量应用服务器上使用Python的Flask框架做网络服务器,接收传入的图像并保存,使用torch加载训练好的模型,先对图像进行特征提取再使用模型识别,返回4类垃圾各自的概率。具体工作流程见图8。

4.3 ROS机械臂抓取物体

使用ROS的Move It!功能包实现机械臂的控制,通过Move It!功能包配置后,得到机械臂的一些固定属性,如碰撞参数、控制组和末端夹爪等。只要机械臂结构没有改变,就可以利用这些属性和Move It!功能包的工具对机械臂进行控制。通过ROS提供的pick和place接口可以在设定机器人抓取位姿和放置位姿的情况下利用机械臂的反向运动学和避障规划求解出机械臂抓取和放置过程中的位姿变换路径[8]。

4.4 ROS建图与路径规划

使用机器人中较为常用且成熟的gmapping算法包和hector-slam算法包建图算法包进行ROS建图。本机器人应用于地面上的垃圾物体,使用成熟的gmapping算法包是更好的选择。实现导航功能时,ROS需要使用全局路径规划和本地路径规划与实时避障两种代价地图。这两者有一些通用的配置如周围环境的障碍信息、需要声明的地图关注点等信息以便于地图信息的更新;全局路径规划代价地图用于存储全局的代价地图的参数,如参考系的选择、机器人坐标系的选择、地图更新频率等。本地路径规划与实时避障代价地图用来存储本地的代价地图的参数,主要用于调整发布的图像话题的内容,方便定位机器人位置等。代价地图记录了基本的障碍信息、目标位置信息、机器人位置信息以及设定了统一的坐标参考系。

建图的正确性和代价地图的建立为机器人的路径规划提供了完整的保障。静止的路面情况,无须任何优化即可完成抓取地面上垃圾的功能。路面上有运动物体,需要动态更新地图的障碍信息,硬件层面上计算能力不足带来的延迟问题可以通过添置性能更加优越的硬件来解决。对于位姿调整,避障规划考虑到机器人本身体积和位置的影响,从而防止机械臂因贴合障碍物边缘而导致无法通过的问题。

5 实验结果与分析

5.1 rviz三维可视化平台及Gazebo仿真环境

ROS针对机器人系统的可视化需求,为用户提供了一款显示多种数据的三维可视化平台——rviz,该平台能很好地兼容各种基于ROS软件架构的机器人平台。在rviz中,可以使用XML对机器人、周围物体等任何实物进行尺寸、质量、位置、材质、关节等属性的描述,并在界面中呈现。rviz还可以通过图形化方法,实现显示机器人传感器的信息、机器人的运动状态、周围环境的变化等。开发者可以通过rviz监测、控制机器人。

Gazebo是一个功能强大的三维物理仿真平台,具有强大的物理引擎、高质量的图形渲染、方便的编程与图形接口。在模型中加入机器人和周围环境的物理属性,即可模拟真实世界的场景进行仿真实验。图9是Gazebo的一个仿真场景。

图9 Gazebo仿真场景

5.2 SLAM构建地图

本节使用RIA E100移动机器人测试SLAM构建地图功能。机器人在室内环境下使用2D雷达和gmapping功能包扫描地图,移动机器人经过不停地扫描,得到如图10所示的完整地图。使用2D雷达构建地图精度和检测范围效果较好,能有效地复原真实环境。在建图过程中,如果机器人位置发生偏移,gmapping根据传感器信息自动矫正机器人的位置。

图10 rviz中机器人完成地图扫描 图11 Gazebo虚拟仿真环境SLAM

在Gazebo虚拟仿真环境中,也可以进行SLAM建图。图11是RIA E100移动机器人的仿真模型在虚拟环境中构建地图,使用的扫描程序与上述真实环境相同,扫描效果相同。

实验证明,配置好机器人的URDF参数后,即可在仿真环境和现实环境中使用同一套程序。在仿真环境中开发可以解决缺少硬件设备的问题,同时可以为不同的机器人做适配,达到通用的效果。

5.3 机械臂运动规划及抓取实验

机械臂运动规划主要使用笛卡尔运动规划接口的运动规划,实现机械臂避障移动。在rviz仿真环境中进行机械臂实验,如图12所示。机械臂初始位于两个物体中间(图12a),设置机械臂移动到画面左侧(图12c)。在移动路径上有一障碍物体,程序调用笛卡尔运动规划接口,根据环境自动生成避障路径,从障碍物体上方移动(图12b),完成机械臂移动。

图12 机械臂运动过程 图13 机械臂抓取物体过程

在运动规划的基础上,进行机械爪抓取物体移动实验,如图13所示。抓取前控制机械臂到达目标位姿(图13a),抓取物体(图13b),并向目的位置移动。

5.4 ResNeXt检测结果示例与分析

网络爬取得到的训练图像数据共14802张。将实验图像数据分4个大类:可回收物、厨余垃圾、有害垃圾、其他垃圾。 将实验图像数据按照不同类型分类,并将实验图像数据按照8∶2划分为训练数据和验证数据两部分,对模型进行迁移学习从而得到新模型。将验证图像数据在未经迁移学习的模型和训练后的新模型上进行测试,其结果见表1。

表1 模型测试结果

由表1可以看出,未经迁移学习的模型准确率为16.92%,不能区分具体的垃圾种类;经过迁移学习得到的模型,在测试数据中平均准确率有94.87%,识别准确率有较大的提升。其中其他垃圾和有害垃圾的识别率较低,可能是因为样本数量较少或图像特征不明显,可以收集更多更有特征的图像进行训练来改进模型。

6 结语

本文基于ROS平台设计并实现了一种带有机械臂的移动抓取机器人,用于代替人工回收垃圾。设计基于ROS的软硬件架构,选用移动机器人RIA E100,依靠激光雷达感知周围信息,采用hector_slam功能包构建地图,使用普通RGB摄像头识别物体;基于Move It!功能包完成机械臂对设置坐标位置的逆运动学求解;基于迁移学习方法训练模型,搭建识别框架。最终实现通过机械臂和小车的运动完成对物体的抓取、地图构建和导航等功能。本文为机器人硬件与软件的设计提供了一个切实可行的设计方案,在机器人的机器视觉领域具有一定参考价值。

猜你喜欢
移动机器人物体垃圾
移动机器人自主动态避障方法
垃圾去哪了
深刻理解物体的平衡
那一双“分拣垃圾”的手
当代陕西(2019年24期)2020-01-18 09:14:46
我们是怎样看到物体的
倒垃圾
基于Twincat的移动机器人制孔系统
倒垃圾
为什么同一物体在世界各地重量不一样?
极坐标系下移动机器人的点镇定