MATLAB - 使用 YOLO 和基于 PCA 的目标检测,对 UR5e 的半结构化智能垃圾箱拣选进行 Gazebo 仿真

news2025/1/21 5:48:22

系列文章目录


前言

本示例展示了在 Gazebo 中使用 Universal Robots UR5e cobot 模拟智能垃圾桶拣选的详细工作流程。本示例提供的 MATLAB 项目包括初始化、数据生成、感知、运动规划和积分器模块(项目文件夹),可创建完整的垃圾桶拣选工作流程。


一、打开项目


要开始使用,请单击文档中的 "打开实时脚本 "或使用 openExample 函数打开示例实时脚本并访问支持文件。

openExample('urseries/GazeboSimulationSemiStructuredIntelligentBinPickingUR5eExample');

 然后,打开 Simulink™ 项目文件。

prj = openProject('BinPickingUR5eSimulation/BinPickingGazeboSimExampleProject.prj');

二、拣选工作流程


该图显示了模拟 cobot 仓储拣选应用的一个完整执行周期所涉及的操作。

 在这个例子中,我们的目标是半结构化分仓,这是一种基于仓复杂性的分类。

从高层次来看,这项任务可分为两个主要模块:

  1. 视觉处理/感知模块
  2. 运动/轨迹规划模块

2.1 视觉处理或感知模块

这一工作流程可进一步分为两个方面:

  • 使用 RGB 数据进行物体检测,即使用深度学习基于 RGB 和深度(RGBD)数据进行物体分割
  • 使用三维点云数据进行物体姿态估算,可用于估算已识别物体的姿态,以便进行运动规划

下图显示了使用 YOLOv4 和基于 PCA 的算法进行物体姿态估计的步骤。

感知过程包括两个主要步骤、

  1. 训练和验证: 训练基于 RGB 的物体检测网络 (YOLOv4),并根据测试数据集进行验证。
  2. 在线物体检测: 使用预训练的 YOLOv4 网络和主成分分析 (PCA) 对实时原始 RGBD 数据进行姿态估计。

 

2.2 运动规划模块


该工作流程可分为两个部分:

  1. 智能运动规划,从检测到的部件中挑选运动规划逻辑
  2. 目标执行,使用 UR5e cobot 执行取放操作的轨迹规划

规划器入口点函数是根据使用 manipulatorRRT 算法示例对 UR5e 进行运动规划和刚体树仿真(用于垃圾拣选)中使用的算法设计的。该算法使用 manipulatorRRT 规划方法,并在碰撞环境中拾取和放置轨迹。

使用 C/C++ 代码生成器生成 MEX 函数可帮助您减少计算时间,从而缩短取放周期时间。

有关为基于操纵器RRT 算法的规划器创建 MEX 函数的更多信息,请参阅在感知环境中生成操纵器运动规划代码示例。

此外,请参阅此示例,进一步了解如何生成 MEX 函数以加速 MATLAB 程序的执行。

三、所需软件


本例需要

  1. MATLAB

  2. Robotics System Toolbox

  3. Computer Vision Toolbox

  4. Deep Learning Toolbox

  5. Image Processing Toolbox

  6. ROS Toolbox

  7. Optimization Toolbox

  8. Statistics and Machine Learning Toolbox

  9. MATLAB Coder (Required if you want to use MEX function for motion planner)

  10. Robotics System Toolbox Support Package for Universal Robots UR Series Manipulators

  11. Computer Vision Toolbox Model for YOLO v4 Object Detection support package (Required if you want to train a detector model)

本示例需要下载虚拟机以使用预配置的 Gazebo 环境。有关详细信息,请参阅以下部分。

 

四、下载预装 Gazebo 环境的 ROS 虚拟机


您可以下载已安装 ROS 和 Gazebo 的虚拟机镜像。该虚拟机基于 Ubuntu® Linux®,已进行预配置以支持 ROS Toolbox™ 中的示例。

  • 从本页 "下载虚拟机 "部分提供的链接下载并安装 ROS 虚拟机。
  • 启动虚拟机。

