控制问题-横向控制
此处提供了一个针对“控制问题-横向控制任务”的Matlab上手示例,示例针对双移线问题采用MPC模型进行控制,最终采用横向平均跟踪误差作为指标进行结果评价。完整项目的下载链接为https://github.com/TOPSlearningcenter/-Demo
以下给出了模型介绍与代码解读。
模型介绍
1. 模型概述:
模型预测控制(MPC, Model Predictive Control)是经典且常见的控制算法,在控制领域应用广泛。MPC通过对被控对象建模,从而能利用控制量预测得到输出结果。通过以控制量为变量,构造控制量和控制误差的目标函数,从而转化成优化问题,进而求解出控制序列。通常求解得到的控制序列只取第一个时刻的值作为本轮优化迭代的结果进行输出,下一个时刻滚动优化,从而避免误差累积提高系统应对动态变化的能力。
MPC控制需要解决的两个核心的问题分别是建模和优化。对于优化问题通常是转换成标准问题利用现有的工具箱进行求解;而建模问题则需要具体问题进行分析。
轨迹跟踪问题接收上游规划决策的轨迹或路径数据,通常为带时间戳的坐标点。输出为车辆方向盘/前轮转角和油门开度。本案例主要解决横向轨迹跟踪制问题,纵向以速度形式直接输出。
2. 文件说明:
- reference.mat 为参考轨迹数据,包含时间戳 t_ref ,x坐标 x_ref ,y坐标 y_ref 三个变量。参考轨迹通常由上游决策规划模块生成。
- Sim_Demo.slx 为Simulink文件,用于图形化编程及仿真运行。主要包括整体控制框架和被控对象模型等。
- MPC_sFunction.m 控制器s函数文件,MPC控制算法代码编写在该文件中。
- evaluator.mlx 后处理部分代码在该文件中,包括轨迹、误差、车辆状态参数曲线的绘制,动画演示。
操作步骤
0. 准备工作:
- 本项目可运行在MATLAB R2022a及以上版本,需安装完整的Simulink工具箱。
1. 运行文件:
- 双击 Sim_Demo.slx 文件,并等待启动Simulink。
- 点击 运行 按钮开始仿真。

- 运行结束后,后在工作目录下会生成 reference_processed.mat 和 Sim_result.mat 两个数据文件。reference_processed.mat 为仿真时控制器为减少重复计算,初始化计算产生的中间数据。Sim_result.mat 为仿真结果数据。
2. 后处理运行结果:
- 仿真结束后,需要对结果进行可视化绘图。双击 evaluator.mlx 。
- 在 实时编辑器 选项卡下,按顺序点击 运行节 ,查看每一节的运行结果。

代码解读
1. 仿真模型:
- 仿真模型主体包括两部分:①被控对象和②控制器。

- 被控对象利用的是Simulink工具箱中的 Vechicle Dynamic Blockset 中的运动学转向系统模型和双轨车身三自由度模型。因为本项目主要关注横向控制,车身三自由度模型中,纵向的车速为直接输入。运动学转向系统模型类型选择为阿克曼转向关系 Ackerman ,参数设置中轮距 Track width, TrckWdth 和轴距 Wheel base, WhlBase 需要和整车模型中的一致,从而保证转向系统和整车匹配。其中轴距为质心到前后轴距离之和:WhlBase = a + b.


- 控制器用s-函数编写,输入车辆当前横摆角和大地坐标系下的xy坐标,具体代码及参数详见后文。
2. MPC控制器:
- MPC控制器写成s-函数的形式
Copy to Clipboard
- t 为时间; x 为迭代的状态变量; u 为系统的输入; sys 为每个函数返回的变量,在不同的模块中返回的值不同;
- mdlInitializeSizes 为初始化函数;
- mdlDerivatives(t,x,u) 为微分迭代函数, sys 在该模块中返回的是状态变量的导数,用以建模微分方程关系;
- mdlOutputs(t,x,u) 输出函数, sys 在该模块中返回的是输出。
3. 后处理程序:
后处理程序需要用于可视化结果包括实际轨迹及误差的计算和绘制,轨迹跟踪效果动画,及车辆状态参
数变化曲线等,具体代码比较简单不在赘述。轨迹控制效果动图如下所示。
