3. 自动驾驶仿真技术栈

自动驾驶仿真不是单一软件,而是一条由多类仿真器、模型库、数据服务和算力平台共同构成的技术栈。理解这条栈的分层关系,比记住某个工具的名字更重要:场景仿真决定“测什么”,传感器仿真决定“看到什么”,车辆动力学仿真决定“车怎么动”,交通流仿真决定“别人怎么动”,云端仿真平台决定“如何大规模并行地跑完并管理结果”。五者缺一不可,且存在明确的数据与控制依赖。

3.1 五层技术栈的职责与依赖关系

从下往上,车辆动力学与传感器模型构成“被控对象与感知输入”的物理基础;场景仿真在其上编排静态地图、动态障碍物与触发条件;交通流仿真为场景注入具有行为合理性的背景车流;云端平台则把上述能力封装为可调度、可复现、可追溯的服务。下图给出五层之间的信号与数据流向。

自动驾驶仿真技术栈:分层职责与数据流 云端仿真平台 任务编排 · 镜像/版本管理 · 并行调度 · 指标聚合 · 回归看板 · 数据回灌 调度层 场景仿真 OpenSCENARIO / OpenDRIVE · 触发条件 · 参数泛化 · 场景库版本 编排层 交通流仿真 IDM / MOBIL · 跟驰换道 背景车行为合理性 传感器仿真 相机 / 激光雷达 / 毫米波 噪声 · 时延 · 标定 · 天气退化 车辆动力学仿真 轮胎模型 · 悬架/转向/制动 · 执行器时延 · 底盘响应 物理层 被测自动驾驶算法(SUT) 感知 → 预测 → 规划 → 控制 下发任务/场景集 背景车流配置 目标物真值 交互行为 感知数据流 车辆状态/位姿 控制指令 日志/指标回传

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 五层栈的对比与常见误区

层级 核心问题 关键输入 关键输出 常见误区
场景仿真 测什么 地图、参数空间 场景实例 只堆场景数量,不做参数泛化
传感器仿真 看到什么 真值、材质、天气 感知数据流 忽略时延与标定误差
车辆动力学 车怎么动 控制指令 位姿与状态 模型过于理想,掩盖控制缺陷
交通流仿真 别人怎么动 密度、行为参数 背景车轨迹 背景车行为僵化,缺乏博弈
云端平台 如何规模化 任务、镜像、算力 指标与报告 只追求跑得快,忽略可复现性
复盘提示:很多团队在仿真中“跑出高分”,实车却频繁接管,根因往往不是算法差,而是技术栈某一层被简化过度——最常见的是传感器零延迟、动力学无迟滞、交通流无博弈。可信度工程的第一步,是逐层核对仿真模型与真实世界的偏差边界,而不是先追求场景数量。
实践建议:建立技术栈的“偏差台账”,为每一层记录已标定的参数、未建模的效应及其影响范围。当仿真结论与实车结果冲突时,按栈自下而上逐层排查,通常能快速定位是感知输入失真、动力学响应失真,还是场景编排本身不合理。