小鱼 ROS 2 新书上线!点击链接查看, 新书配套视频点击链接查看。
提问前必看的发帖注意事项—— 提问前必看!不符合要求的问题拒绝回答!!
社区使用指南—如何添加标签修改密码
使用小鱼的ROS2 yolov5 功能包时出现错误
-
输入ros2 run yolov5_ros2 yolo_detect_2d --ros-args -p device:=cpu -p image_topic:=/image -p show_result:=True -p pub_result_img:=True来运行节点时 使用环境:虚拟机 ROS2 foxy 问题:运行节点时出错,且不弹出相机 /opt/ros/foxy/bin/ros2:6: DeprecationWarning: pkg_resources is deprecated as an API. See https://setuptools.pypa.io/en/latest/pkg_resources.html from pkg_resources import load_entry_point [INFO] [1723277934.517982525] [yolov5_ros2]: Current ROS 2 distribution: foxy [INFO] [1723277935.078227315] [yolov5_ros2]: default_camera_info: [476.7030836014194, 0.0, 400.5, 0.0, 476.7030836014194, 400.5, 0.0, 0.0, 1.0] [0.0, 0.0, 0.0, 0.0, 0.0] /home/tjx/.local/lib/python3.8/site-packages/yolov5/models/common.py:709: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead. with amp.autocast(autocast): [INFO] [1723277935.429312975] [yolov5_ros2]: image 1/1: 480x640 2 persons, 1 chair, 3 books Speed: 2.2ms pre-process, 243.2ms inference, 2.5ms NMS per image at shape (1, 3, 480, 640) Traceback (most recent call last): File "/home/tjx/yolov5_ws/install/yolov5_ros2/lib/yolov5_ros2/yolo_detect_2d", line 33, in <module> sys.exit(load_entry_point('yolov5-ros2==0.0.0', 'console_scripts', 'yolo_detect_2d')()) File "/home/tjx/yolov5_ws/install/yolov5_ros2/lib/python3.8/site-packages/yolov5_ros2/yolo_detect_2d.py", line 169, in main rclpy.spin(YoloV5Ros2()) File "/opt/ros/foxy/lib/python3.8/site-packages/rclpy/__init__.py", line 191, in spin executor.spin_once() File "/opt/ros/foxy/lib/python3.8/site-packages/rclpy/executors.py", line 719, in spin_once raise handler.exception() File "/opt/ros/foxy/lib/python3.8/site-packages/rclpy/task.py", line 239, in __call__ self._handler.send(None) File "/opt/ros/foxy/lib/python3.8/site-packages/rclpy/executors.py", line 429, in handler await call_coroutine(entity, arg) File "/opt/ros/foxy/lib/python3.8/site-packages/rclpy/executors.py", line 354, in _execute_subscription await await_or_execute(sub.callback, msg) File "/opt/ros/foxy/lib/python3.8/site-packages/rclpy/executors.py", line 118, in await_or_execute return callback(*args) File "/home/tjx/yolov5_ws/install/yolov5_ros2/lib/python3.8/site-packages/yolov5_ros2/yolo_detect_2d.py", line 115, in image_callback detection2d.id = name AttributeError: 'Detection2D' object has no attribute 'id' ![屏幕截图 2024-08-10 163343.jpg](/forum/assets/uploads/files/1723278848233-屏幕截图-2024-08-10-163343.jpg)
-
您遇到的问题主要与
yolov5_ros2
功能包中的Detection2D
类定义有关。从错误日志来看,Detection2D
对象试图访问一个不存在的属性id
,这通常意味着该类中没有定义这个属性,但在您的代码中尝试使用它。要解决这个问题,您可以采取以下几个步骤:
-
检查
Detection2D
类的定义:
打开yolov5_ros2
功能包中定义Detection2D
类的文件(通常是在某个.py
文件中)。检查类中是否有id
属性。如果没有,您需要决定是否需要添加这个属性,或者是否在代码中错误地引用了它。 -
修改
Detection2D
类或调用代码:- 如果
Detection2D
类应该包含id
属性,您需要在类定义中添加它。例如:class Detection2D: def __init__(self, ...): self.id = None # 或者其他合适的初始值 # 其他属性...
- 如果不应该有
id
属性,那么您需要在yolo_detect_2d.py
的image_callback
函数中修改引用id
的地方。可能您需要使用一个已经存在的属性,或者完全移除对id
的引用。
- 如果
-
更新和测试:
修改后,重新编译并安装您的ROS2工作区,并再次运行节点以检查问题是否已解决。 -
关于
torch.cuda.amp.autocast
的警告:
虽然这个警告不是导致您当前问题的直接原因,但它表明您的YOLOv5 ROS2包使用了即将废弃的PyTorch API。您应该考虑更新这部分代码,以使用推荐的torch.amp.autocast
代替。 -
检查相机话题:
如果您还没有相机图像被处理,确保您的相机节点正在发布到/image
话题,并且图像格式与YOLOv5 ROS2包所期望的相匹配。您可以使用ros2 topic echo /image
来查看是否有图像数据被发布。 -
虚拟机和ROS2环境:
确保您的虚拟机配置正确,并且ROS2环境已正确设置。有时候,虚拟机的性能或网络配置可能会影响ROS2节点的运行。
通过这些步骤,您应该能够解决当前遇到的问题,并使YOLOv5 ROS2包在您的ROS2 Foxy环境中正常运行。
以上为生成回答,仅供参考~
-
-
@2241773397 foxy版本应该需要切换下分支
-
@小鱼 鱼哥,纯小白,切换分支什么意思
-
@小伊 伊哥,什么叫foxy版本需要切换一下分支
-
在软件开发和版本控制的上下文中,“foxy版本需要切换一下分支”这一表述通常意味着在使用版本控制系统(如Git)管理项目时,当前的工作或代码状态是基于“foxy”分支的,但出于某种需要(如开发新功能、修复bug、合并代码等),需要切换到另一个分支上去。这里,“foxy”很可能指的是项目中的一个特定分支名称,而不是一个通用的版本控制术语。
分支切换的含义
在Git这样的分布式版本控制系统中,分支是用来并行开发不同功能或修复不同问题的一种手段。每个分支都包含了项目的一个独立版本,可以在不影响其他分支的情况下进行更改和提交。切换分支意味着将当前的工作目录从一个分支的代码状态切换到另一个分支的代码状态。
切换分支的原因
- 开发新功能:当需要开发新功能时,可以在新的分支上进行开发,以保持主分支的稳定性。
- 修复bug:如果在主分支上发现了bug,可以创建一个新的分支来修复它,以避免在修复过程中引入新的问题。
- 合并代码:当其他分支上的开发完成后,需要将其合并到主分支上。在合并之前,需要切换到主分支。
切换分支的步骤
在Git中切换分支通常遵循以下步骤:
- 查看当前分支:使用
git branch
命令查看当前所有的分支,并用星号(*)标记当前所在的分支。 - 切换到目标分支:使用
git checkout <branch-name>
命令切换到指定的分支。从Git 2.23版本开始,推荐使用git switch <branch-name>
来切换分支,而git checkout
则用于恢复工作树文件。 - (可选)创建新分支并切换:如果目标分支不存在,可以使用
git checkout -b <new-branch-name>
或git switch -c <new-branch-name>
命令创建新分支并立即切换到该分支。
注意事项
- 在切换分支之前,请确保当前分支上的所有更改都已提交,否则这些未提交的更改可能会被Git自动暂存起来,并在切换回该分支时恢复。
- 如果希望将当前分支的更改带到其他分支,可以使用
git stash
命令将更改暂存起来,然后在目标分支上使用git stash pop
或git stash apply
来恢复这些更改。 - 切换分支时,请确保当前工作目录是干净的,即没有未跟踪的文件或已修改但未提交的更改。可以使用
git status
命令来检查当前工作目录的状态。
综上所述,“foxy版本需要切换一下分支”意味着在版本控制系统中,需要将当前的工作状态从“foxy”分支切换到另一个分支上去,以继续不同的开发任务或解决不同的问题。
以上为生成回答,仅供参考~
-
@2241773397 解决了吗,我也是会出现这个报错
-
-
@1787515053 在 使用小鱼的ROS2 yolov5 功能包时出现错误 中说:
@小鱼 在 使用小鱼的ROS2 yolov5 功能包时出现错误 中说:
foxy版本应该需要切换下分支
@小鱼 是切换代码的github的代码branch的分支吗
-
是的,@小鱼 提到的“切换分支”通常指的是在GitHub等代码托管平台上切换代码的branch(分支)。在使用小鱼的ROS2 yolov5功能包时,如果遇到与ROS2发行版(如foxy)不兼容的问题,可能需要切换到与该发行版相对应的分支。
以下是一些关于如何切换GitHub代码分支的详细步骤:
-
查看当前分支:
- 使用
git branch
命令查看当前存在的分支。当前使用的分支会在列表前面标有*
号。
- 使用
-
切换分支:
- 如果需要切换到已存在的与ROS2 foxy版本兼容的分支,可以使用
git checkout 分支名
命令。例如,如果有一个名为foxy-compatible
的分支,可以运行git checkout foxy-compatible
。 - 如果不确定哪个分支与foxy版本兼容,可以查阅小鱼的ROS2 yolov5功能包的GitHub仓库的文档或发布说明,通常会有相关信息。
- 如果需要切换到已存在的与ROS2 foxy版本兼容的分支,可以使用
-
更新工作目录:
- 切换分支后,Git会自动更新工作目录中的文件,以匹配所选分支的最新代码。
-
编译和运行:
- 在切换到正确的分支后,按照功能包的安装和编译指南进行编译和运行。这通常包括使用
colcon build
命令编译项目,并运行相应的ROS2节点。
- 在切换到正确的分支后,按照功能包的安装和编译指南进行编译和运行。这通常包括使用
-
验证结果:
- 运行节点后,可以通过订阅相关的话题或使用
ros2 topic echo
命令来查看检测结果,以确保功能包正常工作。
- 运行节点后,可以通过订阅相关的话题或使用
请注意,在切换分支之前,最好确保工作目录中的修改已经提交或保存,以避免不必要的代码冲突或丢失。此外,如果在切换分支后遇到任何问题,可以查阅GitHub仓库的文档、发布说明或问题跟踪器以获取帮助。
以上为生成回答,仅供参考~
-
-
运行
ros2 run yolov5_ros2 yolo_detect_2d --ros-args -p device:=cpu -p image_topic:=/image
日志
dhx@dhx:~/yolov5_ws$ ros2 run yolov5_ros2 yolo_detect_2d --ros-args -p device:=cpu -p image_topic:=/image
/opt/ros/foxy/bin/ros2:6: DeprecationWarning: pkg_resources is deprecated as an API. See https://setuptools.pypa.io/en/latest/pkg_resources.html
from pkg_resources import load_entry_point
WARNING ️ Python>=3.10 is required, but Python==3.8.10 is currently installed
[476.7030836014194, 0.0, 400.5, 0.0, 476.7030836014194, 400.5, 0.0, 0.0, 1.0] [0.0, 0.0, 0.0, 0.0, 0.0]
在另一个中断运行
ros2 run image_tools cam2image --ros-args -p width:=640 -p height:=480 -p frequency:=30.0 -p device_id:=-1正常发送
第一个终端就会报错
dhx@dhx:~/yolov5_ws$ ros2 run yolov5_ros2 yolo_detect_2d --ros-args -p device:=cpu -p image_topic:=/image
/opt/ros/foxy/bin/ros2:6: DeprecationWarning: pkg_resources is deprecated as an API. See https://setuptools.pypa.io/en/latest/pkg_resources.html
from pkg_resources import load_entry_point
WARNING ️ Python>=3.10 is required, but Python==3.8.10 is currently installed
[476.7030836014194, 0.0, 400.5, 0.0, 476.7030836014194, 400.5, 0.0, 0.0, 1.0] [0.0, 0.0, 0.0, 0.0, 0.0]
/home/dhx/.local/lib/python3.8/site-packages/yolov5/models/common.py:709: FutureWarning:torch.cuda.amp.autocast(args...)
is deprecated. Please usetorch.amp.autocast('cuda', args...)
instead.
with amp.autocast(autocast):
[INFO] [1731588917.369804689] [yolov5_ros2]: image 1/1: 480x640 1 person
Speed: 1.8ms pre-process, 50.7ms inference, 0.6ms NMS per image at shape (1, 3, 480, 640)
Traceback (most recent call last):
File "/home/dhx/yolov5_ws/install/yolov5_ros2/lib/yolov5_ros2/yolo_detect_2d", line 33, in <module>
sys.exit(load_entry_point('yolov5-ros2==0.0.0', 'console_scripts', 'yolo_detect_2d')())
File "/home/dhx/yolov5_ws/install/yolov5_ros2/lib/python3.8/site-packages/yolov5_ros2/yolo_detect_2d.py", line 163, in main
rclpy.spin(YoloV5Ros2())
File "/opt/ros/foxy/lib/python3.8/site-packages/rclpy/init.py", line 191, in spin
executor.spin_once()
File "/opt/ros/foxy/lib/python3.8/site-packages/rclpy/executors.py", line 719, in spin_once
raise handler.exception()
File "/opt/ros/foxy/lib/python3.8/site-packages/rclpy/task.py", line 239, in call
self._handler.send(None)
File "/opt/ros/foxy/lib/python3.8/site-packages/rclpy/executors.py", line 429, in handler
await call_coroutine(entity, arg)
File "/opt/ros/foxy/lib/python3.8/site-packages/rclpy/executors.py", line 354, in _execute_subscription
await await_or_execute(sub.callback, msg)
File "/opt/ros/foxy/lib/python3.8/site-packages/rclpy/executors.py", line 118, in await_or_execute
return callback(*args)
File "/home/dhx/yolov5_ws/install/yolov5_ros2/lib/python3.8/site-packages/yolov5_ros2/yolo_detect_2d.py", line 109, in image_callback
detection2d.id = name
AttributeError: 'Detection2D' object has no attribute 'id'
dhx@dhx:~/yolov5_ws$ -
@1787515053 在 使用小鱼的ROS2 yolov5 功能包时出现错误 中说:
运行
ros2 run yolov5_ros2 yolo_detect_2d --ros-args -p device:=cpu -p image_topic:=/image
日志
dhx@dhx:~/yolov5_ws$ ros2 run yolov5_ros2 yolo_detect_2d --ros-args -p device:=cpu -p image_topic:=/image
/opt/ros/foxy/bin/ros2:6: DeprecationWarning: pkg_resources is deprecated as an API. See https://setuptools.pypa.io/en/latest/pkg_resources.html
from pkg_resources import load_entry_point
WARNING ️ Python>=3.10 is required, but Python==3.8.10 is currently installed
[476.7030836014194, 0.0, 400.5, 0.0, 476.7030836014194, 400.5, 0.0, 0.0, 1.0] [0.0, 0.0, 0.0, 0.0, 0.0]
在另一个中断运行
ros2 run image_tools cam2image --ros-args -p width:=640 -p height:=480 -p frequency:=30.0 -p device_id:=-1正常发送
第一个终端就会报错
dhx@dhx:~/yolov5_ws$ ros2 run yolov5_ros2 yolo_detect_2d --ros-args -p device:=cpu -p image_topic:=/image
/opt/ros/foxy/bin/ros2:6: DeprecationWarning: pkg_resources is deprecated as an API. See https://setuptools.pypa.io/en/latest/pkg_resources.html
from pkg_resources import load_entry_point
WARNING ️ Python>=3.10 is required, but Python==3.8.10 is currently installed
[476.7030836014194, 0.0, 400.5, 0.0, 476.7030836014194, 400.5, 0.0, 0.0, 1.0] [0.0, 0.0, 0.0, 0.0, 0.0]
/home/dhx/.local/lib/python3.8/site-packages/yolov5/models/common.py:709: FutureWarning:torch.cuda.amp.autocast(args...)
is deprecated. Please usetorch.amp.autocast('cuda', args...)
instead.
with amp.autocast(autocast):
[INFO] [1731588917.369804689] [yolov5_ros2]: image 1/1: 480x640 1 person
Speed: 1.8ms pre-process, 50.7ms inference, 0.6ms NMS per image at shape (1, 3, 480, 640)
Traceback (most recent call last):
File "/home/dhx/yolov5_ws/install/yolov5_ros2/lib/yolov5_ros2/yolo_detect_2d", line 33, in <module>
sys.exit(load_entry_point('yolov5-ros2==0.0.0', 'console_scripts', 'yolo_detect_2d')())
File "/home/dhx/yolov5_ws/install/yolov5_ros2/lib/python3.8/site-packages/yolov5_ros2/yolo_detect_2d.py", line 163, in main
rclpy.spin(YoloV5Ros2())
File "/opt/ros/foxy/lib/python3.8/site-packages/rclpy/init.py", line 191, in spin
executor.spin_once()
File "/opt/ros/foxy/lib/python3.8/site-packages/rclpy/executors.py", line 719, in spin_once
raise handler.exception()
File "/opt/ros/foxy/lib/python3.8/site-packages/rclpy/task.py", line 239, in call
self._handler.send(None)
File "/opt/ros/foxy/lib/python3.8/site-packages/rclpy/executors.py", line 429, in handler
await call_coroutine(entity, arg)
File "/opt/ros/foxy/lib/python3.8/site-packages/rclpy/executors.py", line 354, in _execute_subscription
await await_or_execute(sub.callback, msg)
File "/opt/ros/foxy/lib/python3.8/site-packages/rclpy/executors.py", line 118, in await_or_execute
return callback(*args)
File "/home/dhx/yolov5_ws/install/yolov5_ros2/lib/python3.8/site-packages/yolov5_ros2/yolo_detect_2d.py", line 109, in image_callback
detection2d.id = name
AttributeError: 'Detection2D' object has no attribute 'id'
dhx@dhx:~/yolov5_ws$这个是切换galactic的分支,还是出现同样的报错