MATLAB Simulink® - 智能分拣系统

news2025/1/20 5:51:43

系列文章目录


前言

本示例展示了如何在虚幻引擎® 环境中对四种不同形状的标准 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 网站下载这些文件。

dataFileLocation = exampleHelperDownloadData("UniversalRobots/IntelligentBinPickingDataSet", ...
"PVC_Fittings_Real_Dataset.zip");

二、模型概述

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

initRobotModelParam;
************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 配件的托盘的视频画面。

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 来生成时间最优轨迹的轨迹规划器。

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

sim('IntelligentBinPicking_Harness.slx');

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2255786.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【SpringMVC】应用分层

阿华代码,不是逆风,就是我疯 你们的点赞收藏是我前进最大的动力!! 希望本文内容能够帮助到你!! 目录 一:场景引入 二:前后端分离三层架构 1:表现层 2:业务…

【TCP 网络通信(发送端 + 接收端)实例 —— Python】

TCP 网络通信(发送端 接收端)实例 —— Python 1. 引言2. 创建 TCP 服务器(接收端)2.1 代码示例:TCP 服务器2.2 代码解释: 3. 创建 TCP 客户端(发送端)3.1 代码示例:TCP…

在阿里云/Linux环境搭建Gitblit服务

在阿里云/Linux环境搭建Gitblit服务 1. 整体描述2. 前期准备3. 安装步骤3.1 下载gitblit3.2 上传gitblit3.3 解压文件3.4 修改文件配置3.5 启动gitblit3.6 安全组配置 4. 总结 1. 整体描述 前段时间买了一个阿里云服务器,2核2G,3M固定带宽的配置&#x…

定时任务——xxl-job源码解析

摘要 本文深入解析了xxl-job的源码,xxl-job是一个分布式任务调度平台,其核心设计思想是将调度行为抽象成“调度中心”,而任务逻辑则由“执行器”处理,实现调度与任务的解耦。文章详细介绍了调度器和执行器的初始化流程、任务执行…

吉他初学者学习网站搭建系列(9)——如何用coze做一个网站助手

文章目录 背景功能搭建智能体新增工作流效果总结 背景 随着AI大模型的普及,国内也涌现出许多帮助用户更便捷使用大模型的平台。扣子就是其中之一。国内已经有蛮多用户了,我试用了这个平台,来给我的网站搭建一个小助手,效果非常好…

Anaconda 下安装OpenCV 4.10.0

大家也可以使用pip安装。 pip install opencv-python4.10.0 这里使用conda安装 conda install opencv4.10.0 import cv2 print(cv2.__version__)

帝可得-商品管理

商品管理 需求说明 商品管理主要涉及到三个功能模块,业务流程如下: 新增商品类型: 定义商品的不同分类,如饮料、零食、日用品等。新增商品: 添加新的商品信息,包括名称、规格、价格、类型等。设备货道管理: 将商品与售货机的货…

前端知识1html

VScode一些快捷键 Ctrl/——注释 !——生成html框架元素 *n——生成n个标签 直接书写html的名字回车生成对应的标签 常见标签 span&#xff1a; <span style"color: red;">hello</span> <span>demo</span> span实现&#xff1a; 标题…

【后端面试总结】tcp为什么要设置TIME_WAIT

设置TIME_WAIT的原因 相信大家对tcp的三次握手和四次挥手的过程已经非常熟悉了&#xff0c;但是对于四次挥手来说&#xff0c;有个问题一直困扰着我&#xff0c;那就是为什么在server端发送LAST_ACK之后&#xff0c;还要等待TIME_WAIT时间呢&#xff1f;原因有二&#xff1a; …

vue中使用socket.io统计在线用户

目录 一、引入相关模块 二、store/modules 中封装socketio 三、后端代码(nodejs) 一、引入相关模块 main.js 中参考以下代码 ,另外socketio的使用在查阅其它相关文章时有出入,还是尽量以官方文档为准 import VueSocketIO from vue-socket.io import SocketIO from socket.io-…

Redis的五种数据类型(Set、Zset)

