MATLAB & Simulink® - 智能分拣系统

系列文章目录


前言

本示例展示了如何在虚幻引擎® 环境中对四种不同形状的标准 PVC 管件实施半结构化智能分拣。本示例使用 Universal Robots UR5e cobot 执行垃圾箱拣选任务,从而成功检测并分类物体。cobot 的末端执行器是一个吸力抓手,它使 cobot 能够拾取 PVC 管件并将其分类装入工作区中四个不同位置的垃圾箱中。

该图显示了智能分拣系统对 PVC 管件进行分拣的模拟场景。

本示例利用 Simulink 模型引用,从较小的组件构建智能垃圾箱拣选系统。该示例提供了一个模板线束,可用于构建垃圾箱拣选系统。这些示例展示了如何构建 IntelligentBinPicking_Harness.slx 模型中的每个组件:

  • 在虚幻引擎® 中设计垃圾箱拣选场景和传感器
  • 设计摄像头感知组件以检测垃圾箱中的物品
  • 为机器人机械手设计轨迹规划器

这种方法可以让您利用该模板扩展到任何目标。虽然本示例仅部署到 Simulink 3D 目标机,但您也可以将此模板调整部署到硬件目标机。要了解有关在 MATLAB 和 Simulink 中对垃圾桶拣选和类似机械手应用建模的更多信息,请参阅《使用 MATLAB 和 Simulink 进行垃圾桶拣选》。


一、依赖工具箱

本示例依赖于以下工具箱:

  • Robotics System Toolbox™ - 用于机器人机械手建模、设计无碰撞规划器以及在虚幻引擎中模拟机器人。
  • Simulink 3D Animation™ - 用于构建垃圾箱拣选场景并与虚幻引擎共同模拟。
  • Compute Vision Toolbox™ - 用于读取摄像头输出并将感知添加到模型中。您必须安装 "Computer Vision Toolbox Model for Pose Mask R-CNN 6-DoF Object Pose Estimation "和 "Computer Vision Toolbox Model for Mask R-CNN Instance Segmentation "支持包才能运行感知组件。有关安装附加组件的更多信息,请参阅获取和管理附加组件。Pose Mask R-CNN 6-DoF Object Pose Estimation 的计算机视觉工具箱模型和 Mask R-CNN Instance Segmentation 的计算机视觉工具箱模型支持包需要 Deep Learning Toolbox™ 和 Image Processing Toolbox™。

1.1 其他资源

本示例还提供了一个预训练的 YOLOV4 物体检测器,用于识别 PVC 物体,这样您就可以运行本示例,而无需等待物体检测器的训练。如果您想训练物体检测器模型,可以安装 Computer Vision Toolbox Model for YOLO v4 Object Detection 支持包,但这并非必需。训练好的物体检测器和训练数据集文件大小约为 230MB。您可以从 MathWorks 网站下载这些文件。

Matlab 复制代码
dataFileLocation = exampleHelperDownloadData("UniversalRobots/IntelligentBinPickingDataSet", ...
"PVC_Fittings_Real_Dataset.zip");

二、模型概述

运行 initRobotModelParam 辅助函数来初始化和加载所有必要的参数。作为 PreLoadFcn 回调的一部分,模型在启动时也会执行该函数。

Matlab 复制代码
initRobotModelParam;
Matlab 复制代码
************PickAndPlaceV3::Initializing parameters***************
Loading Robot Model and Parameters...OK
Loading User Command Bus...OK
Loading Motion Planner Collision Object Bus...OK
Loading Object Detector Response Bus...OK
Loading Motion Planner Task Bus...OK
Loading Motion Planner Command Bus...OK
Loading Joint Trajectory Bus...OK
Loading Motion Planner Response Bus...OK
Loading Manipulator Feedback Bus...OK
Loading Robot Command Bus...OK
Loading Planner Tasks Maximum Errors...
OK
Loading Model Simulation Parameters...OK
Loading Object model point cloud...OK
**********PickAndPlace::Parameter Initialization finished**********

打开模型并检查其中的内容。视频查看器会显示模拟过程中装有 PVC 配件的托盘的视频画面。

Matlab 复制代码
open_system('IntelligentBinPicking_Harness.slx')