4.1 本模拟示例中使用的插件和 ROS 驱动程序

  1. 模拟 Universal 机器人 UR5e
  2. 模拟 Robotiq Epick 抽吸式机械手
  3. 模拟英特尔® RealSense™ 深度摄像头 D415

4.2 Universal 机器人 UR5e 使用的接口


Universal Robots UR 系列机械手机器人系统工具箱支持包的功能用于对模拟 Universal Robots UR5e 进行轨迹和关节控制。该支持包提供 universalrobot 类,可通过 ROS 接口进行控制。有关其他功能的更多信息,请参阅此文档页面。

4.3 用于 Robotiq Epick 吸爪的接口


为了模拟虚拟吸力机械手,我们使用了 ROS gazebo_plugin 的定制修改真空机械手插件。该插件的修改方式是在末端执行器本体和目标物体之间创建一个虚拟关节,并设定一定的偏移距离,以便吸附物体。在此过程中,它还会消除物体的碰撞,从而避免与垃圾箱或其他部件发生碰撞。

在激活和停用插件时,会使用 activateVacuum 和 deactivateVaccum 函数来调用相应的 ROS 服务。

4.4 用于英特尔® RealSense™ D415 的接口


为实现感知目的,本应用程序开发使用了英特尔® RealSense™ D415 摄像头深度模块。MATLAB 通过 ROS 使用 IntelRealSense ROS 驱动程序建立连接。除了这些 ROS 驱动程序,D415 传感器的 Gazebo 传感器还使用了 realsense_gazebo_plugin 插件。

用于训练 YOLOv4 深度学习网络的数据集就是使用该传感器创建的。

注:所有插件和修改都包含在下载的虚拟机中,并附有所需的许可证文件。

 4.5 本示例中使用的模拟物理设置


为演示使用 Universal Robots UR5e 的智能垃圾桶拣选工作流程,本示例使用了一个长方体物体和一个矩形垃圾桶。

长方体和垃圾箱的尺寸在 initializeParametersForBinPickingSimulation.m 脚本中提供。

4.6 刚体树和实际环境设置


在本示例中,我们将为运动规划创建一个刚体树(RigidBodyTree)环境。

 

 本流程图将引导您了解感知、运动规划和积分器模块的可用脚本。

五、参数初始化


初始化脚本 initializeParametersForBinPickingSimulation.m 会在打开此 MATLAB 项目时自动运行。该脚本定义了感知、运动规划和积分器项目模块中使用的一些重要参数。您可以在 Initialize 文件夹中找到该脚本,也可以运行下面的命令打开该脚本。如果使用不同的设置,请相应更改参数。

open("initializeParametersForBinPickingSimulation.m");


六、打开合成数据生成模块脚本


运行此命令打开脚本,以便使用 Gazebo 仿真环境生成合成数据。

open("DatasetGenerationUsingGazeboExample.mlx");


七、打开感知模块脚本


运行此命令可打开感知工作流程脚本。该脚本涵盖从训练到物体姿态估计工作流的整个感知流程。

open("DetectionAndPoseEstimationforCuboidSim.mlx");


八、打开运动规划模块脚本


运行此命令可打开运动规划工作流程的脚本。该脚本包括运动规划模块的 RigidBodyTree 仿真工作流程和 MEX 函数生成步骤。

open("BinPickingMotionPlanningMEXGenerationSim.mlx");


九、打开积分器脚本


运行此命令可打开积分器工作流程的主脚本。该脚本展示了如何使用感知和运动规划模块,利用仿真 Universal Robots UR5e 创建完整的垃圾拣选应用工作流程。

open("UR5eSimulationBinPickingApplicationIntegratedScript.mlx");

 

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

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

相关文章

5. 结构型模式 - 外观模式

亦称: Facade 意图 外观模式是一种结构型设计模式, 能为程序库、 框架或其他复杂类提供一个简单的接口 问题 假设你必须在代码中使用某个复杂的库或框架中的众多对象。 正常情况下, 你需要负责所有对象的初始化工作、 管理其依赖关系并按正确…

