RDK X5 使用 YOLO11 实现避障检测
摘要
本项目是一个基于ROS2和YOLO11的实时障碍物检测系统,可作为YOLOv5赛道障碍物检测的YOLOv8,YOLO11改进版,可无缝切换至此系统。系统能够实时检测赛道上的锥桶,二维码,停车标志,为赛车提供环境感知能力,在RDK X5平台上可跑满30FPS。
ROS2通信架构与消息设计
话题订阅与发布
系统采用ROS2的发布-订阅模式进行数据通信,实现了高效的分布式处理架构。主要话题包括:
输入话题:
/hbmem_img
(类型:hbm_img_msgs::msg::HbmMsg1080P
)- 订阅摄像头实时图像数据
- 使用SensorDataQoS服务质量策略
- 支持1080P分辨率的NV12格式图像
输出话题:
/racing_obstacle_detection
(类型:ai_msgs::msg::PerceptionTargets
)- 发布障碍物检测结果
- 包含目标类型、位置、置信度等信息
- 支持多目标同时检测
消息类型定义
系统使用标准化的ROS2消息类型,确保与其他系统的兼容性:
1 |
|
消息流处理流程
系统的消息处理流程采用异步回调机制,确保实时性能:
1 |
|
系统架构设计
系统采用分层架构设计,从底层到顶层依次为硬件加速层、算法处理层、ROS2通信层和应用接口层。硬件加速层利用地平线RDK平台的BPU专用加速器,为YOLO11模型提供高效的推理能力;算法处理层实现图像预处理、模型推理和后处理等核心算法;ROS2通信层负责图像订阅和检测结果发布;应用接口层提供配置管理和系统监控功能。这种分层设计确保了系统的模块化和可维护性,同时通过硬件加速实现了实时性能要求。
1 |
|
图像预处理模块
图像预处理模块是系统的第一个环节,负责将摄像头输入的NV12格式图像转换为YOLO11模型所需的640x640输入格式。该模块实现了Letterbox变换算法,在保持图像原始宽高比的同时,通过缩放和填充将图像调整到目标尺寸。具体实现中,系统分别处理Y平面(亮度)和UV平面(色度),确保色彩信息的正确性。Letterbox变换的核心思想是计算缩放比例,然后在目标图像中心放置缩放后的图像,周围用127(灰度值)进行填充,这样既保持了图像比例,又满足了模型的输入要求。
1 |
|
YOLO11模型推理模块
YOLO11推理模块是整个系统的核心,负责深度学习模型的加载、推理和后处理。该模块支持D-Robotics量化的YOLO11模型,利用地平线RDK平台的BPU硬件加速器实现高效推理。模型加载过程中,系统会验证模型的输入输出规范,确保输入格式为NV12、布局为NCHW、尺寸为640x640x3,输出为6个输出头,分别对应不同尺度的特征图。推理过程中,系统使用BPU专用内存管理函数hbSysAllocCachedMem
分配内存,通过hbDNNInfer
执行异步推理,并通过hbDNNWaitTaskDone
等待推理完成。
1 |
|
1 |
|
多尺度特征图后处理
后处理模块实现了YOLO11的完整推理流程,包括DFL解码、Sigmoid激活、NMS处理和坐标转换。系统处理三个不同尺度的特征图:8x下采样(80x80)、16x下采样(40x40)和32x下采样(20x20),每个尺度都有对应的分类分数和边界框回归输出。DFL解码是YOLO11的核心创新,它将回归值建模为分布,通过指数函数和加权平均计算实际的边界框坐标。系统首先使用单调性筛选,只对置信度超过阈值的检测框进行DFL计算,避免了无用的计算开销。NMS处理去除重叠的检测框,最后通过坐标转换将模型输出坐标映射回原始图像坐标系。
1 |
|
ROS2集成与实时处理
ROS2集成模块负责系统的消息订阅、处理和发布,实现了完整的机器人操作系统集成。该模块订阅/hbmem_img
话题的NV12格式图像数据,通过回调函数进行实时处理。系统采用ROS2的SensorDataQoS服务质量策略,确保图像数据的实时性和可靠性。在图像处理完成后,系统将检测结果封装为ai_msgs::msg::PerceptionTargets
消息类型,发布到/racing_obstacle_detection
话题,供其他控制节点订阅使用。
1 |
|
配置管理与系统参数
配置管理系统采用JSON格式文件进行参数管理,提供了灵活的参数配置能力。系统支持多种配置参数,包括模型文件路径、类别数量、类别名称列表、预处理类型、NMS阈值、置信度阈值等。通过load_config
函数,系统在启动时自动加载配置文件,验证参数的有效性,并将配置信息打印到控制台供调试使用。
1 |
|
系统启动与部署流程
系统启动流程通过ROS2的launch文件进行管理,实现了多节点的协调启动。launch文件定义了障碍物检测节点和websocket节点的启动参数。系统启动后,首先初始化RacingObstacleDetection对象,加载配置文件和模型,然后创建ROS2节点并进入消息循环。
1 |
|
总结
本系统成功实现了基于ROS2和YOLO11的实时障碍物检测功能,相较于YOLOv5,模型效果更好,可以更好的完成地瓜机器人竞赛的任务一、任务三。
- 个人博客:JasperXzy's Blog
- 代码仓库:Github