基于 Jetson 的自动驾驶系统
在 NVIDIA Jetson 上实现感知、决策和控制闭环的嵌入式自动驾驶系统。
项目概述
本项目在 NVIDIA Jetson 平台上实现了一个嵌入式自动驾驶原型系统。系统不是单纯运行一个目标检测模型,而是完整连接了:
摄像头/雷达传感 -> 感知 -> 场景理解 -> 行为决策 -> 转向与速度控制
项目目标是在嵌入式算力约束下,实现一个可以闭环运行的小型自动驾驶系统。系统集成了基于深度学习的目标检测、基于传统视觉的车道线检测、摄像头-毫米波雷达融合、规则式行为决策,以及低延迟控制模块。
这个项目让我第一次比较系统地理解自动驾驶不是孤立的感知问题,而是一个由感知精度、推理延迟、决策稳定性、传感器标定和控制平滑性共同决定的系统问题。
该图概括了项目流程:摄像头输入经过 YOLOv5 目标检测和 OpenCV 车道线检测,有限状态机根据交通灯、障碍物和车道信息生成驾驶行为,Jetson 端输出转向和速度控制命令。
项目动机
自动驾驶经常被介绍为一个感知任务,但真正的系统远不止检测车辆或交通灯。即使检测器能识别出目标,车辆仍需要判断何时减速、何时停车、如何保持车道中心,以及当感知不确定时采取什么保守策略。
本项目主要回答三个问题:
- 如何在嵌入式硬件上部署实时感知系统?
- 如何把感知输出转化成可解释、可调试的驾驶决策?
- 当检测、车道估计和距离测量存在噪声时,如何保持控制稳定?
因此系统采用模块化设计,每个模块都有清晰的输入、输出和失败模式,便于调试和系统集成。
系统架构
系统按照以下流程循环运行:
- 采集 RGB 摄像头图像和雷达测距信息;
- 检测车辆、行人、交通灯和相关道路目标;
- 提取车道线几何,并估计车辆相对车道中心的横向偏差;
- 将雷达返回与视觉检测框进行关联;
- 构建轻量级场景状态;
- 更新有限状态机;
- 输出转向和速度控制命令。
系统在 Jetson 板载端实时运行,并将感知、决策和控制拆成独立模块,便于单独测试和整体联调。
感知模块
YOLOv5 目标检测
目标检测模块使用 YOLOv5 检测自动驾驶相关目标:
- 车辆;
- 行人;
- 交通灯;
- 可用时包括斑马线或交通标志等道路目标。
模型使用亮度变化、尺度变化、视角变化等数据增强方式训练,并通过 TensorRT 在 Jetson GPU 上进行推理优化,以降低延迟、提高帧率。
检测输出包括 bounding box、类别、置信度和交通灯状态,随后被转化为决策模块可用的符号化场景信息。
车道线检测
车道线模块采用传统计算机视觉方法,这使其在嵌入式平台上更轻量、也更容易解释。
主要流程包括:
- 透视变换,近似生成 bird’s-eye view;
- 颜色与梯度过滤;
- Canny 边缘检测;
- Hough 变换提取候选车道线;
- 多项式拟合与时间平滑;
- 估计车道中心。
最终输出是车辆中心与车道中心之间的横向偏差 (e),供转向控制使用。
摄像头-雷达融合
为了提升障碍物定位鲁棒性,系统实现了摄像头和毫米波雷达融合。
两类传感器互补:
- 摄像头提供语义类别和目标边界;
- 雷达提供更可靠的距离测量。
融合步骤包括:
- 雷达坐标系与相机坐标系对齐;
- 将雷达返回投影到图像平面;
- 将雷达点与视觉检测框关联;
- 对障碍物距离进行修正;
- 基于融合距离进行安全区域判断。
这能缓解单目视觉测距不稳定的问题,尤其是在光照变化或目标尺度不明确的情况下。
行为决策
项目的核心系统模块是基于 有限状态机 的行为决策器。它将感知输出转化成稳定、可解释的驾驶行为。
场景状态
规划模块接收的场景状态包括:
- 车道偏差和车道置信度;
- 交通灯状态;
- 障碍物类别和距离;
- 斑马线或行人警告;
- 当前车辆行为状态。
决策规则
规则按照安全优先级组织:
- 红灯 -> 停车;
- 绿灯且安全区域无障碍 -> 通行;
- 障碍物进入预警区域 -> 减速;
- 障碍物进入停止区域 -> 停车;
- 检测到斑马线或行人提示 -> 降速;
- 车道线有效 -> 保持车道中心;
- 车道线置信度低 -> 降速并采用保守转向。
FSM 状态
系统定义了以下状态:
- Lane Following;
- Traffic-Light Stop;
- Obstacle Slowdown;
- Obstacle Stop;
- Crosswalk Slowdown;
- Recovery / Low Confidence。
状态转移由感知结果触发,并加入简单的 hysteresis 逻辑,避免检测置信度在阈值附近波动时导致行为频繁切换。
控制模块
转向控制
系统采用比例控制:
[ \delta = k_p \cdot e ]
其中:
- (e) 是相对车道中心的横向偏差;
- (k_p) 是比例增益;
- (\delta) 是转向命令。
该控制器有意保持简单,便于在嵌入式原型系统中调试和稳定运行。
速度控制
速度由当前行为状态决定:
- 车道保持时使用正常速度;
- 斑马线和预警区域障碍物使用低速;
- 红灯和停止区域障碍物速度为 0;
- 感知置信度低时采用保守速度。
嵌入式优化
为了在 Jetson 上实时运行,系统进行了以下优化:
- 使用 TensorRT 加速 YOLOv5 推理;
- 根据延迟和精度折中选择输入分辨率;
- 将感知和控制拆分为异步循环;
- 优化图像预处理,减少 CPU 开销;
- 使用轻量传统视觉方法完成车道检测;
- 将日志和可视化从实时控制路径中分离。
这些优化使系统在保持可调试性的同时具备闭环测试所需的响应速度。
技术栈
硬件
- NVIDIA Jetson 嵌入式 GPU;
- 单目 RGB 摄像头;
- 毫米波雷达;
- 车辆控制接口。
软件
- Python;
- PyTorch;
- TensorRT;
- OpenCV。
算法
- YOLOv5 目标检测;
- 传统车道线检测;
- 摄像头-雷达关联;
- 规则式规划与有限状态机;
- 比例转向控制。
项目结果
系统实现了一个完整的嵌入式自动驾驶闭环,具备:
- 嵌入式硬件上的实时感知;
- 基于图像几何的车道保持;
- 交通灯和障碍物感知下的行为决策;
- 基于雷达融合的距离感知;
- 可解释的 FSM 行为规划;
- 资源受限条件下的闭环控制。
关键收获
- 从零搭建了完整的 感知-决策-控制系统。
- 理解了嵌入式约束如何影响感知和规划方案选择。
- 实践了深度学习、传统视觉、传感器融合和控制的系统集成。
- 更加明确地认识到自动驾驶是端到端系统工程,而不是单一视觉任务。
这个项目标志着我从通用计算机视觉转向 自动驾驶系统,并进一步影响了我后续在 多智能体感知、语义占用预测和通信高效协同感知 方面的研究兴趣。