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')
智能垃圾箱拣选系统模型由四个主要组件组成:
- 使用基于摄像头的感知组件检测物品--该组件接受垃圾箱中零件的摄像头图像,对零件进行分类,并识别其姿势。
- 使用规划组件识别抓取/释放姿势并生成无碰撞机器人轨迹 - 该组件使用已分类的部件及其已识别的姿势,计算出足够的抓取力,并规划从当前姿势到目标物体姿势的无碰撞轨迹。
- 利用任务调度组件定义监管逻辑 - 利用规划好的轨迹和当前机器人姿态,该组件可调度行动并向机器人发送指令,以高效清理垃圾箱。
- 部署到仿真或硬件目标组件 - 机器人在仿真或硬件中执行接收到的指令。该组件还将从作为目标一部分的摄像头中返回结果和图像数据。
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 管件的托盘的视频画面。
相关文章:

MATLAB Simulink® - 智能分拣系统
系列文章目录 前言 本示例展示了如何在虚幻引擎 环境中对四种不同形状的标准 PVC 管件实施半结构化智能分拣。本示例使用 Universal Robots UR5e cobot 执行垃圾箱拣选任务,从而成功检测并分类物体。cobot 的末端执行器是一个吸力抓手,它使 cobot 能够拾…...

linuxCNC(五)HAL驱动的指令介绍
HAL驱动的构成 指令举例详解 从终端进入到HAL命令行,执行halrun,即可进入halcmd命令行 # halrun指令描述oadrt加载comoonent,loadrt threads name1 period1创建新线程loadusr halmeter加载万用表UI界面loadusr halscope加载示波器UI界面sho…...

STM32 进阶 定时器3 通用定时器 案例2:测量PWM的频率/周期
需求分析 上一个案例我们输出了PWM波,这个案例我们使用输入捕获功能,来测试PWM波的频率/周期。 把测到的结果通过串口发送到电脑,检查测试的结果。 如何测量 1、输入捕获功能主要是:测量输入通道的上升沿和下降沿 2、让第一个…...

