wb战队|使用非线性MPC进行路线跟踪例子

wb战队|使用非线性MPC进行路线跟踪例子


针对该案例 , 进行模块的讲解以及加深理解 。
首先是对曲率如何生成进行叙述 。
网页地址:Lane Following Using Nonlinear Model Predictive Control - MATLAB & Simulink - MathWorks 中国
参考的代码是r2021a的版本
如何产生曲率的数据
首先对于matlab中主程序如何生成进行讲解
曲率的主程序是保存:LanefollowingusingNMPCDate.m(低版本是在mpc的程序之中)
1主程序代码讲解
使用非线性模型预测为车道跟踪设置脚本
% 控制示例
%此脚本初始化通道以下示例模型 。 它加载必要的车辆动力学和道路曲率参数 。
%这是一个用于示例目的的帮助程序脚本 , 将来可能会被删除或修改 。
%%车辆动力学和道路曲率的参数
%指定的车辆动力学参数
m = 1575;   % 汽车质量
Iz = 2875;  % 绕Z轴的转动惯量
lf = 1.2;   %汽车质心到前桥的距离
lr = 1.6;   % 汽车质心到后桥的距离
Cf = 19000; % 前轮侧偏刚度 (N/rad)
Cr = 33000; % 后轮侧偏刚度 (N/rad).
tau = 0.2;  % 时间常数
%%
%设置初始速度和驱动程序设置的速度---在simulink模块中
v0 = 15;    % 初始速度
v_set = 20; % 驱动系统设置速度
%%
% 设置控制器采样时间
Ts = 0.1;
%%
% 获取车道曲率信息
% seconds.
【wb战队|使用非线性MPC进行路线跟踪例子】Duration = 15;                              % 仿真持续时间
t = 0:Ts:Duration;                          % 时间矢量(起始值:步长:终值)
rho = LaneFollowingGetCurvature(v_sett);   %包含曲率信息
%rho调用lanefollowinggetcurvature文件(输入变量)
创建
代码保存在:LaneFollowingGetCurvature.m文件中
第二代码程序
function rho = LaneFollowingGetCurvature(Vxtime)
% 从所需的X和Y位置获取LKA的预览曲率
%
% 输入:
%   Vx: 纵向速度
%   time: 时间矢量
%
% 输出:
%   rho: 预览曲率
% Desired X position
Xref = Vx*time;
% Desired Y position
z1 = (2.4/50)*(Xref-27.19)-1.2;
z2 = (2.4/43.9)*(Xref-56.46)-1.2;
Yref = 8.1/2*(1+tanh(z1)) - 11.4/2*(1+tanh(z2));
% 所需曲率
DX = gradient(Xref0.1);
DY = gradient(Yref0.1);
D2Y = gradient(DY0.1);
curvature = DX.*D2Y./(DX.^2+DY.^2).^(3/2);
% 存储曲率 (as input for LKA)
rho.time = time;
rho.signals.values = curvature';
解释上面两个代码含义
注:这两个m文件必须放在同一目录下 , 在第一个m文件里面直接输入第二个m文件的函数名称 。
第一个m文件主函数格式
rho = LaneFollowingGetCurvature(v_sett);
%直接调用形参的名称
第二个m文件被调用函数格式(里面不能有clear、clc操作)
function rho = LaneFollowingGetCurvature(Vxtime)
函数主体
End
%%%%%%第二个定义函数m文件 , 函数的输入是Vx和t , 输出是rho信号(里面包含两组数据 。 一是曲率信号二是时间信号 , 二者是一一对应的关系 。 )
%%%第二个函数是调用 , 返回第一个m文件并输出rho 。 本例中我第一个程序中设置速度和时间 , 是直接给第二个函数作为变量输入 。 意思是此时我Vx=V-set , 时间t = 0:Ts:Duration; 通过第二个m文件函数主体 , 输出到第一个m文件rho数据 。
谢谢观看!希望有志趣相同的学友一起交流 作者:最怕真情喂了狗 https://www.bilibili.com/read/cv17388311?spm_id_from=333.999.0.0 出处:bilibili