1. 自动驾驶横纵向控制方案概述
在自动驾驶车辆控制系统中,横向和纵向控制是最核心的两个组成部分。纵向控制负责车辆的加速和减速(油门和刹车控制),横向控制则负责方向盘转向。我们采用的方案是纵向使用PID控制,横向使用MPC(模型预测控制)控制,基于车辆的二自由度动力学模型进行设计。
这种组合方案在实际工程中非常实用:
- PID控制简单可靠,特别适合纵向控制这种相对线性的控制问题
- MPC能够处理多变量、有约束的控制问题,非常适合车辆转向控制
- 二自由度模型在保证精度的同时计算量适中,适合实时控制
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 纵向PID控制实现细节
2.1 双环PID控制结构
参考百度Apollo的方案,我们采用双环PID控制结构:
- 外环:速度控制环
- 输入:期望速度与实际速度的误差
- 输出:期望加速度
- 内环:加速度控制环
- 输入:期望加速度与实际加速度的误差
- 输出:油门/刹车控制量
这种分层结构的好处是:
- 解耦了速度控制和执行器控制
- 可以分别优化两个环路的参数
- 更符合驾驶员的操纵习惯
2.2 油门刹车一体化设计
一个巧妙的设计是使用同一个PID控制器同时控制油门和刹车:
matlab复制function [throttle, brake] = fcn(target_accel, current_speed)
persistent pid;
if isempty(pid)
pid = pidController('Kp',0.8,'Ki',0.05,'Kd',0.02);
end
accel_error = target_accel - getActualAccel();
control = step(pid, accel_error);
if control > 0
throttle = saturate(control, 0, 1);
brake = 0;
else
throttle = 0;
brake = saturate(-control, 0, 1);
end
end
这种设计的优势:
1.
