2. 自动驾驶系统基础
自动驾驶系统并不是一个“端到端黑箱”,而是由多个功能模块协同构成的实时闭环系统。理解异常检测与紧急接管,必须先看清系统的基本骨架:感知回答“周围有什么”,定位回答“我在哪里”,规划回答“我该怎么走”,控制回答“如何让车按计划走”。异常检测与紧急接管并不属于某一个单独模块,而是横跨全链路的“安全监督层”,在任一环节出现置信度下降、数据冲突或执行偏差时介入,必要时把控制权交还给驾驶员或触发最小风险策略。
一、四大模块的职责与接口
四个模块以固定节拍运行,通常感知与定位在 10~20 Hz,规划在 5~10 Hz,控制在 50~100 Hz。模块之间通过明确的数据契约连接,任何一个接口的字段缺失、时间戳过期或数值越界,都可能成为异常检测的触发点。
| 模块 | 核心输入 | 核心输出 | 典型异常 |
|---|---|---|---|
| 感知 | 图像、点云、雷达回波 | 障碍物列表、车道线、可行驶区域 | 漏检、误检、置信度骤降、传感器遮挡 |
| 定位 | GNSS、IMU、轮速、高精地图 | 位姿、速度、协方差 | 多径、失锁、地图匹配跳变 |
| 规划 | 障碍物、地图、位姿、任务 | 轨迹点、速度曲线、行为决策 | 轨迹不可行、无解、决策超时 |
| 控制 | 目标轨迹、车辆状态 | 转向角、油门、制动指令 | 跟踪误差大、执行器饱和、通信延迟 |
二、异常检测在系统中的位置
异常检测不是单一模块,而是分布在三个层次:模块内自检、跨模块一致性校验、系统级安全监控。模块内自检关注传感器数据是否在物理合理范围内,例如激光雷达点云数量突然归零、摄像头曝光异常;跨模块一致性校验关注感知与定位是否“互相矛盾”,例如感知到车辆在移动,但定位显示自车静止;系统级安全监控则关注整条链路的时延、心跳和资源占用。
三、紧急接管的触发与执行流程
紧急接管是异常检测的下游动作,目标是“在系统无法安全完成驾驶任务时,把风险降到最低”。典型流程如下:
- 异常确认:连续 N 帧检测到同一类异常,或多种异常同时出现,排除瞬时噪声。
- 风险分级:根据异常类型、当前车速、道路环境,判定为提示、降级、靠边停车或立即接管。
- 接管请求:通过声音、视觉、触觉(方向盘振动、座椅振动)向驾驶员发出接管请求,并给出剩余时间。
- 执行接管:若驾驶员未响应,系统执行最小风险策略,如减速、靠边停车、开启双闪。
- 记录与复盘:保存异常前后 30 秒数据,用于后续根因分析和模型迭代。
# 异常检测与接管触发伪代码
for frame in sensor_stream:
perception = perception_module(frame)
localization = localization_module(frame)
planning = planning_module(perception, localization)
if perception.confidence < 0.3 and consecutive_frames > 5:
trigger("PERCEPTION_DEGRADED", level="HIGH")
if localization.covariance > 2.0:
trigger("LOCALIZATION_UNSTABLE", level="HIGH")
if planning.status == "NO_SOLUTION":
trigger("PLANNING_FAILED", level="CRITICAL")
if any_trigger_active():
request_takeover(driver_alert=True, timeout=4.0)
if not driver_responded(timeout=4.0):
execute_minimal_risk_maneuver()
四、典型场景与常见误区
场景一:隧道内 GNSS 失锁。定位协方差迅速增大,感知仍正常。系统应降级为惯性导航 + 地图匹配,同时提示驾驶员准备接管,而不是直接退出自动驾驶。
场景二:大雨导致摄像头遮挡。感知置信度下降,但激光雷达仍可用。系统应切换为多传感器融合的降级模式,并降低最高车速。
场景三:规划模块输出轨迹穿越障碍物。这属于跨模块一致性异常,安全监督层应直接拦截该轨迹,触发紧急接管,而不是等待控制模块执行。
总结来看,感知、定位、规划、控制构成自动驾驶的“执行链”,异常检测与紧急接管构成“安全链”。执行链追求通行效率与舒适性,安全链追求风险最小化。两者在系统架构中并行运行,安全链拥有最高优先级,可以在任意时刻打断执行链,把车辆带入安全状态。理解这一位置关系,是后续学习具体异常检测算法和接管策略设计的基础。