智能垃圾箱拣选系统模型由四个主要组件组成:

  1. 使用基于摄像头的感知组件检测物品--该组件接受垃圾箱中零件的摄像头图像,对零件进行分类,并识别其姿势。
  2. 使用规划组件识别抓取/释放姿势并生成无碰撞机器人轨迹 - 该组件使用已分类的部件及其已识别的姿势,计算出足够的抓取力,并规划从当前姿势到目标物体姿势的无碰撞轨迹。
  3. 利用任务调度组件定义监管逻辑 - 利用规划好的轨迹和当前机器人姿态,该组件可调度行动并向机器人发送指令,以高效清理垃圾箱。
  4. 部署到仿真或硬件目标组件 - 机器人在仿真或硬件中执行接收到的指令。该组件还将从作为目标一部分的摄像头中返回结果和图像数据。

2.1 组件概述

以下各节概述了每个组件的工作原理,并链接到演示如何构建组件的示例或提供更多信息的其他资源。

2.2 使用基于摄像头的感知组件检测物品

本示例中的两个模型都使用了基于深度学习的感知组件。不过,您也可以使用第三方相机系统来返回分类对象和姿势。有关如何构建摄像头感知组件的更多信息,请参阅设计摄像头感知组件以检测垃圾桶物品示例。

2.3 使用规划组件识别抓取/释放姿势并生成无碰撞机器人轨迹

轨迹规划组件是一个触发式子系统。这意味着每当任务调度程序需要无碰撞轨迹时,任务调度程序就会向该子系统发出请求,以生成无碰撞轨迹。如果当前的目标姿态是为了拾取物体,任务调度器也会将物体的姿态发送给规划器。然后,规划器必须首先根据物体的姿势确定有效的抓取方式。如果当前目标姿态是空间姿态,则无需确定抓取位置。

一旦知道了物体的理想姿势,规划器就会根据理想姿势确定目标关节配置,然后生成一条从当前关节配置到目标关节配置的无碰撞轨迹。本例中的轨迹规划算法是使用机械手 CHOMP 优化器设计的。该算法通过最小化由平滑度成本和碰撞成本组成的成本函数,优化轨迹的平滑度和避免碰撞。该算法与 TOPP-RA 求解器相结合,可生成时间最优轨迹。有关该方法和接口的更多信息,请参阅 "为机械手设计轨迹规划器 "示例。

2.4 使用任务调度器组件定义监督逻辑

任务调度器是模型中的主要协调机制。它评估系统状态并决定下一步行动。任务调度器包含在状态流® 图中。打开任务调度器状态流程图,查看事件的逻辑流程。

2.5 部署到模拟或硬件目标组件上

目标由机器人平台(包括垃圾箱及其支架)、机器人和必要的传感器(如摄像头)组成。目标接受一条总线,该总线指示机器人如何移动,并返回实际实现的轨迹。

该子系统包含特定于目标的接口层,如 ROS、RTDE 或类似协议。例如,当 ROS 处理与机器人的通信时,首先会解构机器人命令总线,并将其转换为与机器人兼容的 ros_control 命令。同样,该组件也会将机器人的反馈信息从 ROS 转换回更通用的总线。这种方法使 Simulink 模型与目标机使用的通信方法无关。虽然本示例仅使用 Simulink 3D 目标器进行通信,但您也可以调整模型与其他目标器进行通信。有关与其他目标进行通信的更多示例,请参阅 "使用 MATLAB 和 Simulink 进行料箱拣选"。

2.6 总线概述

为了确保可以互换使用不同的组件,可以在组件之间使用标准接口。本示例主要通过使用总线系统来实现这一目的。总线可视为 Simulink 与 MATLAB 结构的等价物。总线使您能够高效地读入和读出引用模型中的大量混合数据类型。本模型使用五种主要总线类型:

  • 对象检测器响应总线 - 从对象检测器向任务调度器发送命令。该总线用于向调度程序提供检测到的物体及其姿势的详细信息。如需了解更多信息,请参阅 "设计摄像机感知组件以检测 Bin 项目 "示例。
  • 运动规划器命令总线 - 从任务调度程序向规划器发送命令。规划器的主要任务在主总线内的任务总线中给出。更多信息,请参阅 "为机械手设计轨迹规划器 "示例。当仿真目标需要了解被选中进行验证的对象时,该总线也会传递给硬件/仿真目标使用。例如,仿真 3D 块可使用该总线验证目标部件是否已被拾取。
  • 运动规划器响应总线 - 从规划器向任务调度器发送状态和验证标志。用于验证规划器是否成功执行。更多信息,请参阅 "为机械手设计轨迹规划器 "示例。
  • 机器人命令总线 - 从任务调度程序向机器人目标发送命令,即从任务调度程序向硬件或模拟目标发送运动和抓取命令。
  • 机器人反馈总线 - 将状态和动作完成标志从目标返回调度程序。主要用于验证硬件或模拟目标的运动。

本示例系列中的每个示例都提供了所使用总线的详细概述。您也可以通过在命令行上执行初始值来查看任何总线类型的详细分类。