目录 1. Set 集合1.1 Set介绍1.2 常见命令1.2.1 SADD命令1.2.2 SMEMBERS命令1.2.3 SISMEMBER命令1.2.4 SCARD命令1.2.5 SPOP命令1.2.6 SMOVE命令1.2.7 SREM命令 1.3 集合间操作1.3.1 SINTER命令1.3.2 SINTERSTORE命令1.3.3 SUNION命令1.3.4 SUNIONSTORE命令1.3.5 SDIFF命令1.3.…

【CSS in Depth 2 精译_067】11.2 颜色的定义(中):CSS 中的色域与色彩空间

当前内容所在位置&#xff08;可进入专栏查看其他译好的章节内容&#xff09; 第四部分 视觉增强技术 ✔️【第 11 章 颜色与对比】 ✔️ 11.1 通过对比进行交流 11.1.1 模式的建立11.1.2 还原设计稿 11.2 颜色的定义 11.2.1 色域与色彩空间 ✔️11.2.2 深入理解颜色表示法 文…

MVC基础——市场管理系统(一)

文章目录 项目地址一、创建项目结构1.1 创建程序以及Controller1.2 创建View1.3 创建Models层,并且在Edit页面显示1.4 创建Layou模板页面1.5 创建静态文件css中间件二、Categories的CRUD2.1 使用静态仓库存储数据2.2 将Categorie的列表显示在页面中(List)2.3 创建_ViewImport.…

[241206] X-CMD 发布 v0.4.15:env 升级,mirror 支持华为/腾讯 npm 镜像,pb-wayland 剪贴板

目录 X-CMD 发布 v0.4.15&#x1f4c3;Changelog&#x1f4e6; env|pkg&#x1fa9e; mirror&#x1f4d1; pb&#x1f3a8; theme|starship|ohmyposh&#x1f916; chat&#x1f4dd; man✅ 升级指南 X-CMD 发布 v0.4.15 &#x1f4c3;Changelog &#x1f4e6; env|pkg 新增…

# 深入浅出 快速认识JAVA常用数据结构【栈, 队列, 链表, 数组】

快速认识JAVA常用数据结构【栈, 队列, 链表】 前言 什么是数据结构 一种用来存储和组织数据的方法&#xff0c;描述了数据之间的关系和操作方式。通过合理选择和使用数据结构&#xff0c;可以大幅提高程序的运行效率、存储效率以及代码可维护性。 数据结构的重要性 数据结构…

fastadmin 后台插件制作方法

目录 一&#xff1a;开发流程 二&#xff1a;开发过程 &#xff08;一&#xff09;&#xff1a;后台功能开发 &#xff08;二&#xff09;&#xff1a;功能打包到插件目录 &#xff08;三&#xff09;&#xff1a;打包插件 &#xff08;四&#xff09;&#xff1a;安装插件…

使用Dapper创建一个简单的查询

1.先在NuGet上下载Dapper包 2.创建对应的model 代码如下&#xff1a; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks;namespace 数据显示 {public class User{public int UserId { get; set; }public…

雨晨 2610(2)0.2510 Windows 11 24H2 Iot 企业版 LTSC 2024 极简 2in1

文件: 雨晨 2610(2)0.2510 Windows 11 24H2 Iot 企业版 LTSC 2024 极简 2in1 install.esd 索引: 1 名称: Windows 11 IoT 企业版 LTSC 极简 26100.2510 描述: Windows 11 IoT 企业版 LTSC 极简 26100.2510 By YCDISM RTM 2025 24-12-07 大小: 8,176,452,990 个字节 索引: 2 …

Kubernetes 深入浅出系列 | 容器编排与作业调度之Deployment

目录 概述Deployment 的更新原理实验 概述 Kubernetes 中&#xff0c;Deployment 控制器是用于管理应用程序生命周期的核心对象。Deployment 通过管理 ReplicaSet 来间接控制 Pod&#xff0c;确保在任何时刻都能维持指定数量的 Pod 副本。这种间接管理使得 Deployment 功能比 …

网络练级宝典-> UDP传输层协议

目录 传输层 端口号 端口号和进程的关系 UDP协议 UDP协议格式 UDP数据封装&#xff1a; UDP数据分用&#xff1a; 面向数据报 UDP的缓冲区 UDP的缺点 基于UDP的应用层协议 传输层 端口号 我们知道端口号对应的其实就是一个进程的pid&#xff0c;在操作系统中二者的…