第一节、电路连接【51单片机-TB6600驱动器-步进电机教程】
摘要:本节介绍如何搭建一个51单片机TB6600驱动器步进电机控制电路,所用材料均为常见的模块,简单高效的方式搭建起硬件环境 一、硬件清单 ①51单片机最小控制系统 ②USB转TTL模块 ③开关电源 ④TB6600步进电机驱动器 ⑤二相四线步进电机 ⑥电…...
【通俗理解】Koopman算符与非线性动力系统分析
【通俗理解】Koopman算符与非线性动力系统分析 关键词: #Koopman算符 Koopman Operator #非线性动力系统 Nonlinear Dynamical System #无穷维线性算子 Infinite-Dimensional Linear Operator #演化分析 Evolution Analysis #Bernard Koopman Bernard Koopman 第…...
mybatis plus打印sql日志
1、官方文档 使用配置 | MyBatis-Plus 2、日志实现 MyBatis-Plus 提供了多种日志实现(log-impl),用于记录 SQL 语句和相关操作,帮助开发者进行调试和监控数据库操作。以下是一些可用的日志实现及其说明: StdOutImpl…...
ObjectMapper
ObjectMapper 是 Jackson 库中非常重要的一个类,它是 JSON 和 Java 对象之间进行序列化与反序列化的核心工具。ObjectMapper 的底层实现是基于 Jackson 的数据绑定模型,它将 Java 对象与 JSON 数据转换为互通格式。 1. ObjectMapper 的设计与核心功能 O…...
新增白名单赋予应用安装权限
目录 相关问题 具体实现 相关问题 安装app到/data/分区时,如何在安装阶段就赋予权限,无需请求权限 具体实现 frameworks/base/core/res/res/values/config.xml <!-- For whitelis apk --><string-array translatable"false" nam…...
传奇996_51——脱下装备,附加属性设为0
奶奶的lua怎么都修改不了,可以调用txt的 ; LINKPICKUPITEM ; ChangeitemaddvaLue -1 5 0 ; GETITEMADDVALUE 3 5 M10 ; SENDUPGRADEITEM ; SENDMSG 9 你的衣服附加了<$STR(M10)>点防御属性. 或者lua callscriptex(actor,“LINKPICKUPITEM”) callscriptex(…...

【Mac】安装Gradle
1、说明 Gradle 运行依赖 JVM,需要先安装JDK,Gradle 与 JDK的版本对应参见:Java Compatibility IDEA的版本也是有要求Gradle版本的,二者版本对应关系参见:Third-Party Software and Licenses 本次 Gradle 安装版本为…...
MySQL中的redoLog
在数据库系统中,redo log(重做日志)用于记录所有已提交事务的修改操作,它的主要目的是确保在系统崩溃或故障后,能够恢复数据库到崩溃前的状态。Redo log 记录的是事务修改的数据的具体操作,而不是数据本身。…...

Windows 安装 MySQL
1.下载 MySQL 安装包 访问:MySQL :: Download MySQL Installer选择适合的版本。推荐下载 MySQL Installer for Windows,该安装包包含所有必要的组件选择 Windows (x86, 32-bit), MSI Installer 或 Windows (x86, 64-bit), MSI Installer 2.运行安装程序…...
yocto的xxx.bb文件在什么时候会拷贝文件到build目录
在 Yocto 中,.bb 文件用于描述如何构建和安装一个软件包,而文件在构建过程中的拷贝操作通常会在某些特定的步骤中进行。具体来说,文件会在以下几个阶段被拷贝到 build 目录(或者更准确地说,拷贝到目标目录 ${D}&#x…...

Ubuntu Server 22.04.5 LTS重启后IP被重置问题
Ubuntu Server 22.04.5 LTS重启后IP被重置问题 最近在使用Ubuntu Server 22.04做项目开发测试时发现每次重启和关机后,所设置的静态IP地址都会回复到安装系统时所设置的ip Ubuntu Server 22.04 官网下载地址:Ubuntu官方下载地址 对虚拟机下安装Ubuntu感…...

Java基础复习
“任何时候我也不会满足,越是多读书,就越是深刻地感到不满足,越感到自己知识贫乏。科学是奥妙无穷的。” ——马克思 目录 一、方法&方法重载 二、运算符 三、数据类型 四、面向对象 1. 面向对象思想 2. 引用传递 3. 访问权限修饰…...

简易图书管理系统
javawebjspservlet 实体类 package com.ghx.entity;/*** author :guo* date :Created in 2024/12/6 10:13* description:* modified By:* version:*/ public class Book {private int id;private String name;private double pri…...

结构型-组合模式(Composite Pattern)
什么是组合模式 又名部分整体模式,是用于把一组相似的对象当作一个单一的对象。组合模式依据树形结构来组合对象,用来表示部分以及整体层次。这种类型的设计模式属于结构型模式,它创建了对象组的树形结构。 结构 抽象根节点(Co…...
【知识堂】大数据
一、大数据的基本概念 什么是大数据? 大数据(Big Data)是指无法通过传统工具和方法在合理时间内处理的海量数据集合。其关键特征是4V,即数据量大(Volume)、数据种类多(Variety)、处…...
力扣C语言刷题记录(三)搜索插入位置
给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。 请必须使用时间复杂度为 O(log n) 的算法。 示例 1: 输入: nums [1,3,5,6], target 5 输出: 2示例 2: 输入:…...

在Node.js局域网调试https的Vue项目
需求: 最近在测试在网页端(HTML5)调用移动设备的定位等权限功能,发现某些功能是必须保证域名在https下的否则会出现不正常现象。 解决: 1.在线生成和证书 访问:CSR文件生成工具-中国数字证书CHINASSL …...

iOS 26 携众系统重磅更新,但“苹果智能”仍与国行无缘
美国西海岸的夏天,再次被苹果点燃。一年一度的全球开发者大会 WWDC25 如期而至,这不仅是开发者的盛宴,更是全球数亿苹果用户翘首以盼的科技春晚。今年,苹果依旧为我们带来了全家桶式的系统更新,包括 iOS 26、iPadOS 26…...
【Java学习笔记】Arrays类
Arrays 类 1. 导入包:import java.util.Arrays 2. 常用方法一览表 方法描述Arrays.toString()返回数组的字符串形式Arrays.sort()排序(自然排序和定制排序)Arrays.binarySearch()通过二分搜索法进行查找(前提:数组是…...

LeetCode - 394. 字符串解码
题目 394. 字符串解码 - 力扣(LeetCode) 思路 使用两个栈:一个存储重复次数,一个存储字符串 遍历输入字符串: 数字处理:遇到数字时,累积计算重复次数左括号处理:保存当前状态&a…...

【机器视觉】单目测距——运动结构恢复
ps:图是随便找的,为了凑个封面 前言 在前面对光流法进行进一步改进,希望将2D光流推广至3D场景流时,发现2D转3D过程中存在尺度歧义问题,需要补全摄像头拍摄图像中缺失的深度信息,否则解空间不收敛…...

《基于Apache Flink的流处理》笔记
思维导图 1-3 章 4-7章 8-11 章 参考资料 源码: https://github.com/streaming-with-flink 博客 https://flink.apache.org/bloghttps://www.ververica.com/blog 聚会及会议 https://flink-forward.orghttps://www.meetup.com/topics/apache-flink https://n…...
服务器--宝塔命令
一、宝塔面板安装命令 ⚠️ 必须使用 root 用户 或 sudo 权限执行! sudo su - 1. CentOS 系统: yum install -y wget && wget -O install.sh http://download.bt.cn/install/install_6.0.sh && sh install.sh2. Ubuntu / Debian 系统…...
Xen Server服务器释放磁盘空间
disk.sh #!/bin/bashcd /run/sr-mount/e54f0646-ae11-0457-b64f-eba4673b824c # 全部虚拟机物理磁盘文件存储 a$(ls -l | awk {print $NF} | cut -d. -f1) # 使用中的虚拟机物理磁盘文件 b$(xe vm-disk-list --multiple | grep uuid | awk {print $NF})printf "%s\n"…...

SiFli 52把Imagie图片,Font字体资源放在指定位置,编译成指定img.bin和font.bin的问题
分区配置 (ptab.json) img 属性介绍: img 属性指定分区存放的 image 名称,指定的 image 名称必须是当前工程生成的 binary 。 如果 binary 有多个文件,则以 proj_name:binary_name 格式指定文件名, proj_name 为工程 名&…...

Ubuntu系统复制(U盘-电脑硬盘)
所需环境 电脑自带硬盘:1块 (1T) U盘1:Ubuntu系统引导盘(用于“U盘2”复制到“电脑自带硬盘”) U盘2:Ubuntu系统盘(1T,用于被复制) !!!建议“电脑…...
【安全篇】金刚不坏之身:整合 Spring Security + JWT 实现无状态认证与授权
摘要 本文是《Spring Boot 实战派》系列的第四篇。我们将直面所有 Web 应用都无法回避的核心问题:安全。文章将详细阐述认证(Authentication) 与授权(Authorization的核心概念,对比传统 Session-Cookie 与现代 JWT(JS…...