朱曦霖
联系Available for work
← 全部作品

实验室项目 · KIT 认知汽车实验室(KAL)

ROS 2 微型自动驾驶系统

KIT 认知汽车实验室(KAL)团队项目,我主要负责感知

2026.04 — 2026.07

在 KAL 实验车上搭建 ROS 2 自动驾驶全栈:RGB-D 感知 → 超车与锥桶走廊规划 → Pure Pursuit + PID 控制;我主要负责感知,用 400 张实车图片训练的检测器 mAP50 达 97.4%。

ROS 2 功能包
5
检测数据集实车图片(张)
400
检测 mAP50(验证集)
97.4%
检测召回率(验证集)
96.7%
感知单元测试
18

概览

  • 时间与性质: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,速度从来不是瓶颈;真正的问题是深度未对齐和误检,所以在升级方案里,深度对齐和多帧确认与更换检测模型同样关键