3. 自动驾驶仿真技术栈
自动驾驶仿真不是单一软件,而是一条由多类仿真器、模型库、数据服务和算力平台共同构成的技术栈。理解这条栈的分层关系,比记住某个工具的名字更重要:场景仿真决定“测什么”,传感器仿真决定“看到什么”,车辆动力学仿真决定“车怎么动”,交通流仿真决定“别人怎么动”,云端仿真平台决定“如何大规模并行地跑完并管理结果”。五者缺一不可,且存在明确的数据与控制依赖。
3.1 五层技术栈的职责与依赖关系
从下往上,车辆动力学与传感器模型构成“被控对象与感知输入”的物理基础;场景仿真在其上编排静态地图、动态障碍物与触发条件;交通流仿真为场景注入具有行为合理性的背景车流;云端平台则把上述能力封装为可调度、可复现、可追溯的服务。下图给出五层之间的信号与数据流向。
3.2 各层核心原理与关键参数
场景仿真是栈的“剧本层”。它用 OpenDRIVE 描述道路几何与车道拓扑,用 OpenSCENARIO 描述实体、动作与触发条件。关键能力是参数泛化:把“前车急刹”抽象为初始距离、相对速度、减速度、反应时延等参数,再通过采样生成成千上万个变体。场景库必须版本化,否则回归结果无法追溯。
传感器仿真是栈的“眼睛”。相机仿真关注成像模型、曝光、运动模糊与天气退化;激光雷达仿真关注光束发射、反射率、多回波与雨雾衰减;毫米波关注 RCS 与多径。工程上最容易被低估的是时延与标定误差:仿真若给出零延迟的完美点云,规划算法会过度乐观。
车辆动力学仿真是栈的“身体”。它把控制指令转为真实位姿响应,核心是轮胎模型(如 Pacejka、MF 简化版)、悬架与转向传动、制动压力建立时间。若动力学过于理想,横纵向控制器的超调与迟滞问题会被掩盖。
交通流仿真是栈的“社会背景”。它用跟驰模型(IDM)与换道模型(MOBIL)生成具有统计合理性的背景车流,使被测车辆面对的不是孤立障碍物,而是会博弈、会加塞、会犹豫的真实交通参与者。
云端仿真平台是栈的“工厂”。它负责镜像与版本管理、任务切分、并行调度、失败重试、指标聚合与看板呈现,是仿真从“单机跑通”走向“每日万公里回归”的关键。
3.3 典型配置示例
以下是一段简化的仿真任务配置,体现五层栈如何被一次任务串联起来:
sim_task:
scenario: "cut_in_highway_v3.2"
map: "shanghai_ring_expressway.xodr"
sensor_suite:
camera: {fov: 60, fps: 30, latency_ms: 45}
lidar: {channels: 128, range_m: 200, noise_sigma: 0.02}
radar: {rcs_model: "extended", max_range_m: 180}
dynamics:
tire_model: "pacejka_5_2"
steering_delay_ms: 80
brake_build_up_ms: 150
traffic:
car_following: "IDM"
lane_change: "MOBIL"
background_density: 0.35
cloud:
workers: 64
retry: 2
metrics: ["collision", "min_ttc", "comfort_jerk", "route_completion"]
3.4 五层栈的对比与常见误区
| 层级 | 核心问题 | 关键输入 | 关键输出 | 常见误区 |
|---|---|---|---|---|
| 场景仿真 | 测什么 | 地图、参数空间 | 场景实例 | 只堆场景数量,不做参数泛化 |
| 传感器仿真 | 看到什么 | 真值、材质、天气 | 感知数据流 | 忽略时延与标定误差 |
| 车辆动力学 | 车怎么动 | 控制指令 | 位姿与状态 | 模型过于理想,掩盖控制缺陷 |
| 交通流仿真 | 别人怎么动 | 密度、行为参数 | 背景车轨迹 | 背景车行为僵化,缺乏博弈 |
| 云端平台 | 如何规模化 | 任务、镜像、算力 | 指标与报告 | 只追求跑得快,忽略可复现性 |