无人驾驶车辆模型预测控制_【无人驾驶】车辆运动学模型验证及其线性化、离散化...

一、车辆运动学模型验证

上一篇文章我们得到车辆的运动学模型之后,就可以通过 Carsim/Simulink 联合仿真来验证车辆运动学模型的准确性, Simulink 模型如下图,车辆轴距 L 设置为 2.6m 。

无人驾驶车辆模型预测控制_【无人驾驶】车辆运动学模型验证及其线性化、离散化..._第1张图片

输入量前轮转角delta和车速velocity如下图:

无人驾驶车辆模型预测控制_【无人驾驶】车辆运动学模型验证及其线性化、离散化..._第2张图片

输出结果对比如下图:

无人驾驶车辆模型预测控制_【无人驾驶】车辆运动学模型验证及其线性化、离散化..._第3张图片

可以看出,车辆的运动学模型与实际车辆的运行状态基本相符,证明运动学模型的可靠性。 s-function模块程序如下:
function [sys,x0,str,ts,simStateCompliance] = check(t,x,u,flag)switch flag,  case 0,    [sys,x0,str,ts,simStateCompliance]=mdlInitializeSizes;  case 1,    sys=mdlDerivatives(t,x,u);  case 2,    sys=mdlUpdate(t,x,u);  case 3,    sys=mdlOutputs(t,x,u);  case 4,    sys=mdlGetTimeOfNextVarHit(t,x,u);  case 9,    sys=mdlTerminate(t,x,u);  otherwise    DAStudio.error('Simulink:blocks:unhandledFlag', num2str(flag));endfunction [sys,x0,str,ts,simStateCompliance]=mdlInitializeSizessizes = simsizes;sizes.NumContStates  = 0;sizes.NumDiscStates  = 3;   %输出量X、Y、Yaw为离散量,设置为3sizes.NumOutputs     = 3;   %输出量数量sizes.NumInputs      = 2;   %输入量数量sizes.DirFeedthrough = 1;sizes.NumSampleTimes = 1;sys = simsizes(sizes);x0  = [-450;-450;0];    %初始车辆状态str = [];Ts=0.05;    %采样时间ts  = [Ts 0];simStateCompliance = 'UnknownSimState';function sys=mdlDerivatives(t,x,u)sys = [];function sys=mdlUpdate(t,x,u)Ts=0.05;    %采样时间L=2.6;  %车辆轴距sys = x+[cos(x(3));sin(x(3));tan(u(1))/L]*u(2)*Ts;  %验证车辆运动学模型function sys=mdlOutputs(t,x,u)sys = [x(1);x(2);x(3)];function sys=mdlGetTimeOfNextVarHit(t,x,u)sampleTime = 1; sys = t + sampleTime;function sys=mdlTerminate(t,x,u)sys = [];
有了上述的运动学模型之后,我们就可以通过它对车辆进行控制,但由于之前建立的车辆运动学模型是一个非线性的模型,在满足设定情况下对非线性模型的求解也十分复杂,而且在实际工程中,各种非线性模型千奇百怪,对其的解法也就不唯一。因此,对于非线性模型的线性化是一种通用的模型简化求解方式,套用知乎上看到的一句话“非线性化模型线性化之后,一切跟着套路走”。 二、 泰勒展开式

背景:泰勒展开式可以看作是将一条曲线在某一点处,将其用多项式来表示,只要其一阶导、二阶导···n阶导都和原曲线相同即可。

公式:

e0bd7bde66380aba30abd1aeed96ae5b.png

延伸: 泰勒级数、泰勒公式、泰勒展开式、多元函数泰勒展开式。

三、车辆运动学模型线性化

假设如下一阶线性微分方程

ac7160e51cb3f29d146c46c2d5a2ad86.png

并且在点 1bd4e6bf6851fc46e570ad6fd97f1ed6.png 处满足 81fc688f38ecf92ea4bb0fef27ed1d6e.png ,对该点进行泰勒展开,忽略二阶及以上高阶项,得:

db7efb7d7003045608d39246b5f5dfb1.png

移项可得:

05fb9a2a3554c5590a951a68446a98a0.png

无人驾驶车辆模型预测控制_【无人驾驶】车辆运动学模型验证及其线性化、离散化..._第4张图片

便可得到如下线性方程形式:

274172c91188f1a7cdfa489af5fffd37.png

将车辆运动学模型在 ef39a19649032f6103bf4778f7173e6e.png4ee590d5a2470ba56528804acba60a43.png 进行线性化, c281c6bfead7b04f146b533f3a3fc4ab.png 为 输入变量,得:

无人驾驶车辆模型预测控制_【无人驾驶】车辆运动学模型验证及其线性化、离散化..._第5张图片

其中 c11e7b1e21a980de4335c917f08a65ee.pnge723119a02c468678f7bfaf690ccad14.png6be5b4c1b4dcf781345a8263a46718d1.png 分别对应车辆运动学模型中的 88530692f75228617e6bc16802d23a86.png ,因此求得:

无人驾驶车辆模型预测控制_【无人驾驶】车辆运动学模型验证及其线性化、离散化..._第6张图片

综上,车辆运动学模型的线性方程组可以写为:

无人驾驶车辆模型预测控制_【无人驾驶】车辆运动学模型验证及其线性化、离散化..._第7张图片

四、车辆运动学模型离散化

离散化其实也是对模型的一种简化,虽然运算数据会变得很多,但变为了离散化模型之后对非线性模型的描述也会更加贴合一些。 此处进行近似离散化,将 9249913119eb1f13e8b1d00b7fdd8d2c.png49e424d69bc869353cffa0aab82dfe0c.png 均看做时间的函数,线性方程组可以写作:

5f0194548ca4d65bced770639a4e8861.png

所以:

无人驾驶车辆模型预测控制_【无人驾驶】车辆运动学模型验证及其线性化、离散化..._第8张图片

其中: ece7fa48d50c6dd7c64eefb91fc7a129.png 为时间间隔; I为单位矩阵。

  至此完成对车辆运动学模型的离散化,依据上述公式便可以控制车辆对期望轨迹进行跟踪。

五、延伸

  近似离散化、精确离散化、轨迹跟踪、路径跟踪

你可能感兴趣的:(无人驾驶车辆模型预测控制,无人驾驶车辆模型预测控制代码)