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 网站下载这些文件。

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.rhkb.cn/news/486277.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

环形链表 (简单易懂)

给你一个链表的头节点 head ,判断链表中是否有环。 如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。 为了表示给定链表中的环,评测系统内部使用整数 pos 来表示链表尾连接到链表中的位置(…

【C++】奇偶数判断题的高级分析与优化

博客主页: [小ᶻ☡꙳ᵃⁱᵍᶜ꙳] 本文专栏: C 文章目录 💯前言💯1. 题目描述题目背景 💯2. 基本解决思路示例分析 💯3. 原始代码分析代码分析代码优点代码缺点 💯4. 教师代码及其优化分析代码分析代码优…

1.1 Beginner Level学习之“创建 ROS msg 和 srv”(第十节)

学习大纲: 1. msg 和 srv msg 文件是描述 ROS 消息字段的简单文本文件。它们用于为不同语言生成消息的源代码。srv 文件则描述了一个服务,包括两部分:请求和响应。Srv 文件用于生成服务的源代码。msg 文件存储在包的 msg 目录中。srv 文件存…

Linux-笔记---系统文件I/O

1. open函数和close函数 #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h>int open(const char *pathname, int flags); int open(const char *pathname, int flags, mode_t mode);#include <unistd.h> int close(int fd); open函数…

红日靶场vulnstark 4靶机的测试报告[细节](一)

目录 一、测试环境 1、系统环境 2、注意事项 3、使用工具/软件 二、测试目的 三、操作过程 1、信息搜集 2、漏洞利用Getshell ①Struts 2 s2-045漏洞 手工利用s2-45漏洞 Msf综合利用 ②Tomcat框架(CVE-2017-12615) ③phpMyAdmin(CVE-2018-12613) 构造语句写入冰蝎木…

利用 360 安全卫士极速版关闭电脑开机自启动软件教程

在使用电脑的过程中&#xff0c;过多的开机自启动软件会严重拖慢电脑的开机速度&#xff0c;影响我们的使用体验。本教程中简鹿办公将详细介绍如何使用 360 安全卫士极速版关闭电脑开机自启动软件&#xff0c;让您的电脑开机更加迅速流畅。 一、打开 360 安全卫士极速版 在电…

计算机毕业设计Spark股票推荐系统 股票预测系统 股票可视化 股票数据分析 量化交易系统 股票爬虫 股票K线图 大数据毕业设计 AI

温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 作者简介&#xff1a;Java领…

本文介绍麒麟信安服务器系统(kylinsec)的安装。

本文介绍麒麟信安服务器系统&#xff08;kylinsec&#xff09;的安装。 下载 在开源欧拉官方找到商业版本的介绍找到相关产品&#xff1a; https://www.openeuler.org/zh/download/commercial-release/ 麒麟信安kylinsec下载地址&#xff1a; https://mirrors.kylinsec.com…

并发专题(10)之FutureTask源码剖析

一、FutureTask介绍 Java创建线程的方式&#xff0c;一般常用的是Thread&#xff0c;Runnable&#xff0c;如果需要处理当前的任务有返回结果的话&#xff0c;需要使用Callable。Callable运行需要配合Future来使用。 Future是一个接口&#xff0c;一般会使用FutureTask实现类去…

ssh远程升级Ubuntu20.04到Ubuntu 22.04

ssh远程升级Ubuntu20.04到Ubuntu 22.04 陈拓 2024/10/16-2024/10/26 1. 简介 本文介绍了如何通过ssh将Ubuntu系统从20.04升级到22.04。 在进行系统升级之前&#xff0c;建议备份重要数据&#xff0c;以防升级过程中出现问题。 2. 更新当前系统 硬件系统架构 当前操作系统版…

新手SEO指南:如何从零开始优化网站实现流量增长

内容概要 在这一部分&#xff0c;我们将简要概述新手在进行SEO优化时需要掌握的一些关键内容。SEO&#xff08;搜索引擎优化&#xff09;是一个复杂而多层次的过程&#xff0c;对网站流量的提升至关重要。无论您是刚刚踏入这一领域的新手&#xff0c;还是希望进一步提升网站性…

FPGA实战篇(呼吸灯实验)

1.呼吸灯简介 呼吸灯采用 PWM 的方式&#xff0c;在固定的频率下&#xff0c;通过调整占空比的方式来控制 LED 灯亮度的变化。 PWM&#xff08;Pulse Width Modulation &#xff09;&#xff0c;即脉冲宽度调制&#xff0c;它利用微处理器输出的 PWM 信号&#xff0c;实现对…

使用 OpenCV 进行 Android 开发

在本节中&#xff0c;我们将创建一个简单的应用程序&#xff0c;它除了加载 OpenCV 之外什么都不做。在下一节中&#xff0c;我们将扩展它以支持相机。 除了这个说明&#xff0c;你还可以使用一些视频指南&#xff0c;例如这个 打开 Android Studio 并选择Empty Views Activi…

项目实例_FashionMNIST_CNN

前言 提醒&#xff1a; 文章内容为方便作者自己后日复习与查阅而进行的书写与发布&#xff0c;其中引用内容都会使用链接表明出处&#xff08;如有侵权问题&#xff0c;请及时联系&#xff09;。 其中内容多为一次书写&#xff0c;缺少检查与订正&#xff0c;如有问题或其他拓展…

Autosar FO时间分析和设计规范导读

一、规范功能概述 “Timing Analysis and Design AUTOSAR FO R24 - 11” 文档主要聚焦于汽车电子系统开发中的定时分析与设计&#xff0c;详细阐述了相关概念、方法、用例及涉及的各项要素&#xff0c;旨在为汽车电子系统的开发提供全面且系统的定时分析指导&#xff0c;以确保…

使用 libssh2_session_set_timeout 设置 SSH 会话超时时间

使用 libssh2_session_set_timeout 设置 SSH 会话超时时间 函数原型参数说明返回值示例代码注意事项libssh2_session_set_timeout 是 libssh2 库中的一个函数,用于设置 SSH 会话的超时时间。这对于防止网络延迟或连接中断导致的长时间挂起非常有用。 函数原型 int libssh2_se…

001 LVGL PC端模拟搭建

01 LVGL模拟器介绍 使用PC端软件模拟LVGL运行&#xff0c;而不需要任何嵌入式硬件 环境搭建&#xff1a;codeblocks-20.03mingw-setup 正常安装流程即可 工程获取&#xff1a;LVGL官网-> github仓库 本地安装包下载资源包 工程模版和软件安装包 补充&#xff1a;…

开源ISP介绍(2)————嵌入式Vitis搭建

Vivado搭建参考前一节Vivado基于IP核的视频处理框架搭建&#xff1a; 开源ISP介绍&#xff08;1&#xff09;——开源ISP的Vivado框架搭建-CSDN博客 导出Hardware 在vivado中导出Hardware文件&#xff0c;成功综合—实现—生成比特流后导出硬件.xsa文件。&#xff08;注意导…

人工智能-自动驾驶领域

目录 引言自动驾驶与人工智能的结合为什么自动驾驶领域适合发表文章博雅智信的自动驾驶辅导服务结语 引言 自动驾驶技术的崛起是当代交通行业的一场革命。通过结合先进的人工智能算法、传感器技术与计算机视觉&#xff0c;自动驾驶不仅推动了技术的进步&#xff0c;也使得未来…

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

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