在自动驾驶和车辆控制领域,路径跟踪是一个经典而关键的问题。今天我要分享的是基于运动学自行车模型实现的MPC(模型预测控制)路径跟踪方案,这个方案在双移线、圆形轨迹等多种场景下都表现出了优异的控制效果。实测在60km/h速度下过双移线,方向盘转角不超过30度,横向误差能稳定控制在0.2米以内——这个精度已经达到了量产车的控制要求。
为什么选择运动学模型而不是更精确的动力学模型?在实际工程中,我发现对于低速场景(通常指车速低于80km/h),运动学模型不仅计算量小,而且稳定性更好。特别是在路面附着系数不理想的情况下,运动学模型的鲁棒性优势更加明显。在CarSim仿真中,即使把轮胎摩擦系数降到0.3,这个MPC控制器依然能保持车辆稳定,而传统的PID控制器早就冲出赛道了。
运动学自行车模型的核心在于用简化的几何关系描述车辆运动。我选择的状态量为[x, y, θ, v],分别代表车辆质心的x坐标、y坐标、航向角和速度。控制量则是前轮转角δ和加速度a。
状态更新方程的实现如下:
matlab复制function x_next = kinematic_model(x, u, dt)
beta = atan(0.5*tan(u(1))); % 考虑转向传动比
x_next = x + dt*[x(4)*cos(x(3)+beta);
x(4)*sin(x(3)+beta);
x(4)*sin(beta)/2.7; % 轴距2.7米
u(2)];
end
这里有几个工程细节值得注意:
在模型验证阶段,我发现几个关键点:
提示:如果主要应用场景包含高速工况,建议在运动学模型中加入简化的轮胎侧偏角补偿,可以显著提高高速时的模型精度。
MPC的核心是通过优化未来一段时间内的控制序列来实现良好的跟踪性能。我的参数选择是:
代价函数的设计直接影响控制效果,经过多次调试,我采用的代价函数如下:
matlab复制Q = diag([10, 10, 5, 2]); % 状态权重
R = diag([0.1, 0.05]); % 控制量权重
for k = 1:N
cost = cost + (xk-ref_k)'*Q*(xk-ref_k) + uk'*R*uk;
% 加个转向变化率惩罚
if k>1
cost = cost + 0.2*(uk(1)-prev_steer)^2;
end
prev_steer = uk(1);
end
这个代价函数包含三个关键设计:
将MPC问题转化为标准的二次规划(QP)问题时,需要注意以下几点:
matlab复制Aeq = zeros(4*N, 4*N);
beq = zeros(4*N, 1);
% 构建状态转移约束
for i = 1:N-1
A_block = [-Ak, eye(4)];
Aeq(4*i-3:4*i, 4*i-3:4*i+4) = A_block;
end
这里有几个优化技巧:
实测单步求解时间平均6ms,最差情况12ms,完全可以满足实时性要求。
双移线是检验路径跟踪性能的经典场景。在60km/h速度下,控制器表现出色:

在CarSim中将轮胎摩擦系数降到0.3,模拟湿滑路面条件:
相比之下,传统PID控制器在相同条件下很快就失去了稳定性。
为了将算法部署到实车,我做了以下优化:
优化后,单步计算时间稳定在5ms以内,满足车载ECU的实时性要求。
在调试过程中,我发现几个反直觉的现象:
建议的调参流程:
MATLAB与CarSim联合仿真时有几个坑需要注意:
在实际应用中可能会遇到以下问题:
| 问题现象 | 可能原因 | 解决方案 |
|---|---|---|
| 求解失败 | QP问题不可行 | 检查约束条件是否冲突 |
| 跟踪滞后 | 预测时域太短 | 增加预测步数 |
| 转向抖动 | 控制权重太小 | 增大R矩阵对应元素 |
| 速度不稳 | 加速度惩罚过大 | 减小R(2,2)的值 |
| 高速发散 | 模型不准确 | 加入侧偏角补偿 |
这套基于运动学模型的MPC控制器不仅适用于路径跟踪,经过适当调整还可以用于:
对于有更高要求的场景,可以考虑以下进阶优化:
在实际项目中,我发现运动学MPC最大的优势不是绝对精度,而是出色的鲁棒性和可预测性。它可能不是每个场景下性能最好的控制器,但绝对是工程师最放心的选择。特别是在系统出现异常时,MPC的约束处理能力可以确保车辆行为始终在安全范围内。