ROS YOLO 视觉
时间: 2025-05-06 10:54:35 浏览: 36
### 如何在ROS中集成YOLO进行视觉处理
#### 工作原理概述
YOLO(You Only Look Once)是一种先进的目标检测算法,能够实现实时的目标定位和分类。通过将其与ROS(Robot Operating System)结合,可以为机器人提供强大的计算机视觉能力[^1]。
#### 安装依赖项
为了成功运行YOLO模型并使其能够在ROS环境中工作,需安装必要的软件包和库。以下是常见的依赖项列表及其安装方法:
- **PyTorch**: PyTorch 是 YOLOv5 的主要支持框架之一。可以通过官方文档中的命令来安装适合系统的版本。
```bash
pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118
```
- **Darknet 或其他推理引擎**: 如果计划使用 Darknet 版本的 YOLO,则需要编译 Darknet 并配置其 ROS 节点。对于更高级的功能,还可以考虑 OpenCV DNN、TensorRT 和 OpenVINO 等工具的支持[^3]。
#### 创建 ROS 包
创建一个新的 ROS 包用于管理 YOLO 推理节点及相关资源文件夹结构如下所示:
```plaintext
my_yolo_package/
├── launch/
│ └── yolo.launch
├── scripts/
│ ├── yolov5_node.py
│ └── utils.py
└── models/
└── best.pt
```
其中 `best.pt` 文件是你训练好的权重参数路径;而 Python 脚本则负责加载网络模型以及订阅图像话题完成预测操作[^2]。
#### 编写 Node 实现逻辑
下面是一个简单的例子展示如何编写一个基本的 ROS node 来执行 YOLO 目标检测任务:
```python
#!/usr/bin/env python3
import rospy
from sensor_msgs.msg import Image
from cv_bridge import CvBridge, CvBridgeError
import torch
import numpy as np
class Yolov5Node(object):
def __init__(self):
self.bridge = CvBridge()
model_path = "/path/to/best.pt"
device = 'cuda' if torch.cuda.is_available() else 'cpu'
# Load pre-trained YOLOv5s model or custom trained one.
self.model = torch.hub.load('ultralytics/yolov5', 'custom', path=model_path)
sub_image_topic_name = '/camera/image_raw'
self.image_subscriber = rospy.Subscriber(sub_image_topic_name,
Image,
self.callback,
queue_size=1)
def callback(self, data):
try:
frame = self.bridge.imgmsg_to_cv2(data, desired_encoding="bgr8")
results = self.model(frame)
detections = results.pandas().xyxy[0]
for _, row in detections.iterrows():
xmin, ymin, xmax, ymax = int(row['xmin']), int(row['ymin']), \
int(row['xmax']), int(row['ymax'])
label = f"{row['name']} {round(float(row['confidence']), 2)}"
color = (np.random.randint(0, 255),
np.random.randint(0, 255),
np.random.randint(0, 255))
cv.rectangle(frame,(xmin,ymin),(xmax,ymax),color=color,thickness=2)
cv.putText(frame,label,(xmin,ymin-10),cv.FONT_HERSHEY_SIMPLEX,.9,color,thickness=2)
except Exception as e:
print(e)
if __name__ == '__main__':
rospy.init_node('yolov5_ros_node')
obj = Yolov5Node()
while not rospy.is_shutdown():
pass
```
此脚本实现了从摄像头获取原始图片数据并通过 YOLO 进行推断的过程,并将结果显示出来。
#### 启动 Launch File
最后定义好启动文件以便于一键部署整个系统流程:
```xml
<launch>
<!-- Start the camera driver -->
<node pkg="usb_cam" type="usb_cam_node" name="usb_cam"/>
<!-- Run our object detection node -->
<node pkg="my_yolo_package" type="yolov5_node.py" name="object_detection"/>
</launch>
```
上述 XML 描述了两个核心组件——USB 摄像头驱动程序和服务端对象探测器之间的连接关系。
阅读全文
相关推荐


















