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

    检查问题

    已定时 已固定 已锁定 已移动
    机器人学
    代码 检查
    2
    2
    266
    正在加载更多帖子
    • 从旧到新
    • 从新到旧
    • 最多赞同
    回复
    • 在新帖中回复
    登录后回复
    此主题已被删除。只有拥有主题管理权限的用户可以查看。
    • 3
      rrrooosss
      最后由 编辑

      在ROS 2 Humble版本中,使用D455相机与YOLOv5进行视觉识别涉及多个步骤,包括安装依赖、配置相机驱动、编写ROS 2节点以加载YOLOv5模型并进行推理。以下是一个简要的指南,帮助你完成这个任务。

      1. 安装依赖

      确保你的系统已经安装了ROS 2 Humble和必要的Python环境。同时,需要安装Intel RealSense SDK和YOLOv5。

      【bash】

      安装ROS 2 Humble(如果尚未安装)

      sudo apt update
      sudo apt install ros-humble-desktop

      安装Intel RealSense SDK

      sudo apt-key adv --keyserver keys.gnupg.net --recv-key C8B3A55A6F3EFCDE
      sudo add-apt-repository 'deb http://realsense-hw-public.s3.amazonaws.com/Debian/apt-repo bionic main' -u
      sudo apt-get update
      sudo apt-get install librealsense2-utils librealsense2-dev

      安装YOLOv5依赖

      pip install torch torchvision
      git clone https://github.com/ultralytics/yolov5.git
      cd yolov5
      pip install -r requirements.txt

      1. 配置RealSense相机

      确保RealSense相机节点能在ROS 2中运行。你可以使用realsense2_camera包,该包通常包含在ROS 2的RealSense SDK中。

      【bash】

      安装realsense2_camera包(如果尚未安装)

      sudo apt-get install ros-humble-realsense2-camera

      启动RealSense相机节点

      ros2 launch realsense2_camera rs_camera.launch.py

      1. 编写ROS 2节点

      创建一个新的ROS 2包,并编写一个节点来订阅RealSense相机的话题,使用YOLOv5进行对象检测。

      【bash】

      创建新的ROS 2工作空间

      mkdir -p ~/ros2_ws/src
      cd ~/ros2_ws/src
      ros2 pkg create --build-type ament_cmake yolov5_realsense

      编写节点代码(在yolov5_realsense/src目录下创建node.cpp或node.py,这里以Python为例)

      cd yolov5_realsense
      mkdir src
      touch src/yolov5_node.py
      chmod +x src/yolov5_node.py

      yolov5_node.py的示例代码如下:

      【python】
      import rclpy
      from rclpy.node import Node
      import cv2
      import numpy as np
      import rospy
      from sensor_msgs.msg import Image
      from realsense2_camera.msg import Int32MultiArray
      import torch

      YOLOv5模型加载

      model = torch.hub.load('ultralytics/yolov5', 'yolov5s')

      class YOLOv5RealSenseNode(Node):
      def init(self):
      super().init('yolov5_realsense_node')
      self.subscription = self.create_subscription(
      Image,
      '/camera/color/image_raw',
      self.listener_callback,
      10
      )
      self.subscription # 防止未使用警告

      def listener_callback(self, msg):
          try:
              # 将ROS Image消息转换为OpenCV图像
              nparr = np.frombuffer(msg.data, np.uint8)
              image = cv2.imdecode(nparr, cv2.IMREAD_COLOR)
      
              # 使用YOLOv5进行推理
              results = model(image)
      
              # 处理检测结果(此处仅打印结果,实际应用中可以根据需要处理)
              for *xyxy, conf, cls in results.xyxy[0]:
                  print(f'{cls} {conf:.2f} @ {xyxy}')
      
          except Exception as e:
              self.get_logger().error(f'Exception in listener callback: {e}')
      

      def main(args=None):
      rclpy.init(args=args)
      node = YOLOv5RealSenseNode()
      rclpy.spin(node)
      node.destroy_node()
      rclpy.shutdown()

      if name == 'main':
      main()

      1. 配置CMakeLists.txt和package.xml

      确保你的CMakeLists.txt和package.xml文件正确配置以构建Python节点。

      CMakeLists.txt:

      【cmake】
      cmake_minimum_required(VERSION 3.5)
      project(yolov5_realsense)

      默认行为

      if(NOT CMAKE_PREFIX_PATH)
      set(CMAKE_PREFIX_PATH "/opt/ros/humble")
      endif()

      添加ament_cmake

      find_package(ament_cmake REQUIRED)

      添加依赖项

      find_package(rclcpp REQUIRED)
      find_package(sensor_msgs REQUIRED)
      find_package(std_msgs REQUIRED)
      find_package(realsense2_camera REQUIRED)

      包含我们的Python包

      install(PROGRAMS
      src/yolov5_node.py
      DESTINATION lib/${PROJECT_NAME})

      ament_package()

      package.xml:

      【xml】
      <package format="2">
      <name>yolov5_realsense</name>
      <version>0.0.0</version>
      <description>The yolov5_realsense package</description>
      <maintainer email="your_email@todo.todo">your_name</maintainer>
      <license>Apache-2.0</license>

      <buildtool_depend>ament_cmake</buildtool_depend>
      <build_depend>rclcpp</build_depend>
      <build_depend>sensor_msgs</build_depend>
      <build_depend>std_msgs</build_depend>
      <build_depend>realsense2_camera</build_depend>
      <exec_depend>rclcpp</exec_depend>
      <exec_depend>sensor_msgs</exec_depend>
      <exec_depend>std_msgs</exec_depend>
      <exec_depend>realsense2_camera</exec_depend>

      <export>
      <build_type>ament_cmake</build_type>
      </export>
      </package>

      1. 编译和运行

      回到工作空间根目录,编译并运行节点。

      【bash】
      cd ~/ros2_ws
      colcon build --packages-select yolov5_realsense
      source install/setup.bash

      在一个终端中启动RealSense相机节点

      ros2 launch realsense2_camera rs_camera.launch.py

      在另一个终端中运行YOLOv5节点

      ros2 run yolov5_realsense yolov5_node.py

      请注意,上述代码是一个简化的示例,用于说明如何将YOLOv5与RealSense相机集成到ROS 2中。在实际应用中,你可能需要处理更多的细节,例如图像预处理、后处理、参数调优以及错误处理等。
      请检查一下,并且纠错加完善

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

        你的指南提供了一个很好的基础框架,但确实有一些小错误和遗漏需要修正和完善。以下是对你的指南的详细检查和提出的改进:

        安装依赖

        你的安装步骤看起来是正确的,但通常建议安装python3-pip和python3-rosdep(如果尚未安装)来确保Python环境和ROS依赖管理正常工作。

        sudo apt install python3-pip python3-rosdep
        

        另外,确保更新rosdep数据库:

        sudo rosdep init
        rosdep update
        

        配置RealSense相机

        在启动RealSense相机节点时,你可能需要指定一些参数以适应你的相机配置。例如,可以指定相机的序列号或选择特定的分辨率和帧率。

        ros2 launch realsense2_camera rs_camera.launch.py serial_no:=<YOUR_CAMERA_SERIAL>
        

        编写ROS 2节点

        Python代码错误和遗漏

        1. 导入错误:rospy是不必要的,因为它是ROS 1的API。你应该使用rclpy来处理ROS 2消息。
        2. 消息类型错误:你尝试从realsense2_camera.msg导入Int32MultiArray,这通常不是用于图像数据的正确消息类型。你应该只处理Image消息。
        3. Python语法错误:if name == 'main': 应该改为 if __name__ == '__main__':。
        4. 异常处理:你的异常处理很好,但可能还需要更详细的日志记录。

        修正后的Python节点代码示例:

        import rclpy
        from rclpy.node import Node
        import cv2
        import numpy as np
        from sensor_msgs.msg import Image
        import torch
        
        model = torch.hub.load('ultralytics/yolov5', 'yolov5s')
        
        class YOLOv5RealSenseNode(Node):
            def __init__(self):
                super().__init__('yolov5_realsense_node')
                self.subscription = self.create_subscription(
                    Image,
                    '/camera/color/image_raw',
                    self.listener_callback,
                    10
                )
                self.subscription  # 防止未使用警告
        
            def listener_callback(self, msg):
                try:
                    # 将ROS Image消息转换为OpenCV图像
                    nparr = np.frombuffer(msg.data, np.uint8)
                    image = cv2.imdecode(nparr, cv2.IMREAD_COLOR)
        
                    # 使用YOLOv5进行推理
                    results = model(image)
        
                    # 处理检测结果(此处仅打印结果,实际应用中可以根据需要处理)
                    for *xyxy, conf, cls in results.xyxy[0]:
                        self.get_logger().info(f'{int(cls)} {conf:.2f} @ {xyxy}')
        
                except Exception as e:
                    self.get_logger().error(f'Exception in listener callback: {e}')
        
        def main(args=None):
            rclpy.init(args=args)
            node = YOLOv5RealSenseNode()
            rclpy.spin(node)
            node.destroy_node()
            rclpy.shutdown()
        
        if __name__ == '__main__':
            main()
        

        CMakeLists.txt 和 package.xml

        你的CMakeLists.txt和package.xml文件看起来基本正确,但注意以下几点:

        • 在CMakeLists.txt中,你不需要显式安装Python脚本,因为ament_python会自动处理。但是,你的方法也不会导致错误。
        • 确保package.xml中的<maintainer>和<license>标签填写正确。

        编译和运行

        你的编译和运行步骤是正确的,但建议添加一些额外的检查点,比如确保工作空间被正确源化。

        source ~/ros2_ws/install/setup.bash
        

        总结

        以上是对你的指南的详细检查和提出的改进。确保在实际部署前彻底测试每个步骤,特别是相机驱动和YOLOv5模型的集成部分。


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

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

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