概览
- 时间与性质:2026.04 – 2026.07,KIT 测量与控制系统研究所(MRT)的认知汽车实验室(Kognitive Automobile Labor),团队项目
- 我的角色:主要负责感知(数据集、检测模型、RGB-D 三维定位与跟踪),也参与规划、控制和实车联调
- 任务:小车沿赛道右侧车道行驶、圈数未知;识别停放的障碍车并从对向车道超越;驶入锥桶走廊并在末端停车
- 平台:MuSHR 底盘实验车,Intel RealSense RGB-D 前置相机,ROS 2 Jazzy
我做了什么
- 把感知从经典视觉升级为 YOLO + RGB-D:初版用 OpenCV 检测锥桶(HSV 分割)、车道线(Canny / Hough)和障碍车(RANSAC 地面估计 + 离地高度分割)。对 6 段实车录包共 1770 帧离线回放,单帧 8.1–9.6 ms,但暴露出 RGB 与深度未对齐、暖气片和墙面被误检为障碍车、边缘场景车道线有效率低至 1.5% 等问题,于是改为深度对齐 + YOLO 检测 + 多帧确认
- 建数据集、迭代检测模型:整理 400 张实车图片(训练 334 / 验证 66)、1232 个标注框,分 3 类:锥桶、障碍车、交通标志(标志类只用来避免被误认成锥桶)。在旧模型上继续微调,同一验证集上 mAP50 从 67.7% 提升到 97.4%,召回率从 57.4% 提升到 96.7%
- 针对远处小锥桶改进 YOLOv8n:远处锥桶在 640 输入里只有约 4×8 像素。在骨干中深层的 C2f 模块加入 Coordinate Attention,并增加 P2 高分辨率检测头;同配置对照实验中召回率从 91.6% 提升到 99.4%,mAP50-95 从 56.8% 提升到 59.6%,单图推理从 1.5 ms 增加到 2.0 ms。部署权重已换成带 Coordinate Attention 的版本,并写了兼容层,让车上的官方 Ultralytics 直接加载自定义模块
- RGB-D 三维定位与跟踪:把 RealSense 原始深度(848×480)重投影到彩色图(1280×720)平面,在检测框内做前景深度聚类求三维坐标,连续 3 帧确认后才交给规划,过滤单帧误检;感知以 10 Hz 发布 JSON 事件
- 测试:感知链路 18 项单元测试(深度对齐、三维投影、跟踪确认、JSON 接口等),支持录包离线回放调试
- 感知之外:参与规划、控制和实车联调
技术细节
系统结构:5 个 ROS 2 包
| 包 | 语言 | 作用 |
|---|---|---|
kal_perception_yolo |
Python | RGB-D 同步、深度对齐、YOLO 推理、三维后处理、跟踪、JSON 发布 |
trajectory |
Python | 路径选择、行为状态机、超车、锥桶记忆与走廊中心线、轨迹时间戳 |
kal_controller_PID |
C++ | 与 ROS 无关的 Pure Pursuit + PID 控制律 |
kal_controller_ros_tool_PID |
C++ | 控制器的 ROS 2 组件封装:参数、TF、安全检查、锥桶降速 |
autonomous_car_bringup |
Python | 一键启动感知、规划与控制 |
数据流:RGB + 原始深度 + 相机标定 → 深度对齐 → YOLO 二维框 → 三维位置与多帧确认 → JSON 感知事件 → 状态机与轨迹 → Pure Pursuit + PID → Ackermann 转向与速度命令。
规划与控制(团队实现,我参与)
- 路径选择:两条预录闭环路径,按距离投票自动选出车辆当前所在的一条
- 行为状态机:跟随路径 → 超车 → 锥桶走廊 → 停车
- 超车:在障碍车前后各 3.5 m 范围内,沿路径左法向做高斯形横向偏移(最大 0.4 m);距障碍车 1.5 m 内冻结路径,防止盲区里的误检扭曲正在执行的动作;越过障碍车 2 m 后恢复原路径
- 锥桶走廊:先通过独立话题让控制器降到锥桶速度;按跟踪 ID 记忆锥桶,聚类分出左右两排,拟合约束抛物线作为中心线并拼接到主路径;只看到单排锥桶时按路障处理,停在路障前
- 控制:Pure Pursuit 负责主转向,PID 修正横向偏差;轨迹缺失、过旧或 TF 失效时立即发布零速度、零转角
检测模型迭代
| 版本 | 训练数据与方法 | mAP50 | 召回率 |
|---|---|---|---|
| v1 | 早期数据集 | 67.7% | 57.4% |
| v2 | 400 张实车图片,从 v1 继续微调 | 97.4% | 96.7% |
两行在同一验证集(66 张图、213 个框)上评估。
小目标改进的对照实验,同一数据集、同一设置(640 输入、batch 8、100 轮):
| 模型 | 召回率 | mAP50 | mAP50-95 | 单图推理 |
|---|---|---|---|---|
| YOLOv8n | 91.6% | 96.7% | 56.8% | 1.5 ms |
| YOLOv8n + CA + P2 | 99.4% | 99.2% | 59.6% | 2.0 ms |
上表是改进分支上的训练结果;车上部署的是带 Coordinate Attention 的 v3 权重。
局限与复盘
- 控制器没有自动化测试:感知有 18 项、锥桶记忆有 11 项单元测试,但 Pure Pursuit + PID 控制核心和封装层都没有测试,这是工程里最明显的缺口
- 超车策略简单:固定向左超车,不检查左侧是否可通行,也不预测障碍车运动(任务中障碍车是停放的)
- 初版的教训:经典视觉单帧 8.1–9.6 ms,速度从来不是瓶颈;真正的问题是深度未对齐和误检,所以在升级方案里,深度对齐和多帧确认与更换检测模型同样关键