鱼香ROS社区
    • 版块
    • 最新
    • 未解决
    • 已解决
    • 群组
    • 注册
    • 登录
    紧急通知:禁止一切关于政治&VPN翻墙等话题,发现相关帖子会立马删除封号
    提问前必看的发帖注意事项: 社区问答规则(小鱼个人)更新 | 高质量帖子发布指南

    使用小鱼的ROS2 yolov5 功能包时出现错误

    已定时 已固定 已锁定 已移动 未解决
    综合问题
    yolov5 ros2 ros2 foxy
    4
    12
    505
    正在加载更多帖子
    • 从旧到新
    • 从新到旧
    • 最多赞同
    回复
    • 在新帖中回复
    登录后回复
    此主题已被删除。只有拥有主题管理权限的用户可以查看。
    • 小伊小
      机器人小伊
      最后由 编辑

      您遇到的问题主要与yolov5_ros2功能包中的Detection2D类定义有关。从错误日志来看,Detection2D对象试图访问一个不存在的属性id,这通常意味着该类中没有定义这个属性,但在您的代码中尝试使用它。

      要解决这个问题,您可以采取以下几个步骤:

      1. 检查Detection2D类的定义:
        打开yolov5_ros2功能包中定义Detection2D类的文件(通常是在某个.py文件中)。检查类中是否有id属性。如果没有,您需要决定是否需要添加这个属性,或者是否在代码中错误地引用了它。

      2. 修改Detection2D类或调用代码:

        • 如果Detection2D类应该包含id属性,您需要在类定义中添加它。例如:
          class Detection2D:
              def __init__(self, ...):
                  self.id = None  # 或者其他合适的初始值
                  # 其他属性...
          
        • 如果不应该有id属性,那么您需要在yolo_detect_2d.py的image_callback函数中修改引用id的地方。可能您需要使用一个已经存在的属性,或者完全移除对id的引用。
      3. 更新和测试:
        修改后,重新编译并安装您的ROS2工作区,并再次运行节点以检查问题是否已解决。

      4. 关于torch.cuda.amp.autocast的警告:
        虽然这个警告不是导致您当前问题的直接原因,但它表明您的YOLOv5 ROS2包使用了即将废弃的PyTorch API。您应该考虑更新这部分代码,以使用推荐的torch.amp.autocast代替。

      5. 检查相机话题:
        如果您还没有相机图像被处理,确保您的相机节点正在发布到/image话题,并且图像格式与YOLOv5 ROS2包所期望的相匹配。您可以使用ros2 topic echo /image来查看是否有图像数据被发布。

      6. 虚拟机和ROS2环境:
        确保您的虚拟机配置正确,并且ROS2环境已正确设置。有时候,虚拟机的性能或网络配置可能会影响ROS2节点的运行。

      通过这些步骤,您应该能够解决当前遇到的问题,并使YOLOv5 ROS2包在您的ROS2 Foxy环境中正常运行。


      以上为生成回答,仅供参考~

      我是小伊,已接入ChatGpt,所有回复,仅供参考~

      2 1 条回复 最后回复 回复 引用 0
      • 小鱼小
        小鱼 技术大佬 @2241773397
        最后由 编辑

        @2241773397 foxy版本应该需要切换下分支

        新书配套视频:https://www.bilibili.com/video/BV1GW42197Ck/

        2 1 条回复 最后回复 回复 引用 0
        • 2
          2241773397 @小鱼
          最后由 编辑

          @小鱼 鱼哥,纯小白,切换分支什么意思🤤

          1 1 条回复 最后回复 回复 引用 0
          • 2
            2241773397 @小伊
            最后由 编辑

            @小伊 伊哥,什么叫foxy版本需要切换一下分支

            1 条回复 最后回复 回复 引用 0
            • 小伊小
              机器人小伊
              最后由 编辑

              在软件开发和版本控制的上下文中,“foxy版本需要切换一下分支”这一表述通常意味着在使用版本控制系统(如Git)管理项目时,当前的工作或代码状态是基于“foxy”分支的,但出于某种需要(如开发新功能、修复bug、合并代码等),需要切换到另一个分支上去。这里,“foxy”很可能指的是项目中的一个特定分支名称,而不是一个通用的版本控制术语。

              分支切换的含义

              在Git这样的分布式版本控制系统中,分支是用来并行开发不同功能或修复不同问题的一种手段。每个分支都包含了项目的一个独立版本,可以在不影响其他分支的情况下进行更改和提交。切换分支意味着将当前的工作目录从一个分支的代码状态切换到另一个分支的代码状态。

              切换分支的原因

              1. 开发新功能:当需要开发新功能时,可以在新的分支上进行开发,以保持主分支的稳定性。
              2. 修复bug:如果在主分支上发现了bug,可以创建一个新的分支来修复它,以避免在修复过程中引入新的问题。
              3. 合并代码:当其他分支上的开发完成后,需要将其合并到主分支上。在合并之前,需要切换到主分支。

              切换分支的步骤

              在Git中切换分支通常遵循以下步骤:

              1. 查看当前分支:使用git branch命令查看当前所有的分支,并用星号(*)标记当前所在的分支。
              2. 切换到目标分支:使用git checkout <branch-name>命令切换到指定的分支。从Git 2.23版本开始,推荐使用git switch <branch-name>来切换分支,而git checkout则用于恢复工作树文件。
              3. (可选)创建新分支并切换:如果目标分支不存在,可以使用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”分支切换到另一个分支上去,以继续不同的开发任务或解决不同的问题。


              以上为生成回答,仅供参考~

              我是小伊,已接入ChatGpt,所有回复,仅供参考~

              1 条回复 最后回复 回复 引用 0
              • 1
                1787515053 @2241773397
                最后由 编辑

                @2241773397 解决了吗,我也是会出现这个报错

                1 条回复 最后回复 回复 引用 0
                • 1
                  1787515053
                  最后由 编辑

                  @小鱼 在 使用小鱼的ROS2 yolov5 功能包时出现错误 中说:

                  foxy版本应该需要切换下分支

                  @小鱼 是切换代码的github的代码branch的分支吗

                  1 1 条回复 最后回复 回复 引用 0
                  • 1
                    1787515053 @1787515053
                    最后由 编辑

                    @1787515053 在 使用小鱼的ROS2 yolov5 功能包时出现错误 中说:

                    @小鱼 在 使用小鱼的ROS2 yolov5 功能包时出现错误 中说:

                    foxy版本应该需要切换下分支

                    @小鱼 是切换代码的github的代码branch的分支吗

                    @小伊

                    1 条回复 最后回复 回复 引用 0
                    • 小伊小
                      机器人小伊
                      最后由 编辑

                      是的,@小鱼 提到的“切换分支”通常指的是在GitHub等代码托管平台上切换代码的branch(分支)。在使用小鱼的ROS2 yolov5功能包时,如果遇到与ROS2发行版(如foxy)不兼容的问题,可能需要切换到与该发行版相对应的分支。

                      以下是一些关于如何切换GitHub代码分支的详细步骤:

                      1. 查看当前分支:

                        • 使用git branch命令查看当前存在的分支。当前使用的分支会在列表前面标有*号。
                      2. 切换分支:

                        • 如果需要切换到已存在的与ROS2 foxy版本兼容的分支,可以使用git checkout 分支名命令。例如,如果有一个名为foxy-compatible的分支,可以运行git checkout foxy-compatible。
                        • 如果不确定哪个分支与foxy版本兼容,可以查阅小鱼的ROS2 yolov5功能包的GitHub仓库的文档或发布说明,通常会有相关信息。
                      3. 更新工作目录:

                        • 切换分支后,Git会自动更新工作目录中的文件,以匹配所选分支的最新代码。
                      4. 编译和运行:

                        • 在切换到正确的分支后,按照功能包的安装和编译指南进行编译和运行。这通常包括使用colcon build命令编译项目,并运行相应的ROS2节点。
                      5. 验证结果:

                        • 运行节点后,可以通过订阅相关的话题或使用ros2 topic echo命令来查看检测结果,以确保功能包正常工作。

                      请注意,在切换分支之前,最好确保工作目录中的修改已经提交或保存,以避免不必要的代码冲突或丢失。此外,如果在切换分支后遇到任何问题,可以查阅GitHub仓库的文档、发布说明或问题跟踪器以获取帮助。


                      以上为生成回答,仅供参考~

                      我是小伊,已接入ChatGpt,所有回复,仅供参考~

                      1 条回复 最后回复 回复 引用 0
                      • 1
                        1787515053
                        最后由 编辑

                        运行
                        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 use torch.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$

                        1 1 条回复 最后回复 回复 引用 0
                        • 1
                          1787515053 @1787515053
                          最后由 编辑

                          @1787515053

                          @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 use torch.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的分支,还是出现同样的报错

                          1 条回复 最后回复 回复 引用 0
                          • 第一个帖子
                            最后一个帖子
                          皖ICP备16016415号-7
                          Powered by NodeBB | 鱼香ROS