3. 端到端驾驶系统架构
端到端驾驶系统并不是把四个模块简单串联,而是要让感知、预测、规划、控制形成一条可验证、可观测、可回放的数据闭环。在仿真验证工程中,架构设计的核心问题不是“模块能不能跑”,而是“模块之间的数据契约是否稳定、时序是否可对齐、异常是否可定位”。如果接口设计模糊,仿真中出现的轨迹抖动、误刹车或漏检,往往无法判断是感知误差、预测偏差,还是规划控制衔接问题。
一、核心原理:四模块的职责边界与端到端集成
感知模块负责从传感器原始数据中提取自车状态、障碍物、车道线、交通标志等环境要素;预测模块基于感知结果推断其他交通参与者的未来运动意图;规划模块结合预测结果、地图和自车任务,生成安全、舒适、合法的行驶轨迹;控制模块将轨迹转化为油门、刹车、转向等执行指令。端到端集成的本质,是让这四个模块在统一的时间基准和坐标系下交换结构化数据,而不是各自维护一套私有格式。
集成方式通常分为三类:松耦合消息总线、共享内存零拷贝和端到端可微网络。仿真验证中最常用的是前两种,因为它们便于注入故障、记录中间结果和复现问题。端到端可微网络虽然训练效率高,但可解释性和故障定位难度大,通常需要额外的中间监督信号。
二、方法流程:从数据契约到闭环验证
端到端集成的第一步是定义数据契约。每个模块的输出必须包含对象标识、时间戳、坐标系、置信度和有效时间窗口。例如感知输出目标列表时,不能只给一个边界框,还要给出速度估计和协方差,否则预测模块无法判断不确定性。第二步是时间对齐。仿真中传感器、感知、预测、规划、控制的运行频率不同,必须通过时间戳插值或缓存机制对齐到同一仿真步。第三步是接口版本管理。当感知输出字段增加或语义变化时,预测和规划必须同步升级,否则会出现“字段存在但含义不同”的隐性故障。
在仿真验证平台中,通常采用中间件(如 ROS 2、Cyber RT 或自研消息总线)承载模块间通信。每个模块以节点形式运行,通过话题或服务交换数据。为了支持故障注入,中间件需要提供消息拦截、延迟注入、丢包模拟和内容篡改能力。这样可以在不修改算法代码的前提下,验证下游模块对上游异常的鲁棒性。
# 典型模块接口配置示例(YAML)
perception:
output_topic: /perception/objects
frame_id: ego_vehicle
fields: [id, type, pose, velocity, covariance, timestamp]
rate_hz: 20
prediction:
input_topic: /perception/objects
output_topic: /prediction/trajectories
horizon_s: 5.0
dt_s: 0.2
rate_hz: 10
planning:
input_topics: [/prediction/trajectories, /localization/pose]
output_topic: /planning/trajectory
rate_hz: 10
control:
input_topic: /planning/trajectory
output_topic: /control/command
rate_hz: 50
三、案例场景:城市路口左转的端到端数据流
以城市无保护左转为例。感知模块检测到对向直行车辆、行人以及左侧车道线;预测模块判断对向车辆可能保持直行,行人可能横穿;规划模块生成“等待—蠕行—加速通过”的行为序列和对应轨迹;控制模块执行转向和纵向加减速。仿真验证时,需要重点检查三个接口:感知给预测的目标速度是否带协方差、预测给规划的轨迹是否包含概率、规划给控制的轨迹点是否包含时间戳和曲率。如果规划输出的轨迹点没有时间戳,控制模块就无法计算前馈加速度,容易导致跟踪滞后。
四、误区与复盘:端到端集成中的常见陷阱
- 误区一:把端到端理解为“没有接口”。 即使使用可微网络,训练和验证阶段仍然需要中间监督和可观测的中间结果,否则无法定位失败原因。
- 误区二:忽略时间戳语义。 感知输出时间戳、传感器采集时间戳和仿真步时间戳如果不区分,回放时会出现“未来数据泄漏”。
- 误区三:接口字段只增不减。 废弃字段长期保留会导致下游模块误用,应通过版本号和弃用标记管理。
- 误区四:仿真中不记录中间结果。 只记录最终控制指令,无法复盘是感知漏检还是规划保守,必须全链路记录。
| 接口 | 关键字段 | 常见问题 | 验证方法 |
|---|---|---|---|
| 感知→预测 | id, type, pose, velocity, covariance, timestamp | 速度估计无协方差,预测无法评估不确定性 | 注入速度噪声,观察预测轨迹分布是否合理 |
| 预测→规划 | trajectory[], probability, intention, horizon | 概率归一化错误,规划误选低概率轨迹 | 构造多意图场景,检查规划选择是否符合预期 |
| 规划→控制 | trajectory points, timestamp, curvature, velocity | 轨迹点无时间戳,控制前馈计算错误 | 对比规划轨迹与控制实际跟踪误差 |
| 控制→车辆 | throttle, brake, steering, timestamp | 指令延迟未建模,仿真与实车差异大 | 注入执行器延迟,观察闭环稳定性 |