真正接触控制一个多月,现记录自己的误区,以警示自己:
1 . 离散与连续
我经常会拿到连续的系统,用离散的方式去控制,然后反复找原因,还是找不到。要记住:离散和连续要分开!!!,网上的例子大都是连续的!!!
重复一下之前的笔记:
装载系统:sys = ss(A,B,C,D)
转化为离散:sysd = c2d(sys,0.1) 0.1为采样时间
方便调用:Ad = sysd.A Bd = sysd.B
调用内置函数求解Kd和P_lqr:
[Kd, P_lqr] = dlqr(Ad, Bd, Q, R) Q,R连续与离散通用,求解K值得P与MPC的H矩阵最后项的P是同一个P
(之前将连续和离散混在一起了,导致系统根本不稳定或是阶跃感太强,总之出现的样子你无法理解就想想是不是离散和连续搞混了)
2 . MPC的思想
误区,由X0计算出的一系列矩阵,最终得到的Z(包含u和x序列),错将此作为仿真输出;
事实上:误区中我们得到Z序列,而我们需要的也仅是第一项u,其他的没用,用此u控制系统,得到新的X1,新的X1当作X0
更新Beq,重新计算Z序列,得到的u继续控制系统,会得到X2,X2当作X0代入…………,X0,X1,X3,……XN才是我们需要的仿真值,在carsim中,车辆模型代替了系统,得到的X仍用于更新Beq,实车控制时,需要周期采集X来更新Beq,总之要有u作用于系统的思想。
茅塞顿开的感觉真棒,有人带的感觉真好,感谢王工,希望有一天自己也可以独当一面!!!加油