C++_运算符重载

目录 1、运算符重载的定义 2、实现‘<、的运算符重载 2.1 实现其余的比较运算符 3、实现‘’&#xff0c;‘-’&#xff0c;‘’&#xff0c;‘-’等运算符重载 4、前置、后置‘’‘--’ 5、流提取、流插入重载 6、赋值重载‘’ 结语&#xff1a; 前言&#xff1a; C中运…

SwiftUI 趣谈之:绝不可能(Never)的 View!

概览 SwiftUI 的出现极大的解放了秃头码农们的生产力。SwiftUI 中众多原生和自定义视图对于我们创建精彩撩人的 App 功不可没&#xff01; 不过&#xff0c;倘若小伙伴们略微留意过 SwiftUI 框架头文件里的源代码&#xff0c;就会发现里面嵌有一些奇怪 Never 类型&#xff0c…

antdesignpro实现滚动加载分页数据

原理解析&#xff1a;每滚动一次相当于翻页&#xff0c;请求后端时给的页码参数要想办法加1&#xff0c;后端才能根据页码给出相应数据 注意后端收到页码参数之后要准确计算出每页的首行数据&#xff0c;关键逻辑代码&#xff1a; # 根据前端传的页码&#xff0c;进行计算下一…

前端传输formDate格式的数据,后端不能用@RequestBody接收

写了个接口&#xff0c;跟前端对接&#xff0c;前端说怎么一直415的报错 我寻思不对啊&#xff0c;我swagger都请求成功了&#xff0c;后来发现前端一直是以formdata格式提交的数据&#xff0c;这样我其实是可以不加RequestBody的&#xff1b; 知识点&#xff1a; RequestBody…

核方法 : 多项式核函数

一、定义 多项式核函数&#xff1a; 将数据映射到高维空间&#xff0c;从而实现 低维线性不可分 到 高维线性可分 二、核心代码介绍 1、关于 PolynomialFeatures(degree3) &#xff1a; 三次多项式核函数 2、关于 svm_clf.decision_function &#xff1a; 推理 三、代码 …

Redis取最近10条记录

有时候我们有这样的需求&#xff0c;就是取最近10条数据展示&#xff0c;这些数据不需要存数据库&#xff0c;只用于暂时最近的10条&#xff0c;就没必要在用到Mysql类似的数据库&#xff0c;只需要用redis即可&#xff0c;这样既方便也快&#xff01; 具体取最近10条的方法&a…

Python深度学习029:pytorch中常用的模块或方法

PyTorch是一个广泛使用的深度学习库,提供了许多用于构建和训练神经网络的模块和方法。下面是一些PyTorch中常用的模块和方法的简要介绍: PyTorch常用模块和方法 torch 用途:PyTorch的基础模块,提供了多种数学运算功能。常用方法: torch.tensor():创建张量torch.randn():…

12.21 汇编点亮STM32MP157小灯

.text .global _start _start: 时钟使能LDR r0,0x50000A28LDR r1,[r0]ORR r1,r1,#(0x1<<4)ORR r1,r1,#(0x1<<5)ORR r1,r1,#(0x1<<1)STR r1,[r0]配置GPIO模式LDR r0,0x50006000LDR r1,[r0]BIC r1,r1,#(0x2<<20)ORR r1,r1,#(0x1<<20)BIC r1,r1,#(…

线程和进程你真的了解吗?快来看看全面的解析和线程的代码

&#xff08;本篇文章全面的释义了线程和进程&#xff1b;为了方便大家熟练的掌握&#xff0c;内容中引入了详细的代码&#xff1b;欢迎大家学习讨论和批评指正&#xff09; 进程的概念 操作系统(OS)中并发(同时)执行的多个程序任务 进程的特点 宏观并行,微观串行 在一个时…

INS的各类方程---微分方程

