张三:考研复试!@#¥%……&*~
李四:惊雷*&……%¥#@!~
王五:我先静静......
正文
主要内容:利用LQR控制器控制二自由度车辆状态
根据余志生老师《汽车理论》上的两条经典微分方程,可以建立如下的状态空间表达式
设两个状态的期望值分别为
以下是整理过程,难免疏漏和错误...
整理的得到
以上即为误差模型,为什么要转化为这种模型呢(ps:第一次这么敲latex,颇为难受...)
因为LQR的目标函数如下所示:
而状态跟踪,或者参考轨迹跟踪的核心任务是要减少跟踪误差,因此,上式中的状态x需要变成误差。
进一步,求解关于目标函数的黎卡提方程:
得到增益k:
手动求解上述方程较麻烦,利用matlab的lqr函数可以自动获得。
最终得到状态反馈形式的控制率u = -kx。
对于改进后的模型,可以发现,输入由一维变成了五维,而实际的输入应该是第一维,即前轮转角,但是,现在可以这么理解:原来的开环模型,引入参考量后,形成了闭环,可见原则上,需要把参考量作为输入(较土的理解)
接下来利用lqr函数进行增益求取:
>> u = 8.33;%m/s
>> a = 1.2;
>> b = 1.5;
>> kf = -30000;
>> kr = -50000;
>> m = 1500;
>> Iz = 2500;
>> A = [(kf+kr)/m/u (a*kf-b*kr)/m/u-u;(a*kf-b*kr)/m/Iz,(a^2*kf+b^2*kr)/Iz/u];
>> B = [-kf/m;-a*kf/Iz];
>> B = [B A [-1 0;0 -1]];
>> Q = [20,0;0,20];
>> R = diag([1,0.01,0.01,0.01,0.01]) %真实需要约束的控制为前轮转角
>> k = lqr(A,B,[20,0;0,20],diag([1,0.01,0.01,0.01,0.01]))
k =
0.9009 0.5363
-39.7529 15.1953
-14.6615 -40.0694
-6.2051 2.3619
2.3619 -7.0048
于是我们得到实际的状态反馈矩阵k,并利用u = -kx作为车辆状态空间的输入。
仿真结果如下:
由右侧结果可知,控制器基本能够追踪参考量,但是存在稳态误差,通过调整Q矩阵的大小,可以对应减小和增大误差,但是稳态误差始终存在,这是因为控制率u = -kx = -ke等价于引入了一个比例控制(p控制),无法消除稳态误差,详细说明可见如下链接(一位博士大神,他的所有视频均值得一看);同时过大的Q可能会显著增大控制率u,直接增大能耗和实际控制器负担。
【自动控制原理】4_ 比例控制器_燃烧卡路里(2)_Matlab/Simulink_Proportional Control_哔哩哔哩 (゜-゜)つロ 干杯~-bilibiliwww.bilibili.com仿真需要注意的点:
- -k*u 用product模块相乘时,需要改为矩阵乘法模式。
- 为便于观察输出,状态空间需要是多输出,因此模块中D矩阵不能再是0,需要是一个零矩阵。
更多精彩内容,欢迎关注公众号:豪杰仿真科技