共计 1972 个字符,预计需要花费 5 分钟才能阅读完成。
1. Apollo 控制模块架构概览
在 Apollo 自动驾驶框架中,控制模块(Control Module)位于规划(Planning)和底盘(Chassis)之间。当规划模块生成期望轨迹后,控制模块负责计算油门、刹车和转向指令,使车辆精准跟踪轨迹。这张简化图展示了数据流向:

graph LR
Planning-->|trajectory|Control
Control-->|control_command|Chassis
Localization-->|vehicle_state|Control
2. 基础控制算法对比
2.1 PID 控制原理
PID(Proportional-Integral-Derivative)通过三项组合计算控制量:
$$u(t) = K_p e(t) + K_i \int_0^t e(\tau)d\tau + K_d \frac{de(t)}{dt}$$
- 比例项(P):快速响应当前误差,但可能引起超调
- 积分项(I):消除稳态误差,但会导致积分饱和
- 微分项(D):预测误差趋势,抑制震荡
2.2 MPC 核心优势
模型预测控制(Model Predictive Control)通过滚动优化解决以下问题:
$$
\begin{aligned}
\min_{u} & \sum_{k=0}^{N-1} (|x_k – x_{ref}|Q^2 + |u_k|_R^2) \
\text{s.t.} & \quad x = f(x_k, u_k) \
& \quad u_{min} \leq u_k \leq u_{max}
\end{aligned}
$$
弯道跟踪对比:
# 模拟数据对比(单位:米)pid_error = [0.12, 0.25, 0.18, 0.30]
mpc_error = [0.08, 0.15, 0.10, 0.12]
3. Apollo 控制算法实战配置
3.1 control_config.pb.txt 关键参数
# PID 参数(横向控制)lateral_control_conf {
pid_conf {
kp: 1.5
ki: 0.3
kd: 0.2
integrator_saturation_level: 0.5 # 抗积分饱和阈值
}
}
# MPC 参数
mpc_controller_conf {
qp_solver_type: OSQP
horizon_length: 10
weight_matrix {
lateral_error: 1.0
heading_error: 0.5
}
}
3.2 C++ PID 实现(带抗饱和)
class PIDController {
public:
double Calculate(double error, double dt) {
integral_ += error * dt;
// 抗积分饱和
integral_ = std::clamp(integral_, -i_max_, i_max_);
double derivative = (error - last_error_) / dt;
last_error_ = error;
return kp_ * error + ki_ * integral_ + kd_ * derivative;
}
private:
double kp_ = 0.0, ki_ = 0.0, kd_ = 0.0;
double integral_ = 0.0, last_error_ = 0.0;
double i_max_ = 1.0; // 积分限幅
};
3.3 MPC 的 OSQP 求解示例
import osqp
import numpy as np
# 构建 QP 问题:H, f, A, l, u
prob = osqp.OSQP()
prob.setup(P=H, q=f, A=A, l=l, u=u, verbose=False)
res = prob.solve()
# 解析最优控制序列
optimal_controls = res.x[:N*control_dim]
4. 实车调试经验
4.1 油门 - 刹车震荡解决方案
- 根本原因:控制器增益过高或延迟补偿不足
-
调试步骤:
-
降低 PID 的微分增益(Kd)
- 增加控制指令平滑滤波(一阶低通)
- 检查底盘响应延迟时间参数
4.2 控制延迟补偿技巧
- 在预测模型中增加延迟项:$$x_{pred} = x + v \cdot \tau_{delay}$$
- 使用高频率定位数据(≥100Hz)
- 前馈补偿转向系统机械延迟
- 通过 ROS bag 回放校准延迟时间
- 采用自适应 Kalman 滤波预测状态
4.3 卡尔曼滤波推荐参数
process_noise:
pos: 0.01 # 位置噪声方差
vel: 0.1 # 速度噪声方差
measurement_noise:
gps: 0.05 # GPS 测量噪声
imu: 0.02 # IMU 偏置噪声
5. 算法性能对比
使用 Apollo 提供的 demo_3.5.bag 测试数据:
| 算法 | 最大横向误差(m) | 平均误差(m) |
|---|---|---|
| PID | 0.32 | 0.18 |
| MPC | 0.15 | 0.08 |
开放性问题:在雨雪天气下,轮胎摩擦系数降低 30% 时,如何调整 MPC 的约束条件以保证稳定性?
(提示:考虑动态更新 QP 问题中的 $u_{max}$ 约束)
正文完