INS 会受到误差的扰动&#xff0c; INS 的误差方程进行推导。常用的误差模型有 PHI 角和 PSI 角误差 模型。PHI 角误差模型是基于平台坐标系与真实导航坐标系推导的&#xff0c;误差模型易于理解但形式较为复杂。PSI 角误差模型是基于平台坐标系和计算坐标系推导的&#xff0c;…

【C++】可变参数模板使用总结(简洁易懂,详细,含代码演示)

前言 大家好吖&#xff0c;欢迎来到 YY 滴C系列 &#xff0c;热烈欢迎&#xff01; 本章主要内容面向接触过C的老铁 主要内容含&#xff1a; 欢迎订阅 YY滴C专栏&#xff01;更多干货持续更新&#xff01;以下是传送门&#xff01; YY的《C》专栏YY的《C11》专栏YY的《Linux》…

TYPE C 接口知识

1、Type C 概述 Type-C口有4对TX/RX分线&#xff0c;2对USBD/D-&#xff0c;一对SBU&#xff0c;2个CC&#xff0c;另外还有4个VBUS和4个地线。 当Type-C接口仅用作传输DP信号时&#xff0c;则可利用4对TX/RX&#xff0c;从而实现4Lane传输&#xff0c;这种模式称为DPonly模式…

个性化邮件营销策略:提升销售额的有效方法

事实上&#xff0c;电子邮件营销人员一直将个性化视为让受众产生强烈参与感的最佳方式之一。对于很多营销人员来说&#xff0c;实施个性化甚至不再是一种选择&#xff0c;而是培养和吸引潜在客户和联系人的必要条件。因此&#xff0c;今天我们将一起来讨论一些成功电子邮件营销…

【LeetCode刷题笔记】动态规划(一)

376. 摆动序列 解题思路: 1. 动态规划 , 定义 up[i] 表示下标 i 的元素为 结尾 的【 最长上升摆动序列 】的 长度 , down[i] 表示下标 i 的元素为

2016年第五届数学建模国际赛小美赛B题直达地铁线路解题全过程文档及程序

2016年第五届数学建模国际赛小美赛 B题 直达地铁线路 原题再现&#xff1a; 在目前的大都市地铁网络中&#xff0c;在两个相距遥远的车站之间运送乘客通常需要很长时间。我们可以建议在两个长途车站之间设置直达班车&#xff0c;以节省长途乘客的时间。   第一部分&#xf…

【WPF.NET开发】创建模板

本文内容 何时创建 ControlTemplate先决条件创建 ControlTemplate使用模板添加触发器使用 VisualState 使用 Windows Presentation Foundation (WPF)&#xff0c;可以使用自己的可重用模板自定义现有控件的可视结构和行为。 可以对应用程序、窗口和页面全局应用模板&#xff…

【Amazon 实验②】使用缓存策略及源请求策略,用于控制边缘缓存的行为及回源行为

文章目录 1. 了解缓存策略和源请求策略1.1 使用缓存键和缓存策略 实验&#xff1a;使用CloudFront缓存策略和缓存键控制缓存行为 接上一篇文章【Amazon 实验①】使用 Amazon CloudFront加速Web内容分发&#xff0c;我们现在了解和配置如何使用缓存策略及源请求策略&#xff0c;…

JUC AQS ReentrantLock源码分析

AQS java.util.concurrent.locks.AbstractQueuedSynchronizer AQS &#xff08;抽象队列同步器&#xff09;&#xff1a; AbstractQueuedSynchronizer 是什么 来自jdk1.5&#xff0c;是用来实现锁或者其他同步器组件的公共基础部分的抽象实现&#xff0c;是重量级基础框架以及…

java SSM家庭财务管理系统myeclipse开发mysql数据库springMVC模式java编程计算机网页设计

一、源码特点 java SSM家庭财务管理系统是一套完善的web设计系统&#xff08;系统采用SSM框架进行设计开发&#xff0c;springspringMVCmybatis&#xff09;&#xff0c;对理解JSP java编程开发语言有帮助&#xff0c;系统具有完整的源代 码和数据库&#xff0c;系统主要采…