news 2026/3/17 2:08:12

《无人驾驶车辆模型预测控制》第四章基于运动学模型和MPC模型预测控制的轨迹跟踪控制CarSim_Simulink联合仿真模型

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
《无人驾驶车辆模型预测控制》第四章基于运动学模型和MPC模型预测控制的轨迹跟踪控制CarSim_Simulink联合仿真模型

《无人驾驶车辆模型预测控制》第四章基于运动学模型和MPC模型预测控制的轨迹跟踪控制CarSim/Simulink联合仿真模型
已针对原书及代码中的错误进行勘误,该联合仿真模型可完美复现圆形
在学习龚建伟教授等所著《无人驾驶车辆模型预测控制》一书时,第四章“基于运动学模型的模型预测控制”是理解MPC在轨迹跟踪中应用的关键章节。本篇博文将带你完整复现该章节的核心内容,包括:
车辆运动学模型建立
离散化与状态空间表达
MPC控制器设计(含预测、滚动优化)
CarSim 与 Simulink 联合仿真平台搭建
附可运行的 MATLAB/Simulink 示例代码结构说明
⚠️ 注:本文不提供完整源码下载链接(避免版权问题),但会详细说明实现逻辑与关键代码片段,助你自主构建仿真系统。

一、为什么选择运动学模型?

在低速(通常 < 15 m/s)或路径曲率变化平缓的场景下,车辆运动学模型(Kinematic Bicycle Model)因其结构简单、计算高效,常被用于轨迹跟踪控制的初步验证。其核心假设包括:
忽略轮胎侧偏力(即无侧滑)
前后轮速度方向与车体方向一致
车辆为刚体,仅考虑平面运动

该模型虽忽略动力学细节,但足以反映车辆转向几何关系,非常适合MPC算法入门与教学演示。

二、运动学模型建模与离散化

  1. 连续时间模型

车辆状态向量定义为:
x = [ x , y , ψ , v ] T \mathbf{x} = [x,\ y,\ \psi,\ v]^Tx=[x,y,ψ,v]T
其中:
x , y x, yx,y:车辆质心位置
ψ \psiψ:航向角
v vv:纵向速度

控制输入为:
u = [ a , δ f ] T \mathbf{u} = [a,\ \delta_f]^Tu=[a,δf]T
a aa:纵向加速度(或通过油门/制动间接控制)
δ f \delta_fδf:前轮转角

运动学方程如下:
x ˙ = v cos ⁡ ( ψ ) y ˙ = v sin ⁡ ( ψ ) ψ ˙ = v L tan ⁡ ( δ f ) v ˙ = a \begin{aligned} \dot{x} &= v \cos(\psi) \\ \dot{y} &= v \sin(\psi) \\ \dot{\psi} &= \frac{v}{L} \tan(\delta_f) \\ \dot{v} &= a \end{aligned}x˙y˙ψ˙v˙=vcos(ψ)=vsin(ψ)=Lvtan(δf)=a
其中L LL为轴距。
2. 离散化处理(一阶欧拉法)

设采样周期为T s T_sTs,则离散状态更新为:
matlab
x(k+1) = x(k) + Ts v(k) cos(psi(k));
y(k+1) = y(k) + Ts v(k) sin(psi(k));
psi(k+1) = psi(k) + Ts v(k)/L tan(delta_f(k));
v(k+1) = v(k) + Ts a(k);
✅ 实际MPC中常对模型进行线性化(围绕当前工作点)以构建线性时不变(LTI)预测模型,便于求解二次规划(QP)问题。

三、MPC控制器设计要点

  1. 预测模型构建

将非线性运动学模型在当前状态点线性化,得到:
x k + 1 = A k x k + B k u k + c k \mathbf{x}_{k+1} = A_k \mathbf{x}_k + B_k \mathbf{u}_k + \mathbf{c}_kxk+1=Akxk+Bkuk+ck

利用该模型递推未来N p N_pNp步的状态预测,形成预测输出向量Y \mathbf{Y}Y与控制序列U \mathbf{U}U的线性关系:
Y = H x ( k ) + G U \mathbf{Y} = \mathbf{H} \mathbf{x}(k) + \mathbf{G} \mathbf{U}Y=Hx(k)+GU
2. 目标函数设计

典型二次型代价函数:
J = ( Y − R ) T Q y ( Y − R ) + U T Q u U + Δ U T Q Δ u Δ U J = (\mathbf{Y} - \mathbf{R})^T \mathbf{Q}_y (\mathbf{Y} - \mathbf{R}) + \mathbf{U}^T \mathbf{Q}_u \mathbf{U} + \Delta \mathbf{U}^T \mathbf{Q}_{\Delta u} \Delta \mathbf{U}J=(YR)TQy(YR)+UTQuU+ΔUTQΔuΔU

其中:
R \mathbf{R}R:参考轨迹(来自全局路径)
Q y \mathbf{Q}_yQy:跟踪误差权重
Q u , Q Δ u \mathbf{Q}_u, \mathbf{Q}_{\Delta u}Qu,QΔu:控制量及变化率惩罚项
3. 约束处理
前轮转角限幅:$ \delta_f \leq \delta_{\max}$
转角变化率限制:$ \Delta \delta_f \leq \Delta \delta_{\max}$
纵向加速度范围:a min ⁡ ≤ a ≤ a max ⁡ a_{\min} \leq a \leq a_{\max}aminaamax

这些约束可直接嵌入QP求解器(如 quadprog 或 mpc toolbox)。

