从零开始的机械臂yolov5抓取gazebo仿真(六)

news2024/11/25 13:33:36

项目构造简述

前段时间博主装20.04系统不小心把efi启动给删了,导致18.04系统崩了,所以只能简单讲一下这个项目的设计思路以及以grasp.py代码为例进行简单解析。

yolov5_ros功能包

首先,说一下yolov5_ros功能包,该功能包的作用就是用ros功能包封装yolov5这个代码包,并且通过话题的方式发布图像中的锚框信息。
yolov5_ros功能包代码原理这里不进行详解,只说一下如何使用。
新建一个开启yolov5_ros节点的launch文件,yolo_v5.launch:

<?xml version="1.0" encoding="utf-8"?>

<launch>
  <!-- Load Parameter -->
  
  <param name="yolov5_path"       value="$(find yolov5_ros)/yolov5"/>
  <param name="use_cpu"           value="true" />

  <!-- Start yolov5 and ros wrapper -->
  <node pkg="yolov5_ros" type="yolo_v5.py" name="yolov5_ros" output="screen" >
    <param name="weight_path"       value="$(find yolov5_ros)/weights/polygon.pt"/>
    <param name="image_topic"       value="/camera/color/image_raw" />
    <param name="pub_topic"         value="/yolov5/BoundingBoxes" />
    <param name="camera_frame"       value="camera_color_optical_frame"/>
    <param name="conf"              value="0.3" />
  </node>
</launch>

其中weight_path参数对应使用的权重路径,路径指向之前训练出来的权重文件。
image_topic参数对应仿真中相机的二维彩色图像输出话题。
pub_topic参数对应发布的话题。
camera_frame参数为相机的对应link。
只需要修改对应参数的value即可使用该功能包了。

vacuum_plugin使用

简单说一下吸盘插件的使用,参照vacuum_plugin功能包中test_gripper.urdf中的插件形式,在sunday.xacro中插入吸盘插件:

  <!-- vacuum_gripper plugin -->
  <gazebo>
    <plugin name="gazebo_ros_vacuum_gripper" filename="libvacuum_plugin.so">
      <robotNamespace>/sunday/vacuum_gripper</robotNamespace>
      <bodyName>link_6</bodyName>
      <topicName>grasping</topicName>
      <maxDistance>0.05</maxDistance>
      <minDistance>0.03</minDistance>
    </plugin>
</gazebo>


<gazebo reference="link_6">
  <mu1>50</mu1>
  <mu2>50</mu2>
  <minDepth>0.003</minDepth>
  <maxVel>0</maxVel>
  <kp>1000000.0</kp>
  <kd>1.0</kd>
  <material>Gazebo/Grey</material>
</gazebo>

robotNamespace吸盘命名空间为/sunday/vacuum_gripper,与服务进行对应。
bodyName为吸盘对应到的link,grasping为插件发布的吸盘话题。
吸盘通过服务来控制开关。

        rospy.wait_for_service('/sunday/vacuum_gripper/off')
        rospy.wait_for_service('/sunday/vacuum_gripper/on')
        self.vacuumOn=rospy.ServiceProxy('/sunday/vacuum_gripper/on', Empty)
        self.vacuumOff=rospy.ServiceProxy('/sunday/vacuum_gripper/off', Empty)

抓取脚本简述

关于这个抓取脚本,算是实现yolov5与moveit实现抓取的一个整合,简单说一下grasp.py,其实已经有详细的注释说明,大致讲一下思路。事先需要准备的是相机的内参,这个可以使用真实realsenseD435i的内参;以及机械臂向下拾取目标时的末端位姿endDown,这个可以在moveit中调整机械臂致预想位姿(四元数信息),并在rviz中获取。对照主函数,首先将机械臂运行至scan_food位置,此时yolov5_ros识别出目标物体,/yolov5/BoundingBoxes话题中有锚框的位置信息以及物体的名称信息,grasp.py再订阅相机深度话题,得到锚框中心点的深度信息,通过坐标转换,得到目标点到机械臂的坐标相对位置,并进行抓取。代码请自行参考开源内容。

grasp&feed的话,对yolov5_ros功能包进行二次调用,增加了嘴部张口闭口的识别,在拾取到之后机械臂进入scan_face位姿,如果识别到嘴巴张开则判断为进食,如果嘴部位置超出机械臂行程,则相对位置对应方向上-10cm,并重新开始规划,直至可达机械臂行程为止。grasp&feed节点运行图如下:
在这里插入图片描述

