第9章:控制算法与执行器协同
章节概览
自动驾驶控制算法是将规划决策转化为车辆实际动作的关键环节。从2016年至今,控制算法经历了从经典控制理论到学习型控制,再到端到端规控一体化的演进过程。本章深入剖析控制算法的技术演进、工程实践以及与执行器的协同优化。
目录
-
经典控制理论在自动驾驶中的应用 - 1.1 PID控制器及其变体 - 1.2 模型预测控制(MPC) - 1.3 线性二次调节器(LQR) - 1.4 经典控制的局限性与改进
-
学习型控制与自适应控制 - 2.1 强化学习控制 - 2.2 模仿学习控制 - 2.3 自适应控制架构 - 2.4 混合控制策略
-
端到端规控一体化架构 - 3.1 规控一体化演进历程 - 3.2 神经网络直接输出控制 - 3.3 可解释性与安全保证 - 3.4 主流方案对比
-
执行器协同与容错控制 - 4.1 线控底盘技术演进 - 4.2 执行器冗余设计 - 4.3 故障检测与容错策略 - 4.4 执行器标定与补偿
-
控制算法的芯片加速与实时性 - 5.1 实时性要求与挑战 - 5.2 控制算法的硬件加速 - 5.3 多核并行与任务调度 - 5.4 延迟补偿与预测控制
1. 经典控制理论在自动驾驶中的应用
1.1 PID控制器及其变体
基础PID控制
PID控制器作为最基础的控制算法,在自动驾驶早期被广泛应用于纵向控制(速度控制)和横向控制(转向控制)。
经典PID控制结构:
┌─────────┐
e(t) ┌────┐ u(t) │ │ y(t)
r(t) ───(+)──────┤PID ├──────────────┤ Vehicle├──────────
↑ └────┘ │ System │ │
│ └─────────┘ │
└───────────────────────────────────────────────┘
反馈回路
PID计算公式:
u(t) = Kp·e(t) + Ki·∫e(τ)dτ + Kd·de(t)/dt
其中:
- Kp: 比例增益 (响应速度)
- Ki: 积分增益 (消除稳态误差)
- Kd: 微分增益 (抑制超调)
自动驾驶中的PID应用演进
| 时期 | 应用场景 | 技术特点 | 代表案例 |
| 时期 | 应用场景 | 技术特点 | 代表案例 |
|---|---|---|---|
| 2016-2017 | 简单ACC | 固定参数PID | 早期ADAS |
| 2018-2019 | 自适应巡航 | 增益调度PID | Tesla AP2.x |
| 2020-2021 | 城市跟车 | 非线性PID | 小鹏NGP |
| 2022-2024 | 辅助控制 | PID+前馈补偿 | 各家NOA |
PID参数整定方法
Ziegler-Nichols方法:
1. 临界增益法:
- 设置Ki=Kd=0,只保留Kp
- 增加Kp直到系统临界振荡
- 记录临界增益Ku和振荡周期Tu
- PID参数: Kp=0.6Ku, Ki=2Kp/Tu, Kd=KpTu/8
2. 阶跃响应法:
- 施加阶跃输入
- 测量延迟时间L和时间常数T
- PID参数: Kp=1.2T/L, Ki=Kp/2L, Kd=0.5KpL
自动驾驶特定优化:
纵向控制PID (速度控制):
- 低速场景 (0-30km/h):
Kp=2.0, Ki=0.5, Kd=0.1
特点: 响应快,允许轻微超调
- 中速场景 (30-80km/h):
Kp=1.5, Ki=0.3, Kd=0.2
特点: 平衡响应和稳定性
- 高速场景 (>80km/h):
Kp=1.0, Ki=0.2, Kd=0.3
特点: 强调稳定性,抑制超调
横向控制PID (转向控制):
- 直道保持:
Kp=0.5, Ki=0.05, Kd=0.8
特点: 高微分增益,快速响应扰动
- 弯道跟踪:
Kp=1.2, Ki=0.1, Kd=0.4
特点: 提高比例增益,改善跟踪性能
抗积分饱和设计
问题描述:
当执行器饱和时,积分项继续累积导致严重超调
解决方案:
1. 积分限幅:
integral = clip(integral, -I_max, I_max)
2. 条件积分:
IF |error| < threshold AND |output| < saturation:
integral += error * dt
3. 反算法(Back-calculation):
e_s = u_saturated - u_desired
integral -= Kb * e_s (Kb为反算增益)
4. 积分分离:
IF |error| > e_threshold:
Ki_effective = 0 # 大误差时禁用积分
ELSE:
Ki_effective = Ki
Stanley控制器与Pure Pursuit
Stanley控制器(斯坦福大学DARPA挑战赛方案):
转向角计算:
δ = ψ + arctan(k·e/v)
其中:
- ψ: 航向误差
- e: 横向位置误差
- v: 车速
- k: 增益参数
参数调节策略:
- k值选择: k ∈ [2.5, 5.0]
- 速度自适应: k = k0 * sqrt(v/v_ref)
- 稳定性条件: k < 2π*L/v (L为轴距)
Pure Pursuit控制器:
目标点
*
/│
/ │
/ │ld (前视距离)
/ │
/α │
*─────┘
车辆位置
转向角: δ = arctan(2L·sin(α)/ld)
L: 轴距
前视距离自适应:
ld = max(ld_min, k_v * v + ld_offset)
其中:
- ld_min: 最小前视距离 (5-10m)
- k_v: 速度系数 (0.3-0.5)
- ld_offset: 基础偏移 (2-5m)
控制器对比与选择:
| 特性 | PID | Stanley | Pure Pursuit | LQR |
| 特性 | PID | Stanley | Pure Pursuit | LQR |
|---|---|---|---|---|
| 计算复杂度 | O(1) | O(1) | O(1) | O(n²) |
| 参数数量 | 3 | 1-2 | 1-2 | n² |
| 低速性能 | 良好 | 优秀 | 一般 | 良好 |
| 高速性能 | 一般 | 良好 | 优秀 | 优秀 |
| 曲率适应 | 差 | 良好 | 优秀 | 良好 |
| 调参难度 | 中等 | 简单 | 简单 | 困难 |
工程实践选择原则:
速度 < 30km/h: Stanley控制器
- 低速下前视会导致响应迟钝
- Stanley的横向误差项更有效
速度 30-80km/h: 混合策略
- 权重融合: δ = w*δ_stanley + (1-w)*δ_pursuit
- w = exp(-v/v_transition)
速度 > 80km/h: Pure Pursuit为主
- 高速需要更大前视距离
- 提前响应保证稳定性
1.2 模型预测控制(MPC)
MPC成为2018年后自动驾驶控制的主流方案,通过预测未来时域内的系统行为来优化控制输入。
MPC问题表述
优化问题:
min J = Σ(k=0 to N-1) [||x(k)-xref(k)||²Q + ||u(k)||²R] + ||x(N)-xref(N)||²P
约束条件:
- 动力学约束: x(k+1) = f(x(k), u(k))
- 状态约束: xmin ≤ x(k) ≤ xmax
- 输入约束: umin ≤ u(k) ≤ umax
- 舒适性约束: |Δu(k)| ≤ Δumax
车辆动力学模型
运动学模型(低速场景):
状态方程:
ẋ = v·cos(ψ)
ẏ = v·sin(ψ)
ψ̇ = v·tan(δ)/L
v̇ = a
状态向量: x = [x, y, ψ, v]ᵀ
控制向量: u = [δ, a]ᵀ
动力学模型(高速场景):
考虑轮胎力的单轨模型:
ẋ = v·cos(ψ+β)
ẏ = v·sin(ψ+β)
ψ̇ = r
v̇ = ax
β̇ = (Fyf·cos(δ-β) + Fyr·cos(β))/m·v - r
ṙ = (lf·Fyf·cos(δ) - lr·Fyr)/Iz
轮胎力: Fy = -Cα·α (线性区域)
MPC实现优化
| 优化方法 | 计算复杂度 | 实时性 | 应用场景 |
| 优化方法 | 计算复杂度 | 实时性 | 应用场景 |
|---|---|---|---|
| QP求解 | O(n³) | 10-50ms | 高速公路 |
| ACADO | O(n²) | 5-20ms | 城市道路 |
| CasADi | O(n²) | 10-30ms | 通用场景 |
| 显式MPC | O(1) | <1ms | 简单场景 |
MPC工程实现细节
求解器选择与配置:
OSQP (Operator Splitting QP):
- 适用: 凸二次规划问题
- 特点: 内存占用小,适合嵌入式
- 配置:
alpha = 1.6 # 松弛参数
rho = 0.1 # 罚参数
eps_abs = 1e-3 # 绝对精度
eps_rel = 1e-3 # 相对精度
max_iter = 200 # 最大迭代
IPOPT (Interior Point OPTimizer):
- 适用: 非线性规划问题
- 特点: 精度高,收敛稳定
- 配置:
tol = 1e-4
max_iter = 100
linear_solver = "ma57" # 或 "mumps"
预测时域选择:
城市场景 (低速复杂):
- 预测时域: N = 20
- 采样时间: dt = 0.1s
- 预测长度: 2.0s
- 权重: Q_pos >> Q_vel (位置精度优先)
高速场景 (高速简单):
- 预测时域: N = 30
- 采样时间: dt = 0.1s
- 预测长度: 3.0s
- 权重: Q_vel >> Q_acc (平滑性优先)
约束处理技术:
软约束实现:
min J = J_original + ρ·||ε||²
s.t. g(x,u) ≤ ε (ε为松弛变量)
ε ≥ 0
优先级约束:
1. 安全约束 (硬约束):
- 碰撞避免
- 道路边界
2. 舒适性约束 (软约束):
- 加速度限制
- Jerk限制
3. 效率约束 (最软):
- 期望速度
- 燃油经济性
热启动策略:
# 使用上一时刻解作为初始猜测
def warm_start(prev_solution, dt):
# 时移上一时刻的解
x_init = shift(prev_solution.x, dt)
u_init = shift(prev_solution.u, dt)
# 补充最后时刻的值
x_init[-1] = extrapolate(x_init[-2:])
u_init[-1] = u_init[-2] # 保持最后控制
return x_init, u_init
# 效果: 迭代次数减少50-70%
1.3 线性二次调节器(LQR)
LQR作为最优控制理论的代表,在横向控制中应用广泛。
LQR问题设计
连续时间LQR:
ẋ = Ax + Bu
J = ∫₀^∞ (xᵀQx + uᵀRu)dt
最优控制律:
u = -Kx, K = R⁻¹BᵀP
Riccati方程:
AᵀP + PA - PBR⁻¹BᵀP + Q = 0
横向控制LQR设计
状态定义:
x = [ey, ėy, eψ, ėψ]ᵀ (横向误差及其导数、航向误差及其导数)
系统矩阵(80km/h设计点):
┌ 0 1 0 0 ┐
A = │ 0 -4 -40 0 │
│ 0 0 0 1 │
└ 0 -0.5 -5 -2 ┘
┌ 0 ┐
B = │ 4 │
│ 0 │
└0.5┘
1.4 经典控制的局限性与改进
局限性分析
-
模型失配问题 - 轮胎特性非线性 - 路面附着系数变化 - 载荷转移影响 - 车辆参数时变(载重、轮胎磨损)
-
参数整定困难 - 多工况适应性差 - 需要大量实车标定 - 稳定性与性能权衡 - 不同车型需重新标定
-
复杂场景处理 - 无法处理非凸约束 - 多目标优化困难 - 计算实时性挑战 - 突发工况响应不足
实际案例分析
Tesla Autopilot演进(2016-2019):
AP1.0 (MobileEye):
- 纯PID控制
- 固定参数
- 问题: 弯道表现差, 雨天不稳定
AP2.0 (早期自研):
- PID+前馈
- 简单增益调度
- 问题: 参数爆炸, 边界工况多
AP2.5 (改进版):
- LQR横向控制
- MPC纵向控制
- 改善: 曲线跟踪, 舒适性提升
小鹏NGP控制器迭代:
版本1.0 (2020):
- Stanley + PID
- 问题: 高速变道抖动
版本2.0 (2021):
- MPC统一框架
- 改进: 变道平滑度提升60%
版本3.0 (2022):
- MPC + 学习补偿
- 效果: 接管率降低40%
工程改进方案
分层控制架构:
┌────────────────────────────────┐
│ 上层: 轨迹规划 │
│ (1-10Hz, 非实时) │
└────────────┬───────────────────┘
│轨迹+速度剖面
┌────────────┴───────────────────┐
│ 中层: MPC轨迹跟踪 │
│ (20-50Hz, 软实时) │
└────────────┬───────────────────┘
│期望转角+加速度
┌────────────┴───────────────────┐
│ 底层: PID执行器控制 │
│ (100-1000Hz, 硬实时) │
└────────────────────────────────┘
层间接口设计:
轨迹消息格式:
message Trajectory {
repeated Point points; // 轨迹点序列
repeated double speeds; // 速度剖面
repeated double curvatures; // 曲率信息
double timestamp; // 时间戳
int32 gear; // 档位(前进/后退)
}
控制指令格式:
message ControlCommand {
double steering_angle; // 方向盘转角
double throttle; // 油门(0-1)
double brake; // 刹车(0-1)
double timestamp;
ControlMode mode; // 控制模式
}
鲁棒性增强技术:
1. 多模型切换:
IF road_condition == WET:
model = wet_road_model
ELIF road_condition == ICY:
model = ice_road_model
ELSE:
model = dry_road_model
2. 参数自适应:
# 基于性能指标在线调整
error_integral = ∫|e(t)|dt
IF error_integral > threshold:
Kp *= 1.1 # 增加响应
update_time = current_time
3. 扰动观测器:
# 估计未建模动态和外部扰动
d̂ = L(y - ŷ) # L为观测器增益
u_robust = u_nominal - d̂
2. 学习型控制与自适应控制
2.1 强化学习控制
强化学习(RL)在自动驾驶控制中的应用从2018年开始逐渐增多,特别是在处理复杂交互场景和长期优化目标方面展现出优势。
RL控制问题建模
MDP定义:
- 状态空间 S: 车辆状态 + 环境状态
- 动作空间 A: 转向角 + 加速度
- 奖励函数 R: 安全性 + 舒适性 + 效率
- 转移概率 P: 车辆动力学 + 环境不确定性
价值函数:
V^π(s) = E[Σ(γ^t·r_t) | s_0=s, π]
策略优化:
π* = argmax_π V^π(s_0)
主要RL算法在控制中的应用
| 算法类型 | 代表算法 | 优势 | 应用场景 | 落地案例 |
| 算法类型 | 代表算法 | 优势 | 应用场景 | 落地案例 |
|---|---|---|---|---|
| Value-based | DQN, Rainbow | 样本效率高 | 离散动作 | 换道决策 |
| Policy Gradient | PPO, TRPO | 连续控制 | 轨迹跟踪 | Waymo控制器 |
| Actor-Critic | SAC, TD3 | 稳定性好 | 复杂场景 | Tesla FSD |
| Model-based | PETS, Dreamer | 数据效率 | 仿真预训练 | 研究阶段 |
实际工程案例:SAC控制器
SAC控制器架构 (Waymo 2021):
观察输入 (dim=128):
┌──────────────────────────────┐
│ • 车辆状态 (12维) │
│ • 轨迹误差 (8维) │
│ • 周围车辆 (5×16维) │
│ • 道路几何 (28维) │
└────────────┬─────────────────┘
│
┌──────┴──────┐
↓ ↓
┌──────────┐ ┌──────────┐
│ Actor │ │ Critic │
│ Network │ │ Network │
└────┬─────┘ └────┬─────┘
│ │
↓ ↓
μ(s), σ(s) Q(s,a)
│
↓
重参数化采样
│
↓
动作输出: [δ, a]
网络架构细节:
class SACController:
def __init__(self):
# Actor网络 (策略网络)
self.actor = nn.Sequential(
nn.Linear(128, 256),
nn.ReLU(),
nn.Linear(256, 256),
nn.ReLU(),
nn.Linear(256, 4) # μ_δ, σ_δ, μ_a, σ_a
)
# Critic网络 (Q函数)
self.critic1 = nn.Sequential(
nn.Linear(128 + 2, 256), # state + action
nn.ReLU(),
nn.Linear(256, 256),
nn.ReLU(),
nn.Linear(256, 1) # Q值
)
# 双Q网络减少过估计
self.critic2 = copy.deepcopy(self.critic1)
# 目标网络 (软更新)
self.target_critic1 = copy.deepcopy(self.critic1)
self.target_critic2 = copy.deepcopy(self.critic2)
训练流程:
1. 数据收集:
- 人类驾驶数据: 100万英里
- 仿真数据: 10亿英里
- 实车测试: 10万英里
2. 离线预训练:
- 行为克隆初始化
- CQL (Conservative Q-Learning)
- 批次大小: 256
- 学习率: 3e-4
3. 在线微调:
- 实车部署
- 增量学习
- 安全约束
奖励函数设计
# 复合奖励函数设计
R_total = w1·R_safety + w2·R_comfort + w3·R_efficiency + w4·R_tracking
其中:
R_safety = -100·collision - 10·exp(-d_min/2) # 碰撞惩罚
R_comfort = -|a_lat|² - |jerk|² # 舒适性
R_efficiency = v_current/v_desired - 0.1·|δ| # 效率
R_tracking = -|e_lat|² - |e_heading|² # 轨迹跟踪
2.2 模仿学习控制
模仿学习通过学习专家驾驶数据来训练控制策略,是目前端到端系统的主要训练方式。
行为克隆(BC)基础
数据收集:
专家演示 D = {(s_t, a_t)}_{t=1}^N
策略学习:
π_θ = argmin_θ E_{(s,a)~D}[||π_θ(s) - a||²]
分布偏移问题:
训练分布: p_data(s)
测试分布: p_π(s)
DAgger解决方案: 在线收集 + 专家标注
条件模仿学习(CIL)
CIL架构 (CARLA 2019基准):
输入层:
┌─────────────┐ ┌──────────┐
│ RGB Image │ │ Command │
│ 384×160×3 │ │ (4-dim) │
└──────┬──────┘ └────┬─────┘
│ │
ResNet-34 Embedding
│ │
└──────┬───────┘
│
Fusion Layer
│
┌─────────┴──────────┐
│ │
Speed Branch Steering Branch
│ │
↓ ↓
速度预测 转向预测
逆强化学习(IRL)
专家奖励函数推断:
给定专家轨迹 τ_E = {s_0, a_0, ..., s_T, a_T}
最大熵IRL:
R_θ = argmax_θ L(θ) = E_τ~π_E[R_θ(τ)] - log Z(θ)
其中 Z(θ) = ∫exp(R_θ(τ))dτ
学习流程:
1. 初始化奖励网络 R_θ
2. 基于R_θ训练策略π
3. 收集轨迹并计算梯度
4. 更新R_θ使专家轨迹概率最大化
5. 重复2-4直到收敛
2.3 自适应控制架构
自适应控制能够实时调整控制参数以适应系统变化,在处理车辆参数变化、路面条件变化等场景中至关重要。
参数辨识方法
递归最小二乘(RLS):
# 轮胎刚度在线估计
y(k) = φᵀ(k)θ + e(k)
参数更新:
θ̂(k) = θ̂(k-1) + K(k)[y(k) - φᵀ(k)θ̂(k-1)]
K(k) = P(k-1)φ(k)/[λ + φᵀ(k)P(k-1)φ(k)]
P(k) = [P(k-1) - K(k)φᵀ(k)P(k-1)]/λ
其中:
- θ: 待估参数 [Cf, Cr]ᵀ (前后轮胎刚度)
- λ: 遗忘因子 (0.95-0.99)
- P: 协方差矩阵
卡尔曼滤波估计:
状态扩增: x_aug = [x; θ]
系统方程: x_aug(k+1) = f(x_aug(k), u(k))
观测方程: y(k) = h(x_aug(k))
自适应MPC实现
华为ADS自适应MPC (2023):
1. 场景识别:
- 道路类型: 高速/城市/乡村
- 天气状况: 晴/雨/雪/雾
- 交通密度: 稀疏/正常/拥堵
2. 模型库:
Models = {
"highway_dry": Model_HD,
"highway_wet": Model_HW,
"urban_normal": Model_UN,
"urban_crowded": Model_UC,
...
}
3. 在线切换:
IF scenario_changed:
model = Models[scenario]
warm_start_solver()
4. 性能监控:
tracking_error = compute_error()
IF tracking_error > threshold:
trigger_model_update()
模型参考自适应控制(MRAC)
MRAC架构:
参考模型
r ────────┬─────────┐ym
│ Gm ├──┐
└─────────┘ │
(-) ← e
┌─────────────────────┬┘
│ │
↓ ┌────────┐ │
r ───┴────────┤ 自适应 │ │
│ 控制器 ├───┼──→ u
└───┬────┘ │
↑ ↓
┌───┴────┐ ┌─┴───┐
│自适应律│ │被控 │
└────────┘ │对象 │
└──┬───┘
↓ y
滑模控制(SMC)
滑模面设计:
s = ce + ė (c > 0)
控制律:
u = u_eq + u_sw
u_eq: 等效控制 (保持在滑模面)
u_sw: 切换控制 (驱动到滑模面)
Lyapunov稳定性:
V = 0.5s²
V̇ = s·ṡ < -η|s| (η > 0)
抖振抑制:
sat(s/φ) 代替 sign(s)
自适应参数整定实例
Tesla Autopilot参数自适应 (2020):
参数集:
┌────────────────────────────────┐
│ 场景1: 高速公路 │
│ Kp=0.8, Ki=0.1, Kd=0.3 │
├────────────────────────────────┤
│ 场景2: 城市道路 │
│ Kp=1.2, Ki=0.2, Kd=0.5 │
├────────────────────────────────┤
│ 场景3: 雨天湿滑 │
│ Kp=0.6, Ki=0.05, Kd=0.2 │
└────────────────────────────────┘
切换逻辑:
IF speed > 80 km/h AND lane_width > 3.5m:
params = highway_params
ELIF urban_area AND traffic_density > 0.7:
params = urban_params
ELIF rain_detected OR friction < 0.5:
params = wet_params
2.4 混合控制策略
结合经典控制和学习控制的优势,形成安全可靠的混合控制架构。
分层混合架构
三层混合控制:
┌─────────────────────────────────┐
│ L3: 学习层 (RL/IL) │
│ - 高层决策 │
│ - 长期优化 │
│ 更新频率: 1-10 Hz │
└────────────┬────────────────────┘
│ 参考轨迹
┌────────────┴────────────────────┐
│ L2: 优化层 (MPC) │
│ - 轨迹跟踪 │
│ - 约束满足 │
│ 更新频率: 20-50 Hz │
└────────────┬────────────────────┘
│ 控制指令
┌────────────┴────────────────────┐
│ L1: 执行层 (PID) │
│ - 执行器控制 │
│ - 快速响应 │
│ 更新频率: 100-1000 Hz │
└─────────────────────────────────┘
残差学习控制
控制输出组合:
u_total = u_base + u_residual
其中:
u_base: MPC/LQR基础控制器输出
u_residual: 神经网络补偿项
训练目标:
min E[||u_expert - (u_base + f_θ(s))||²]
优势:
- 保证基础性能
- 学习复杂补偿
- 可解释性增强
安全过滤器设计
控制屏障函数(CBF):
h(x) ≥ 0 定义安全集
安全约束:
ḣ(x,u) + α(h(x)) ≥ 0
QP安全过滤:
u_safe = argmin ||u - u_learning||²
s.t. ḣ(x,u) + α(h(x)) ≥ 0
u_min ≤ u ≤ u_max
实现流程:
u_learning → CBF过滤器 → u_safe → 执行器
3. 端到端规控一体化架构
3.1 规控一体化演进历程
发展阶段
2016-2018: 模块化时代
┌──────┐ → ┌──────┐ → ┌──────┐ → ┌──────┐
│ 感知 │ │ 预测 │ │ 规划 │ │ 控制 │
└──────┘ └──────┘ └──────┘ └──────┘
问题: 误差累积、接口复杂、优化困难
2019-2021: 部分融合
┌──────┐ → ┌──────────────┐ → ┌──────┐
│ 感知 │ │ 规划+控制 │ │ 执行 │
└──────┘ └──────────────┘ └──────┘
改进: 减少模块间损失、提升协同性
2022-2024: 端到端时代
┌────────────────────────────────────┐
│ 端到端神经网络 │
│ Sensor → Features → Actions │
└────────────────────────────────────┘
优势: 全局优化、数据驱动、简化架构
关键技术驱动因素
| 时期 | 技术突破 | 影响 | 代表成果 |
| 时期 | 技术突破 | 影响 | 代表成果 |
|---|---|---|---|
| 2019 | Transformer | 长程依赖建模 | DETR |
| 2020 | 大规模预训练 | 特征学习 | GPT-3 |
| 2021 | BEV统一表征 | 空间理解 | BEVFormer |
| 2022 | 扩散模型 | 轨迹生成 | Diffusion Policy |
| 2023 | 视觉语言模型 | 场景理解 | GPT-4V |
| 2024 | 世界模型 | 预测能力 | GAIA-1 |
3.2 神经网络直接输出控制
Tesla FSD V12架构 (2023)
网络架构:
输入: 8个相机 (1280×960×3)
↓
BEV Encoder (RegNet + FPN)
↓
时序融合 (4D特征: 200×200×256×T)
↓
Transformer Decoder
↓
输出头:
┌──────────┬──────────┬──────────┐
│ 轨迹头 │ 速度头 │ 控制头 │
│(x,y)序列 │ v profile│ (δ,a)直接│
└──────────┴──────────┴──────────┘
参数规模:
- 总参数: ~500M
- FLOPs: ~200G
- 推理延迟: <100ms@FSD Chip
中国端到端方案对比
| 厂商 | 方案名称 | 架构特点 | 控制输出 | 上车状态 |
| 厂商 | 方案名称 | 架构特点 | 控制输出 | 上车状态 |
|---|---|---|---|---|
| 小鹏 | XNet | BEV+Occ | 轨迹点序列 | 2024 Q1 |
| 理想 | 端到端2.0 | 大模型驱动 | 规划+控制 | 2024 Q2 |
| 华为 | ADS 3.0 | GOD网络 | 直接控制 | 2024 Q3 |
| 毫末 | DriveGPT | Transformer | 轨迹+速度 | 2024 Q4 |
控制输出表示方法
1. 直接控制输出:
output = [δ(t), a(t)] # 转向角、加速度
2. 轨迹点序列:
output = [(x₁,y₁), (x₂,y₂), ..., (xₙ,yₙ)]
后处理: 轨迹→控制器→执行
3. 多模态输出:
output = {
"trajectory": [(x,y,θ,κ,v)...],
"control": [δ, a],
"confidence": σ
}
4. 概率分布输出:
P(a|s) = N(μ(s), Σ(s)) # 高斯分布
或
P(a|s) = GMM(πᵢ, μᵢ, Σᵢ) # 混合高斯
3.3 可解释性与安全保证
可解释性技术
注意力可视化:
┌─────────────────────────────┐
│ Multi-Head Attention │
│ ┌───┬───┬───┬───┐ │
│ │H1 │H2 │H3 │H4 │ │
│ └───┴───┴───┴───┘ │
│ ↓ │
│ Attention Maps │
│ - 空间注意力 │
│ - 时序注意力 │
│ - 目标注意力 │
└─────────────────────────────┘
中间表征解析:
- BEV特征: 占据、可行驶区域
- 意图预测: 其他车辆轨迹
- 决策逻辑: 行为原语激活
安全保证机制
多层安全架构:
L4: 规则后处理
碰撞检测、限速检查
↑
L3: 置信度阈值
不确定性估计、OOD检测
↑
L2: 冗余网络
多模型投票、一致性检查
↑
L1: 底层保护
执行器限幅、紧急制动
形式化验证方法
安全规约:
φ_safety: □(d_min > d_safe) # 始终保持安全距离
φ_comfort: □(|a_lat| < a_max) # 横向加速度约束
φ_rules: □(v < v_limit) # 速度限制
验证方法:
1. 区间分析: 输入扰动→输出界限
2. SMT求解: 反例搜索
3. 抽象解释: 神经网络性质推导
4. 运行时监控: 在线验证
3.4 主流方案对比
技术路线对比
纯端到端 (Tesla FSD V12):
Cameras → Neural Network → Control
优势: 简洁、数据驱动
劣势: 黑盒、调试困难
混合端到端 (小鹏 XNGP):
Cameras → NN → Trajectory → Controller
优势: 可解释、安全保证
劣势: 需要后处理
模块化端到端 (Waymo):
Perception → NN Planner → MPC Controller
优势: 模块可替换、渐进演化
劣势: 接口设计复杂
训练策略对比
| 策略 | 数据需求 | 训练难度 | 泛化能力 | 应用案例 |
| 策略 | 数据需求 | 训练难度 | 泛化能力 | 应用案例 |
|---|---|---|---|---|
| 行为克隆 | 10M+ | 低 | 中 | 早期FSD |
| 离线RL | 100M+ | 中 | 高 | Waymo |
| 在线RL | 持续收集 | 高 | 最高 | 研究阶段 |
| 混合训练 | 50M+ | 中 | 高 | 当前主流 |
评估指标体系
安全性指标:
- 碰撞率: collisions/mile
- 接管率: disengagement/mile
- TTC分布: P(TTC < 2s)
舒适性指标:
- Jerk: RMS(da/dt)
- 横向加速度: max(|a_lat|)
- 轨迹平滑度: ∫|κ'(s)|²ds
效率指标:
- 平均速度比: v_avg/v_limit
- 超车成功率
- 路径长度比: L_actual/L_optimal
一致性指标:
- 控制稳定性: std(δ)
- 人类相似度: KL(P_human||P_model)
4. 执行器协同与容错控制
4.1 线控底盘技术演进
线控技术发展历程
传统机械控制 (Pre-2010):
驾驶员 → 机械连接 → 执行器
- 方向盘机械连接转向机构
- 油门拉线控制节气门
- 刹车液压直接传递
线控过渡期 (2010-2018):
驾驶员 → 电子信号 → 助力系统 → 执行器
- EPS电动助力转向
- 电子油门
- ESC/ABS介入
完全线控 (2019-至今):
控制器 → CAN/FlexRay → 线控执行器
- 线控转向 (Steer-by-Wire)
- 线控制动 (Brake-by-Wire)
- 线控油门 (Throttle-by-Wire)
主流线控底盘方案
| 供应商 | 产品 | 技术特点 | 响应时间 | 应用车型 |
| 供应商 | 产品 | 技术特点 | 响应时间 | 应用车型 |
|---|---|---|---|---|
| Bosch | iBooster | 电机直驱 | <150ms | Tesla, 蔚来 |
| Continental | MK C1 | 集成式制动 | <120ms | 奥迪, 大众 |
| ZF | IBC | 冗余设计 | <100ms | 奔驰, 宝马 |
| 拿森 | NBooster | 国产方案 | <150ms | 比亚迪, 吉利 |
| 舜宇 | SBW | 线控转向 | <50ms | 研发阶段 |
执行器接口协议
CAN总线控制报文 (500kbps):
┌──────────────────────────────────┐
│ ID: 0x180 (转向控制) │
│ DLC: 8 │
│ Data[0-1]: 目标转角 (0.01°) │
│ Data[2-3]: 转角速度 (°/s) │
│ Data[4]: 控制模式 │
│ Data[5]: 优先级 │
│ Data[6-7]: CRC校验 │
└──────────────────────────────────┘
FlexRay协议 (10Mbps, 双通道冗余):
- 确定性通信
- 时间触发
- 故障容错
4.2 执行器冗余设计
冗余架构设计
三重冗余系统:
主控制器
│
┌───────────┼───────────┐
↓ ↓ ↓
主执行器 备份执行器 机械备份
(正常) (降级) (应急)
│ │ │
└─────┬─────┴───────────┘
↓
执行器输出
冗余切换逻辑:
1. 主系统故障检测 (<10ms)
2. 切换到备份系统 (<50ms)
3. 性能降级运行
4. 安全停车程序
执行器故障模式
故障检测与隔离 (FDI):
监控信号:
- 位置反馈: θ_actual vs θ_cmd
- 电流监控: I_motor vs I_expected
- 温度监控: T_motor < T_max
- 通信状态: CAN错误率
故障类型:
┌────────────────────────────────┐
│ Level 1: 性能降级 │
│ - 响应延迟增加 │
│ - 精度下降 │
├────────────────────────────────┤
│ Level 2: 功能受限 │
│ - 转角限制 │
│ - 加速度限制 │
├────────────────────────────────┤
│ Level 3: 完全失效 │
│ - 执行器卡死 │
│ - 通信中断 │
└────────────────────────────────┘
4.3 故障检测与容错策略
实时故障检测算法
# 基于残差的故障检测
r(t) = y(t) - ŷ(t) # 残差计算
故障检测逻辑:
IF |r(t)| > threshold:
fault_counter++
IF fault_counter > N:
trigger_fault_handling()
# 基于机器学习的异常检测
特征向量: x = [δ_cmd, δ_actual, I_motor, ω_motor]
异常分数: score = isolation_forest(x)
IF score > threshold:
anomaly_detected()
容错控制策略
分级容错方案:
Level 0: 正常运行
├─ 全功能
└─ 最优性能
Level 1: 轻微降级
├─ 降低动态性能
├─ 增加安全边界
└─ 维持基本功能
Level 2: 显著降级
├─ 仅保持车道
├─ 降低速度
└─ 寻找安全区域
Level 3: 最小风险机动
├─ 紧急制动
├─ 靠边停车
└─ 危险警告
执行器补偿算法
非线性补偿:
u_compensated = u_desired + f_comp(u_desired, state)
其中补偿项包括:
- 死区补偿: f_dead(u) = sign(u)·max(0, |u|-d)
- 摩擦补偿: f_friction = μ·sign(v)
- 迟滞补偿: Preisach模型
- 饱和补偿: anti-windup
自适应补偿:
θ̂(k+1) = θ̂(k) + γ·e(k)·φ(k)
u_comp = θ̂ᵀφ(x)
4.4 执行器标定与补偿
标定流程
离线标定:
1. 静态特性标定
- 零位标定
- 增益标定
- 死区测量
2. 动态特性标定
- 阶跃响应
- 频率响应
- 相位延迟
3. 非线性特性
- 饱和特性
- 迟滞回线
- 温度特性
在线自标定:
┌─────────────────────────┐
│ 参考输入 → 执行器 → 输出 │
│ ↑ ↓ │
│ 参数估计 ← 误差计算 │
└─────────────────────────┘
查表与插值
2D查表 (速度-转角):
转角指令 (deg)
-30 -15 0 15 30
┌─────────────────────────┐
20 │ 0.9 0.95 1.0 0.95 0.9│
40 │ 0.85 0.9 1.0 0.9 0.85│ 速度
60 │ 0.8 0.85 1.0 0.85 0.8│ (km/h)
80 │ 0.75 0.8 1.0 0.8 0.75│
└─────────────────────────┘
修正系数表
双线性插值:
f(x,y) = f₀₀(1-α)(1-β) + f₁₀α(1-β) +
f₀₁(1-α)β + f₁₁αβ
5. 控制算法的芯片加速与实时性
5.1 实时性要求与挑战
控制系统时延分解
总时延构成:
T_total = T_sense + T_compute + T_comm + T_actuate
其中:
T_sense: 传感器采集 (5-20ms)
T_compute: 算法计算 (10-50ms)
T_comm: 通信传输 (1-5ms)
T_actuate: 执行器响应 (20-100ms)
典型时延要求:
┌─────────────────────────────┐
│ 功能模块 │ 时延要求 │ 频率 │
├─────────────────────────────┤
│ 紧急制动 │ <100ms │ 100Hz│
│ 横向控制 │ <50ms │ 50Hz │
│ 纵向控制 │ <100ms │ 20Hz │
│ 轨迹规划 │ <200ms │ 10Hz │
└─────────────────────────────┘
实时性挑战
计算资源竞争:
CPU/GPU资源分配
↓
┌──────┴──────┐
↓ ↓
感知(60%) 规控(30%) 其他(10%)
│ │
└──────┬──────┘
↓
资源调度器
确定性保证:
- 最坏执行时间(WCET)分析
- 抢占式调度
- 优先级反转预防
- 死锁避免
5.2 控制算法的硬件加速
专用加速器设计
MPC加速器架构:
┌────────────────────────────────┐
│ QP Solver Accelerator │
├────────────────────────────────┤
│ 矩阵运算单元 │ 约束处理单元 │
│ - Cholesky │ - 不等式 │
│ - 矩阵乘法 │ - 边界检查 │
├────────────────────────────────┤
│ 内部存储器 (SRAM) │
│ - H矩阵缓存 │
│ - 约束矩阵缓存 │
└────────────────────────────────┘
加速效果:
- 软件实现: 20-50ms
- FPGA加速: 2-5ms
- ASIC加速: <1ms
GPU并行优化
// CUDA实现的MPC并行计算
__global__ void mpc_prediction_kernel(
float* A, float* B, float* x0,
float* U, float* X, int N, int nx, int nu
) {
int tid = blockIdx.x * blockDim.x + threadIdx.x;
if (tid < N) {
// 并行计算各时间步的状态
matrix_multiply(&X[tid*nx], A, &X[(tid-1)*nx]);
matrix_add(&X[tid*nx], B, &U[tid*nu]);
}
}
优化技术:
- 共享内存优化
- 合并访存
- Warp级别并行
- Tensor Core加速
5.3 多核并行与任务调度
任务分解策略
控制任务DAG图:
传感器数据
↓
┌────┴────┐
↓ ↓
状态估计 环境感知
↓ ↓
└────┬────┘
↓
轨迹规划
↓
┌────┴────┐
↓ ↓
横向控制 纵向控制
↓ ↓
└────┬────┘
↓
执行器指令
并行化机会:
- 数据并行: 多轨迹并行评估
- 任务并行: 横纵向独立计算
- 流水线并行: 多帧流水处理
实时调度算法
RMS (Rate Monotonic Scheduling):
优先级 = 1/周期
任务集:
T1: 控制 (10ms周期, 2ms执行)
T2: 规划 (50ms周期, 15ms执行)
T3: 感知 (30ms周期, 20ms执行)
CPU利用率检查:
U = Σ(Ci/Ti) = 2/10 + 15/50 + 20/30 = 1.17 > 1
结论: 需要多核或优化
EDF (Earliest Deadline First):
动态优先级 = 截止时间
可调度条件: U ≤ 1
5.4 延迟补偿与预测控制
延迟补偿策略
Smith预测器:
┌─────────────┐
r ────┤ C(s) ├──── u
└──────┬──────┘
│
┌──────┴──────┐
│ ↓
y ←───┤ G(s)e^(-τs)│
│ │
└─────────────┘
状态预测补偿:
x̂(t+τ) = Φ(τ)x(t) + ∫₀^τ Φ(τ-σ)Bu(σ)dσ
离散化实现:
x̂(k+d) = A^d·x(k) + Σ(i=0 to d-1) A^i·B·u(k-i)
预测控制优化
多速率控制架构:
高频层 (100Hz):
- 执行器控制
- 安全监控
中频层 (20Hz):
- MPC控制
- 轨迹跟踪
低频层 (5Hz):
- 路径规划
- 行为决策
时序优化:
t₀ t₁ t₂ t₃
感知: ■■■□ □□□□ □□□□ □□□□
规划: □□□□ ■■■■ □□□□ □□□□
控制: □□□□ □□□□ ■■□□ □□□□
执行: □□□□ □□□□ □□□□ ■□□□
性能评估指标
实时性指标:
- 平均延迟: μ_delay
- 延迟抖动: σ_delay
- 最坏延迟: max_delay
- 截止时间违反率: P(t > deadline)
资源利用率:
- CPU占用: %CPU
- 内存带宽: GB/s
- 功耗: Watts
- 温度: °C
控制性能:
- 跟踪误差: RMSE
- 超调量: %OS
- 调节时间: t_settle
- 稳态误差: e_ss
总结
控制算法作为自动驾驶的执行环节,其性能直接影响驾驶安全性和舒适性。从2016年至今的演进历程显示:
-
技术融合趋势:经典控制理论与深度学习方法的结合成为主流,既保证了系统的稳定性和可解释性,又提升了复杂场景的适应能力。
-
端到端崛起:随着神经网络架构和训练方法的进步,端到端规控一体化成为新的技术方向,简化了系统架构,提升了整体优化效果。
-
实时性挑战:控制算法的实时性要求推动了专用硬件加速器的发展,多核并行和异构计算成为标配。
-
安全冗余设计:执行器的冗余设计和容错控制策略确保了系统在故障情况下的安全性,这是自动驾驶走向量产的关键。
-
标准化进程:随着线控底盘技术的成熟和标准化,控制算法与执行器的接口日趋统一,降低了开发和集成成本。
未来,控制算法将继续向着更智能、更安全、更高效的方向发展,特别是在处理极端工况、提升人机共驾体验、优化能耗等方面还有很大的提升空间。