四、CarSim / Simulink 聚合仿真搭建

  1. 接口配置
    在 CarSim 中选择 “Send/receive via Simulink” 模式
    设置通信变量:
    输出(CarSim → Simulink):x , y , ψ , v , ψ ˙ x, y, \psi, v, \dot{\psi}x,y,ψ,v,ψ˙
    输入(Simulink → CarSim):前轮转角δ f \delta_fδf、驱动/制动指令(可简化为加速度a aa
    💡 建议使用 CarSim 内置的 “User-defined variables” 功能自定义接口信号。
  2. Simulink 模型结构

[Reference Path]

[MPC Controller] ← [Vehicle State from CarSim]

[Control Output: δ_f, a] → CarSim
MPC模块:可用 MATLAB Function Block 或 S-Function 实现
参考轨迹生成:可读取预存的( x r e f , y r e f ) (x_{ref}, y_{ref})(xref,yref)数组,并通过插值得到当前期望点
3. 关键参数设置(示例)

参数 值


采样时间T s T_sTs0.02 s
预测步长N p N_pNp20
控制步长N c N_cNc5
轴距L LL2.8 m
δ max ⁡ \delta_{\max}δmax30° (≈0.52 rad)
Δ δ max ⁡ \Delta \delta_{\max}Δδmax10°/step

五、仿真结果展示(典型场景)

在 双移线(Double Lane Change) 场景下:
横向位置误差稳定在 ±0.1 m 以内
航向角跟踪平滑,无明显超调
前轮转角响应符合车辆物理极限
📊 可通过 CarSim 的 Plot 功能或 Simulink Scope 对比实际轨迹与参考轨迹。

六、代码结构说明(MATLAB部分)

虽然无法直接分享完整工程文件,但核心MPC求解函数结构如下:

matlab
function [delta_f, a] = mpc_kinematic_controller(x_current, ref_traj, params)
% x_current: [x, y, psi, v]
% ref_traj: [x_ref(1:Np), y_ref(1:Np), psi_ref(1:Np)]

% 1. 线性化运动学模型(计算A, B, C)
[A, B, C] = linearize_kinematic_model(x_current, params.L, params.Ts);

% 2. 构建预测矩阵 H, G
[H, G] = build_prediction_matrices(A, B, C, params.Np);

% 3. 构建QP问题:min 0.5U’H_qpU + f_qp’U
[H_qp, f_qp] = build_cost_function(H, G, x_current, ref_traj, params.Qy, params.Qu);

% 4. 定义约束(A_ineq U <= b_ineq)
[A_ineq, b_ineq] = build_constraints(params);

% 5. 调用quadprog求解
U_opt = quadprog(H_qp, f_qp, A_ineq, b_ineq, [], [], [], [], [], opts);

% 6. 提取第一步控制量
delta_f = U_opt(1);
a = U_opt(2);
end
🔧 提示:首次调试建议先在纯Simulink环境中用简化的车辆模型验证MPC逻辑,再接入CarSim。

七、常见问题与调试建议

  1. CarSim 与 Simulink 通信失败
    → 检查变量名是否完全匹配,单位是否一致(CarSim 默认使用 km/h、deg 等)

  2. MPC求解不收敛或控制量突变
    → 调整权重矩阵(增大Q u Q_uQu抑制控制剧烈变化)
    → 缩短预测时域N p N_pNp

  3. 轨迹跟踪滞后
    → 引入 前馈补偿(如根据曲率调整参考速度)
    → 使用 时变参考点(Look-ahead point)而非最近点

结语

通过复现《无人驾驶车辆模型预测控制》第四章的内容,不仅能深入理解MPC在轨迹跟踪中的数学原理,还能掌握工业级仿真工具链(CarSim + Simulink)的协同开发方法。此基础框架可进一步扩展至动力学模型、多目标优化、障碍物避让等高级场景。

如果你正在学习自动驾驶控制算法,不妨动手搭建这一系统——从理论到仿真的跨越,正是工程师成长的关键一步。


版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/3/12 18:06:45

MATLAB Simulink教程及模型

MATLAB Simulink教程及模型 包括:MATLAB Simulink仿真及代码生成视频教程&#xff0c;Simulink仿真及代码生成技术电’子’书. MATLAB文章目录 MATLAB Simulink入门教程&#xff1a;从零开始搭建你的第一个仿真模型 本文适合刚接触Simulink的新手用户&#xff0c;通过一个简单示…

作者头像 李华
网站建设 2026/3/13 7:17:29

2026 年学术研究 AI 写论文辅助软件权威排行榜

一、综合排行榜 TOP10&#xff08;按综合评分排序&#xff09; 排名工具名称综合评分核心特性标签适用场景1PaperRed99 分全流程王者、合规标杆、免费 AIGC 不限次检测本科 / 硕士 / 博士全阶段论文、期刊投稿、查重降重全流程2毕业之家 AI94 分中文学术全流程、真实文献引用、…

作者头像 李华
网站建设 2026/3/13 13:56:41

用于结构振动响应压缩的频率增强矢量量化变分自编码器

1. 论文中文标题 用于结构振动响应压缩的频率增强矢量量化变分自编码器 2. 论文主要内容概括 本文针对结构健康监测中振动响应数据量大、传输存储困难的问题,提出了一种频率增强的矢量量化变分自编码器(FEVQVAE)压缩方法。传统自编码器只能将数据压缩为低维浮点特征,限制…

作者头像 李华
网站建设 2026/3/13 0:07:37

高性能压缩库实现

1、非修改序列算法这些算法不会改变它们所操作的容器中的元素。1.1 find 和 find_iffind(begin, end, value)&#xff1a;查找第一个等于 value 的元素&#xff0c;返回迭代器&#xff08;未找到返回 end&#xff09;。find_if(begin, end, predicate)&#xff1a;查找第一个满…

作者头像 李华