ubuntu20.04 yolov5 ros
时间: 2025-02-01 09:51:03 浏览: 73
### YOLOv5与ROS集成的目标检测
#### 一、环境准备
为了确保YOLOv5能够在Ubuntu 20.04上顺利运行并与ROS集成,需先完成基础环境搭建。这包括但不限于Python环境以及必要的依赖库安装。
对于Python环境的选择,推荐使用Anaconda来管理不同项目所需的独立环境[^2]。通过Anaconda创建一个新的Python环境用于后续开发工作:
```bash
# 更新apt包索引并安装miniconda
sudo apt update && sudo apt install -y wget
wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh
bash Miniconda3-latest-Linux-x86_64.sh
# 创建新的Conda环境
conda create --name yoloenv python=3.8
source activate yoloenv
```
#### 二、安装ROS Noetic Ninjemys
考虑到兼容性和稳定性,在此建议采用ROS Noetic作为机器人操作系统版本。按照官方指南完成ROS核心组件及其附加工具链的部署之后,还需额外安装一些可能用到的支持软件包,比如`usb_cam`等摄像头接口程序[^4]。
```bash
# 添加ROS源至APT仓库列表中
sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list'
curl -s https://raw.githubusercontent.com/ros/rosdistro/master/ros.asc | sudo apt-key add -
sudo apt-get update
# 安装桌面全版本ROS Noetic
sudo apt-get install ros-noetic-desktop-full
# 初始化rosdep, 安装其他辅助工具
sudo rosdep init
rosdep update
sudo apt install python3-rosinstall python3-rosinstall-generator python3-wstool build-essential
# 设置环境变量
echo "source /opt/ros/noetic/setup.bash" >> ~/.bashrc
source ~/.bashrc
```
#### 三、获取并编译YOLOv5源码
从GitHub克隆官方维护的YOLOv5存储库,并依据具体需求调整参数设置或自定义网络结构。注意要根据实际情况修改路径名以匹配个人文件夹位置。
```bash
git clone https://github.com/ultralytics/yolov5.git ~/catkin_ws/src/
cd ~/catkin_ws/src/yolov5/
# 使用pip命令安装所需Python库
pip install -r requirements.txt
```
#### 四、编写ROS节点实现图像处理流程
为了让YOLOv5能够接收来自传感器的数据输入并通过话题发布识别结果,需要设计专门负责订阅CameraInfo和Image消息类型的ROS节点。下面给出了一段简单的Python脚本模板供参考:
```python
#!/usr/bin/env python3
import rospy
from sensor_msgs.msg import Image as RosImage
from cv_bridge import CvBridge
import torch
import numpy as np
import torchvision.transforms.functional as TF
from PIL import Image
class ObjectDetectorNode(object):
def __init__(self):
self.bridge = CvBridge()
self.model = torch.hub.load('ultralytics/yolov5', 'custom',
path='/path/to/best.pt') # 加载预训练权重
self.pub = rospy.Publisher('/detected_objects', RosImage, queue_size=1)
def callback(self, msg: RosImage):
img_cv = self.bridge.imgmsg_to_cv2(msg, desired_encoding='rgb8')
results = self.model(img_cv)
# 将预测框坐标转换成适合发布的格式...
output_img = ...
ros_msg = self.bridge.cv2_to_imgmsg(output_img, encoding="passthrough")
self.pub.publish(ros_msg)
if __name__ == '__main__':
try:
rospy.init_node('object_detector')
node = ObjectDetectorNode()
sub = rospy.Subscriber("/camera/image_raw", RosImage,
node.callback, queue_size=1, buff_size=2**24)
rospy.spin()
except Exception as e:
print(e)
```
上述代码片段展示了如何利用`cv_bridge`桥接OpenCV图像格式同ROS之间互转的过程;同时调用了PyTorch Hub加载已训练好的YOLOv5模型实例化对象detector,并将其应用于每一帧传入的画面之上进行推理运算得出最终输出。
#### 五、启动整个系统验证效果
当所有准备工作都已完成以后就可以尝试运行完整的流水线了——即开启USB摄像设备采集视频流的同时让之前构建的对象探测器开始监听相应的话题事件。如果一切正常的话应该可以在RViz可视化界面里看到标注有边界框的目标物体。
```bash
# 启动usb_cam节点捕获图像序列
roslaunch usb_cam usb_cam-test.launch
# 执行前面提到过的那个Python脚本
rosrun your_package_name object_detection.py
```
阅读全文
相关推荐

