2.6 设计参数及其影响

本示例是为使用 Robotiq ePick 吸具和 PVC 部件的 UR5e cobot 配置的,该机器人位于指定高度、宽度和姿态的料仓中。这些参数选择是固定的,并硬编码到示例中,但您可以使用参考模型子系统修改和验证参数选择。本概述提供了这些假设的一些影响:

  • 规划器和仿真目标使用刚体树(rigidBodyTree)对象对机器人进行建模。关节数量决定了所有关节行为通信的大小。对于这个 6-DoF 机器人,这些大小表示为 6×M 矩阵或 6×M×K 阵列。
  • 抓手作为刚体树(rigidBodyTree)对象的一部分连接到机器人上,规划器和模拟目标组件也使用刚体树对象。抓手类型会影响抓取目标的姿势。对于吸力抓手,只需考虑 z 方向,因为 x 和 y 方向不会影响抓取成功率。
  • 模拟目标使用作为 STL 提供的 PVC 部件来模拟行为和训练姿势检测算法。规划器的运行与这些部件无关;您可以使用运动规划器命令总线将这些部件作为障碍物提供给规划器。更多详情,请参阅 "为机械手设计轨迹规划器 "示例。
  • 料仓配置作为放置在空间中的 STL 提供给仿真目标。规划器将此配置作为定义静态放置环境的参数接收。这些参数被设置为 binCenterPosition、binHeight、binLength、binOrientation、binRotation 和 binWidth 等参数。

如果您想更改这些参数,请从引用模型开始,先在组件级验证更改,然后再将其合并到主模型中。您可以使用现有的引用组件,也可以用自己的系统替换引用组件,然后使用线束进行验证。

三、在虚幻引擎中模拟智能垃圾桶拣选

打开 IntelligentBinPicking_Harness 模型并单击运行即可在虚幻引擎中模拟智能垃圾桶拣选。这可以通过这些参考模型来实现:

  • PosemaskRCNN_Detection_Module.slx - 感知组件是一个 Pose Mask R-CNN 网络,该网络已在 Simulink 3D Animation 中的标记图像上进行了训练。有关训练 Pose Mask R-CNN 网络的更多信息,请参阅使用深度学习(计算机视觉工具箱)执行 6-DoF Pose Estimation for Bin Picking 示例。
  • Simulink_3D_IBP_Target.slx - 仿真目标是使用 Simulink 3D 动画创建的半结构化分拣场景。
  • CHOMP_Trajectory_Planner_Module.slx - 使用基于优化的规划器 manipulatorCHOMP 和 TOPP-RA 求解器 contopptraj 来生成时间最优轨迹的轨迹规划器。

单击 "运行 "或执行此代码开始模拟。

Matlab 复制代码
sim('IntelligentBinPicking_Harness.slx');

图中显示的是 cobot 利用吸力抓手抓起一个 PVC 管件,以及装有 PVC 管件的托盘的视频画面。

相关推荐
抽风侠2 分钟前
qt实现窗口的动态切换
开发语言·qt
嘟嘟实验室5 分钟前
PDFMathTranslate,PDF多语言翻译,批量处理,学术论文,双语对照(WIN/MAC)
人工智能·macos·aigc·自动翻译
远洋录9 分钟前
大型前端应用状态管理实战:从 Redux 到 React Query 的演进之路
前端·人工智能·react
liuweni12 分钟前
Next.js系统性教学:深入理解缓存交互与API缓存管理
开发语言·前端·javascript·经验分享·缓存·前端框架·交互
coldstarry15 分钟前
sheng的学习笔记-AI-自然语言处理(NLP),机器翻译,情感分类,词嵌入
人工智能·深度学习·自然语言处理·机器翻译
高山莫衣25 分钟前
【返璞归真】-Lasso 回归(Least Absolute Shrinkage and Selection Operator,最小绝对值收缩和选择算子)
人工智能·数据挖掘·回归
AI人H哥会Java27 分钟前
【JAVA】Java高级:多数据源管理与Sharding:在Spring Boot应用中实现多数据源的管理
java·开发语言
Thomas_YXQ29 分钟前
Unity3D项目为什么要使用FairyGUI
开发语言·unity·游戏引擎·unity3d·游戏开发
Yeats_Liao30 分钟前
华为开源自研AI框架昇思MindSpore应用案例:基于MindSpore框架的SGD优化器案例实现
人工智能
uyeonashi41 分钟前
【C++】刷题强训(day14)--乒乓球匡、组队竞赛、删除相邻数字的最大分数
开发语言·c++·算法·哈希算法