小结

博主的18.04系统在装22.04三系统的时候不小心搞没了,没办法拖更至今,到现在也只能大致讲一下代码的思路,机械臂的内容至此告一段落把。具体学习ros机械臂的话可以看一下深蓝古月ros机械臂的课程,课程可以私聊博主领取。博主接下去准备学一下嵌入式的内容,从平衡小车开始做起,接下去会做一个平衡小车的系列以及ros2小车的系列,相关问题博主不一定有时间来解答,下一个项目见。

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

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

相关文章

使用 CameraX 在 Jetpack Compose 中构建相机 Android 应用程序

使用 CameraX 在 Jetpack Compose 中构建相机 Android 应用程序 CameraX 是一个 Jetpack 库&#xff0c;旨在帮助简化相机应用程序的开发。 [camerax官方文档] https://developer.android.com/training/camerax CameraX的几个用例&#xff1a; Image CaptureVideo CapturePrev…

【多线程】什么是线程死锁?形成条件是什么?如何避免?

文章目录 一、什么是线程死锁二、线程死锁三、形成死锁的四个必要条件是什么四、如何避免线程死锁 一、什么是线程死锁 死锁是指两个或两个以上的进程&#xff08;线程&#xff09;在执行过程中&#xff0c;由于竞争资源或者由于彼此通信而造成的一种阻塞的现象&#xff0c;若…

Unity 天空盒

在 Unity 中&#xff0c;天空盒是使用天空盒着色器的一种材质。 创建天空盒材质 1.从菜单栏中&#xff0c;单击 Assets > Create > Material。 2.在 Shader 下拉选单中&#xff0c;单击 Skybox&#xff0c;然后单击要使用的天空盒着色器。 有Skybox/6 Sided、Skybox/…

人民大学与加拿大女王金融硕士项目——在现在憧憬美好的未来

未来是一个虚无缥缈的词汇&#xff0c;抓不住也看不到。未来里有着我们无限的希望&#xff0c;也有着美好的憧憬。未来究竟是怎样的呢&#xff0c;有人说现在的样子里藏着未来的模样。在职的你有没有为未来编织一副美丽的画卷呢&#xff1f;未来很远&#xff0c;远到只能靠想象…

MySQL小记——约束、多表查询

目录 约束 常见约束 主键约束 非空约束 唯一约束 自增长约束 非负约束 外键约束之一对多 外键约束之多对多 多表查询 内连接 外连接 左外连接 右外连接 子查询 自查询 case when语句 约束 在MySQL中&#xff0c;约束是对字段规则的一种限制。 常见约束 1.主…

Linux安装并使用seatunnel2.3.1

SeaTunnel是一个非常易用的超高性能分布式数据集成平台&#xff0c;支持海量数据的实时同步。 下载安装包 设置版本 export version"2.3.1" 通过命令下载 wget "https://archive.apache.org/dist/incubator/seatunnel/${version}/apache-seatunnel-incubat…

Linux/Ubuntu系统运行Python+Yolov5物体识别

程序示例精选 Linux/Ubuntu系统运行PythonYolov5物体识别 如需安装运行环境或远程调试&#xff0c;见文章底部个人QQ名片&#xff0c;由专业技术人员远程协助&#xff01; 前言 这篇博客针对<<Linux/Ubuntu系统运行PythonYolov5物体识别>>编写代码&#xff0c;代码…

汽车最强大脑ECU和单片机是什么关系

摘要&#xff1a; 有效解决线路信息传递所带来的复杂化问题 ECU的定义 ECU原来指的是engine control unit&#xff0c;即发动机控制单元&#xff0c;特指电喷发动机的电子控制系统。但是随着汽车电子的迅速发展&#xff0c;ECU的定义也发生了巨大的变化&#xff0c;变成了elec…

31岁才转行程序员,目前34了,我来说说我的经历和一些感受吧...

最近刷知乎&#xff0c;发现有很多朋友有年龄焦虑了&#xff0c;比如&#xff1a;“我今年28了转行来不来得及”&#xff0c;“我今年30了还能转软件测试吗&#xff1f;”......这种问题在知乎上有很多&#xff0c;仿佛大家都觉得年纪大了&#xff0c;很多事情都来不及了&#…

