YOLO机械臂丨使用unity搭建仿真环境,YOLO算法识别,Moveit2控制

article/2025/6/24 1:02:52

文章目录

  • 前言
  • 搭建开发环境
  • 在window中安装Unity
  • 创建Docker容器,并安装相关软件
  • 运行测试
  • 改进
    • 添加删除节点前的函数调用
  • 报错
    • ❌框选节点的时候报错
    • ❌如果无法控制机械臂,查看rviz2的终端,应该会有
    • ❌规划路径超出范围
  • 参考

前言

本项目介绍通过Unity3D仿真Panda机械臂,为研究机械臂的控制算法、控制效果和构建复杂仿真环境提供虚拟化平台。

在这里插入图片描述在这里插入图片描述
2025-5-182025-6-2

要点:

  • PandaArmUnity3DUnity3D项目
  • ros2_docker_wsros2项目
  • matlab:包含了验证机械臂位置正逆运动学的算法分析

video:

  • 2025-6-2:YOLO机械臂丨使用unity搭建仿真环境,YOLO算法识别,Moveit2控制
  • 2025-5-18: 机械臂位置正逆运动学原理与代码
  • 2025-4-13: ros2-rviz2控制unity仿真的6关节机械臂,探索从仿真到实际应用的过程

搭建开发环境

  • Unity:2022
  • Ubuntu:24.04
  • Ros2:jazzy

在window中安装Unity

先安装Unityhuyb,然后再安装Unity

https://unity.cn/releases

创建Docker容器,并安装相关软件

❇️创建Docker容器

docker run -it -p 6080:80 -p 10000:10000 -v /tmp/.X11-unix:/tmp/.X11-unix -e DISPLAY=host.docker.internal:0.0 -e PULSE_SERVER=host.docker.internal --name=DockerUnityRos2Arm docker.1ms.run/ubuntu:24.04  /bin/bash

❇️安装相关软件

# 按照鱼香ros一键安装ros2
apt-get update
apt install wget -y
wget http://fishros.com/install -O fishros && bash fishros# 安装远程显示服务程序
sudo apt-get install x11-xserver-utils
sudo apt install libxcb* -y
sudo apt-get install x11-apps -y# 安装moveit
# 重新打开一个终端
sudo apt install ros-${ROS_DISTRO}-moveit* -y# 安装ros2的控制功能包
sudo apt install ros-${ROS_DISTRO}-controller-manager -y
sudo apt install ros-${ROS_DISTRO}-joint-trajectory-controller -y
sudo apt install ros-${ROS_DISTRO}-joint-state-broadcaster -y
sudo apt install ros-${ROS_DISTRO}-diff-drive-controller -y# 安装运行`graph_executer_controller`相关的Python包
sudo apt update
sudo apt install python3-pip -y
sudo apt-get install portaudio19-dev -y
sudo apt install espeak -y# 安装音频
apt-get update && apt-get install -y alsa-utils pulseaudio
aplay -L  # 列出音频设备
# speaker-test -t wav  # 测试播放# 使用清华源下载
cd src/graph_executer_controller/
pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple --break-system-packages
pip install pyqtgraph ultralytics --break-system-packages# 调试工具
python3 -m pip install ipykernel -U --user --force-reinstall -i https://pypi.tuna.tsinghua.edu.cn/simple --break-system-packages# 配置Ubuntu支持中文
sudo apt-get install language-pack-zh-hans -y
apt install vim -yvim /etc/environment
# 添加内容
LANG="zh_CN.UTF-8"
LANGUAGE="zh_CN:zh:en_US:en"vim /var/lib/locales/supported.d/local
# 添加内容
en_US.UTF-8 UTF-8
zh_CN.UTF-8 UTF-8
zh_CN.GBK GBK
zh_CN GB2312sudo locale-gen# 安装中文字体
sudo apt-get install fonts-droid-fallback ttf-wqy-zenhei ttf-wqy-microhei fonts-arphic-ukai fonts-arphic-uming -y# 安装支持playsound的库
apt-get install libgstrtspserver-1.0-dev gstreamer1.0-rtsp -y

运行测试

❇️在windows上运行PulseAudio服务

在这里插入图片描述

❇️启动Unity

❇️编译项目

colcon build

❇️启动tcp,用于ros2与unity连接

source install/setup.bash 
ros2 launch ros_tcp_endpoint endpoint.launch.py

❇️运行moveitpy_controller

