CarSim环境下基于MPC的自动驾驶车辆轨迹跟踪控制:原理与实现

1次阅读
没有评论

共计 1418 个字符,预计需要花费 4 分钟才能阅读完成。

image.webp

1. 控制算法对比:为什么选择 MPC?

传统 PID 控制在车辆轨迹跟踪中面临三个主要挑战:

CarSim 环境下基于 MPC 的自动驾驶车辆轨迹跟踪控制:原理与实现

  • 难以处理系统非线性(如轮胎力饱和)
  • 无法显式考虑执行器约束(转向角速率限制)
  • 多变量耦合时参数整定困难

相比而言,MPC 具有以下优势:

  1. 前馈补偿能力 :通过预测模型提前计算控制量
  2. 约束处理 :直接将物理限制写入优化问题
  3. 多目标优化 :通过权重矩阵协调跟踪误差与控制消耗

2. 车辆模型构建关键步骤

2.1 动力学模型线性化

采用自行车模型作为预测模型基础:

\begin{aligned}
\dot{v}_x &= v_y\dot{\psi} + \frac{F_{x}}{m} \\
\dot{v}_y &= -v_x\dot{\psi} + \frac{F_{yf}+F_{yr}}{m} \\
\ddot{\psi} &= \frac{l_fF_{yf}-l_rF_{yr}}{I_z}
\end{aligned}

线性化时注意:

  • 工作点选择:典型车速区间(如 30-80km/h)
  • 轮胎模型简化:小侧偏角下 $F_y ≈ C_α$
  • 离散化方法:优先采用零阶保持器

2.2 CarSim 接口配置

关键配置文件示例(CarSim 的 VS Command):

[SIMULATION]
sample_time = 0.02  ; 必须与 Simulink 步长一致

[VEHICLE]
wheelbase = 2.7    ; 轴距需与模型匹配
max_steer = 0.6    ; 约束条件依据 

3. MPC 核心代码实现

3.1 优化问题构建

function [u, cost] = mpc_controller(x0, ref_traj, model)
    % 构造预测矩阵
    [A, B] = calc_jacobian(x0, model);

    % 二次型权重(需现场调试)Q = diag([10, 5, 2, 1]);  % 状态误差
    R = 0.1;                  % 控制量惩罚

    % 调用 quadprog 求解
    options = optimoptions('quadprog','Display','off');
    u = quadprog(H, f, A_cons, b_cons, [], [], lb, ub, [], options);
end

3.2 实时性优化技巧

  1. 热启动 :复用上一周期解作为初值
  2. 降维处理 :固定部分优化变量
  3. 代码生成 :使用 MATLAB Coder 加速

4. 参数调试避坑指南

4.1 采样周期选择

  • 理论下限:执行器响应延迟的 1 /5(通常≥10ms)
  • 经验公式:$T_s ≈ \frac{t_{min}}{N_p}$($t_{min}$ 为最短动态过程)

4.2 权重矩阵调节

建议调试顺序:

  1. 先调 Q 矩阵确保跟踪收敛
  2. 再调 R 矩阵避免控制量振荡
  3. 最后添加终端权重保证稳定性

5. 典型问题解决方案

执行器饱和处理

% 在约束条件中添加速率限制
delta_ub = min(last_steer + rate_lim*Ts, max_steer);
delta_lb = max(last_steer - rate_lim*Ts, -max_steer);

结果对比
| 指标 | PID | MPC |
|————–|———|———|
| 最大横向误差 | 0.42m | 0.18m |
| 转向波动度 | 15deg/s | 8deg/s |

6. 开放讨论

在实际部署时,我们发现:
– 预测时域 $N_p$=20 时跟踪误差最小
– 但计算延迟会增加 35ms

您会如何权衡精度与延迟? 欢迎在评论区分享:
1. 采用更简化的模型?
2. 减少预测时域?
3. 其他优化方案?

本文代码库已开源:github.com/xxx/mpc_carsim(包含双移线工况测试案例)

正文完
 0
评论(没有评论)