tps和qps的区别和理解

QPS&#xff08;TPS&#xff09; 并发数/平均响应时间 或者 并发数 QPS*平均响应时间 TPS Transactions Per Second&#xff08;每秒传输的事物处理个数&#xff09;&#xff0c;即服务器每秒处理的事务数。TPS包括一条消息入和一条消息出&#xff0c;加上一次用户数据库访…

html使用elementui案例

<!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><title>Title</title><!--引入 element-ui 的样式&#xff0c;--><link rel"stylesheet" href"static/css/index.css">…

轻松将Win10系统备份到U盘的2种方法!

问题&#xff1a;我能将Win10系统备份到U盘吗&#xff1f; ​“我想将Win10系统备份到U盘&#xff0c;然后通过增量或差异备份定期备份。我使用了系统自带的工具进行备份&#xff0c;但它无法识别这个U盘。有没有好用的方法可以轻松的将电脑系统备份到u盘/移动硬盘&#xf…

Ubuntu系统下Nginx安装

一、使用apt安装nginx 0-如果本机安装了nginx&#xff0c;就进行卸载&#xff1a; apt-get --purge autoremove nginx 检查本机是否还有nginx程序在后台运行&#xff0c;如果有直接kill掉。 ps -ef | grep nginx 1-默认版本安装 apt-get update apt-get install nginx 2…

【备战秋招】每日一题:3月18日美团春招第四题:题面+题目思路 + C++/python/js/Go/java带注释

2023大厂笔试模拟练习网站&#xff08;含题解&#xff09; www.codefun2000.com 最近我们一直在将收集到的各种大厂笔试的解题思路还原成题目并制作数据&#xff0c;挂载到我们的OJ上&#xff0c;供大家学习交流&#xff0c;体会笔试难度。现已录入200道互联网大厂模拟练习题&…

spring Security 认证失败,用户名和密码是正确的还是失败

项目用登录输入正确的用户名和密码为什么还是告知,用户名和密码是不正确? 有这几种情况 第一种是不是开启缓存,数据库中存储的是加密后的密码 第二种,查看源代码,这句是关键,presentedPassword是明文密码,userDetails.getPassword()是加密后的密码,进行比较 this.pa…

做好个人黄金投资,学习黄金投资交易原则

随着经济的发展,黄金逐渐成为金融投资的重要工具&#xff0c;越来越多的人开始关注黄金投资。想要做好个人黄金投资&#xff0c;建议先熟悉和学习黄金投资交易原则的内容。 黄金投资交易原则一、跟随趋势入场 在买入之前&#xff0c;首先应对行情的运行趋势有个明确的判断。一…

全网最全postman接口测试教程和项目实战~从入门到精通!!!

Postman实现接口测试内容大纲一览&#xff1a; 一、什么是接口&#xff1f;为什么需要接口&#xff1f; 接口指的是实体或者软件提供给外界的一种服务。 因为接口能使我们的实体或者软件的内部数据能够被外部进行修改。从而使得内部和外部实现数据交互。所以需要接口。 比如&…

支撑企业未来10年高增长,用友资金管理平台助力新零售企业逆境破局

随着大数据、云服务、5G等技术的深化发展&#xff0c;人们消费观念及需求逐渐变化&#xff0c;我国新零售业数字化进程不断加快。近年来&#xff0c;新零售已经不仅局限于单一的零售范畴&#xff0c;逐步演变为集零售、快递物流、金融科技、企业服务、人工智能等各行各业为一体…

公司只有1个测试,领导却让我测试10个项目,这不是为难我....

读者提问&#xff1a;公司只有 1个测试&#xff0c;领导让我同时测试 10个项目&#xff0c;我该怎么办&#xff1f;回答&#xff1a;如果我是那个测试&#xff0c;我会做这三件事 1、向上申请资源2、任务分配到人3、执行测试任务 一、向上申请资源 1个测试同时对接 10个项目&a…

华为云认证的含金量高吗?数通考什么内容?

对于从事信息通信行业的人来说&#xff0c;拥有一份专业的证书&#xff0c;对提升自己的技能、职业竞争力是非常有帮助的&#xff0c;而华为云虽然是一个新兴的云计算厂商&#xff0c;但是咋断电几年之内&#xff0c;已经发展到了国内第二的位置&#xff0c;而且还在不断地发展…