# 打开新的终端
source install/setup.bash
ros2 launch control_server arm_control.launch.py

❇️运行graph_executer_controller

# 打开新的终端
source install/setup.bash
cd src/graph_executer_controller
python3 main.py

❇️运行panda_moveit_configdemo.launch.py

# 打开新的终端
source install/setup.bash
ros2 launch panda_moveit_config demo.launch.py

启动rviz2后,可以看到机械臂会有干涉,现手动调整到不干涉的位置,然后才使用moveitpy控制机械臂,否则无法控制机械臂。

改进

添加删除节点前的函数调用

问题描述:由于nodegraphqt没有删除节点的操作,这里为其添加。

/usr/local/lib/python3.12/dist-packages/NodeGraphQt/base/graph.pyNodeGraph类的delete_node(self, node, push_undo=True)函数中添加以下内容:

在这里插入图片描述

if hasattr(node, '_del_node'):node._del_node()

报错

❌框选节点的时候报错

  File "/usr/local/lib/python3.12/dist-packages/NodeGraphQt/widgets/viewer.py", line 619, in mouseMoveEventself.scene().setSelectionArea(
TypeError: 'PySide6.QtWidgets.QGraphicsScene.setSelectionArea' called with wrong argument types:PySide6.QtWidgets.QGraphicsScene.setSelectionArea(QPainterPath, ItemSelectionMode)
Supported signatures:PySide6.QtWidgets.QGraphicsScene.setSelectionArea(path: PySide6.QtGui.QPainterPath, /, selectionOperation: PySide6.QtCore.Qt.ItemSelectionOperation = Instance(Qt.ReplaceSelection), mode: PySide6.QtCore.Qt.ItemSelectionMode = Instance(Qt.IntersectsItemShape), deviceTransform: PySide6.QtGui.QTransform = Default(QTransform))PySide6.QtWidgets.QGraphicsScene.setSelectionArea(path: PySide6.QtGui.QPainterPath, deviceTransform: PySide6.QtGui.QTransform, /)
Error calling Python override of QGraphicsView::mouseMoveEvent(): Traceback (most recent call last):File "/usr/local/lib/python3.12/dist-packages/NodeGraphQt/widgets/viewer.py", line 619, in mouseMoveEventself.scene().setSelectionArea(
TypeError: 'PySide6.QtWidgets.QGraphicsScene.setSelectionArea' called with wrong argument types:PySide6.QtWidgets.QGraphicsScene.setSelectionArea(QPainterPath, ItemSelectionMode)
Supported signatures:PySide6.QtWidgets.QGraphicsScene.setSelectionArea(path: PySide6.QtGui.QPainterPath, /, selectionOperation: PySide6.QtCore.Qt.ItemSelectionOperation = Instance(Qt.ReplaceSelection), mode: PySide6.QtCore.Qt.ItemSelectionMode = Instance(Qt.IntersectsItemShape), deviceTransform: PySide6.QtGui.QTransform = Default(QTransform))PySide6.QtWidgets.QGraphicsScene.setSelectionArea(path: PySide6.QtGui.QPainterPath, deviceTransform: PySide6.QtGui.QTransform, /)

✔️Pyside6和nodegraphqt版本不适配导致,更改viewer.py以下位置即可:

# "/usr/local/lib/python3.12/dist-packages/NodeGraphQt/widgets/viewer.py"# self.scene().setSelectionArea(
#     path, QtCore.Qt.IntersectsItemShape
# )
self.scene().setSelectionArea(path,selectionOperation=QtCore.Qt.ItemSelectionOperation.ReplaceSelection,mode=QtCore.Qt.ItemSelectionMode.IntersectsItemShape
)

❌如果无法控制机械臂,查看rviz2的终端,应该会有

[move_group-3] [ERROR] [1748613208.480924749] [move_group.moveit.moveit.ros.check_start_state_bounds]: Joint 'panda_joint2' from the starting state is outside bounds by: [1.76294 ] should be in the range [-1.7628 ], [1.7628 ].
[move_group-3] [ERROR] [1748613208.480986559] [move_group]: PlanningRequestAdapter 'CheckStartStateBounds' failed, because 'Start state out of bounds.'. Aborting planning pipeline.

✔️:重新启动rviz2即可

❌规划路径超出范围

[ERROR] [1742603349.012384448] [moveit_3836862178.moveit.ros.check_start_state_bounds]: Joint 'panda_finger_joint1' from the starting state is outside bounds by: [-6.61565e-14 ] should be in the range [0 ], [0.04 ].
[ERROR] [1742603349.012503158] [moveit_py]: PlanningRequestAdapter 'CheckStartStateBounds' failed, because 'Start state out of bounds.'. Aborting planning pipeline.
[ERROR] [1742603349.013678982] [moveit_py.pose_goal]: Planning failed

✔️修改joint_limits.yaml,限制关节的最大最小位置

在这里插入图片描述

参考

  • docker-ros2-unity-tcp-endpoint
  • Robotics-Nav2-SLAM-Example
  • unity坐赛车游戏,简单三分钟了解一下
  • How to Setup Unity and ROS2 in less than 5 minutes!
  • ros2-for-unity
  • moveit2_yolobb_ws
  • Unity-Robotics-Hub
  • JSON Output
  • DeepSeek提示库
  • Binary Installation on Ubuntu
  • Docs / Gazebo Harmonic
  • ros_gz branch jazzy
  • Binary Installation on Ubuntu
  • Docs / Gazebo Harmonic
  • ros_gz branch jazzy

关注👇👇,发送:DockerRos2UnityArm,方便获取仿真代码。


http://www.hkcw.cn/article/XGWkeWiOmZ.shtml

相关文章

论文略读:Auto-Regressive Moving Diffusion Models for Time Series Forecasting

AAAI 2025 在这篇论文中,时间序列的演进()被概念化为一个扩散过程 时间序列的每一步都可以看成是扩散模型的一个状态未来序列(下标表示在序列中的位置,上标表示在扩散模型中的状态)作为前向扩散(演进&…

外卖小哥误入工地1个多小时没能出来 最终只能报警求助

近日,一名外卖小哥在送外卖时,为节约时间,跟着导航抄小路,没想到自己看错了路线,被困在了一个在建工地内1个多小时,最终只能报警求助。责任编辑:zx0002

贾冰瘦了 少吃多动见成效

5月31日,演员贾冰的妻子发布了一段视频,祝福大家端午节快乐,并配文“从此我家多了个瘦子”。两人合影中,贾冰明显瘦了很多。评论区里,很多人询问他如何瘦下来,甚至有人表示他瘦得认不出来了。贾冰妻子回复说,主要是通过少吃和运动来达到减肥效果,有时候一天只吃一顿饭。…

犯罪分子“轻易”作案 竟是这种警示牌在指路

机房和弱电井房都是整栋建筑或整个企业网络通信的重要组成部分,如果机房是网络通信设备的“核心大脑”和“运行中心”,那么弱电井房就是连接网络通信设备的“垂直通道”和“中转站”,就好比“心脏”和“血管”相辅相成。但往往有些企业却忽略了“血管”的重要性,仅仅挂上“…

用servlet写的博客系统

数据库的设计: 设计好对应的表结构,把数据库相关的代码封装起来。 a)找到实体: 博客(blog表) 用户(user表) b)确认实体之间的关系 一对多 一个博客属于一个用户,一个用户可以…

街坊打麻将赌博被拘留 ​广州一直在重拳出击打麻将赌博行为

广州一直在重拳出击打麻将赌博行为。一黄埔街坊说自己因打麻将而被依法拘留5天罚款500元,下面评论并不多,仍看见多位广州ip地址的条友声称自已有同样或类似遭遇。有打麻将关十天的,有关两天罚五百的,有关半个月罚一千的。虽然无法证实或证伪,但也可以供参考一二。我认识的…

领域驱动设计(Domain-Driven Design, DDD)

博主介绍:✌全网粉丝5W,全栈开发工程师,从事多年软件开发,在大厂呆过。持有软件中级、六级等证书。可提供微服务项目搭建与毕业项目实战,博主也曾写过优秀论文,查重率极低,在这方面有丰富的经验…

江科大RTC实时时钟hal库实现

首先&#xff0c;因为的LSE无法启振&#xff0c;所以我使用LSI当作RTCCLK,LSI无法由备用电源供电&#xff0c;故主电源掉电时&#xff0c;RTC走时会暂停。 hal库相关函数 时分秒 typedef struct {uint8_t Hours; /*!< Specifies the RTC Time Hour.This param…

从“人防”到“智防”,智驱力助力危化品企业智能化转型

化工和危险化学品企业一直是国家安全生产监管的重点领域之一。近年来&#xff0c;随着AI技术的快速发展&#xff0c;越来越多的传统工业场景开始引入人工智能技术&#xff0c;实现从“人防”向“技防”的转变。多地应急管理厅也相继出台相关政策&#xff0c;推动视频智能分析系…

Nacos 2.4.3 登录配置

1&#xff0c; 调整配置 完整配置文件 # # Copyright 1999-2021 Alibaba Group Holding Ltd. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy…

Cursor 0.51 全网首歌新功能深度体验:Generate Memories 让 AI 编程助手拥有“记忆“

写在前面 你是否遇到过这样的困扰:每次开启新的 Cursor 对话,都要重新向 AI 解释项目背景、技术栈、架构设计?或者当对话内容过多时,AI 就"忘记"了之前讨论的重要信息? 如果你有过这样的经历,那么 Cursor 0.51 版本新推出的 Generate Memories 功能绝对是你的…

如何在WHM中配置远程数据库访问

在远程数据库访问方面&#xff0c;cPanel和WHM之间存在一些差异&#xff1a; 在WHM中添加的主机将应用于所有cPanel用户帐户及其关联的MySQL用户。 cPanel用户无法永久删除由系统管理员root账户在WHM中添加的主机。 要允许远程主机访问MySQL数据库&#xff0c;请导航到侧边栏…

强大的PDF编辑工具,操作方便 ,长久使用

这是一款能够让每一个用户都能在这里轻松实现最简单的编辑方式&#xff0c;一站式完成PDF文件处理&#xff0c;较于前面几个版本&#xff0c;这个版本整体界面比较清爽&#xff0c;用户可以在这里一站式完成PDF编辑&#xff0c;在这里快速修改&#xff0c;编辑、创建、电子签名…

上海迪士尼游客打架官方通报 拍照冲突致肢体冲突

昨天21:45,浦东公安分局发布微博称,5月31日18时许接到报警,迪士尼乐园内发生打架事件。经初步调查,闫某某(男,22岁)与女友在拍照时,因刘某某(男,36岁)夫妻的女儿进入拍摄画面,双方发生口角后引发肢体冲突,造成闫某某和刘某某互有皮外伤,小女孩未受伤。目前,调查…

蔚来5月交付23231辆 同比增长13.1%

6月1日,蔚来公司公布了5月份的交付数据。当月共交付新车23231台,同比增长13.1%。具体来看,蔚来品牌交付了13270台;乐道品牌交付了6281台;firefly萤火虫品牌交付了3680台。截至目前,蔚来公司累计交付新车总数达到760789台。其中,蔚来品牌累计交付710655台;乐道品牌累计交…

沈白高铁进入开通运营倒计时 联调联试启动

6月1日,国家“十四五”规划重点高速铁路建设项目——沈阳至长白山高速铁路正式启动联调联试,标志着沈白高铁进入开通运营的倒计时。沈白高铁起自沈阳北站,途经辽宁省沈阳市、沈抚新区、抚顺市,以及吉林省通化市、白山市、延边州、长白山管委会,最终引入敦化至白河铁路长白…

台艺人刘乐妍称自己是中国人:反对"台独"是世界潮流,也是台湾唯一出路

六一发文称自己是中国人!台湾艺人刘乐妍:反对"台独"是世界潮流,也是台湾唯一出路!责任编辑:zx0002

Cesium使用primitive添加点线面(贴地)

// 创建一个图元集合const primitives viewer.scene.primitives.add(new Cesium.PrimitiveCollection());1、点上图 // 定义点的位置&#xff08;中国不同城市的经纬度&#xff09;const points [{ lon: 116.4074, lat: 39.9042, name: "北京" },{ lon: 121.4737, …

杨明洋社媒晒国足训练照 备战印尼全力以赴

国脚杨明洋更新了社交媒体,分享了自己随国足备战与印尼比赛的照片。国足目前在上海进行最后两场18强赛的备战工作,并计划于今日启程前往雅加达。杨明洋表示,首次入选国家队感到非常荣幸,能够成为其中一员对他来说意义重大。责任编辑:zx0176

警方通报上海迪士尼打架事件 拍照争执引发冲突

6月1日,浦东公安分局接到报警称,5月31日18时许迪士尼乐园内有人打架。经初步调查,闫某某(男,22岁)与女友在拍照时,因刘某某(男,36岁)夫妻的女儿进入拍摄画面,双方发生口角后引发肢体冲突,造成闫某某和刘某某互有皮外伤,小女孩未受伤。目前,调查处理工作正在进一步…