从B站 DR_CAN 博主学来的
这里
前提:
-
x=Ax+Bu ,其中x表示状态是车辆的反馈量,如车速、位姿,角度等等,目的是输入给控制。u是控制的控制变量,是最终优化后输出的东西用于控制车,如横向加速度,车轮转角、方向盘转角、速度等。
从上面公式可以看出控制表达式的特点:你中包含我,我中有你(状态既要输入,输出的控制变量又会反过来影响状态) -
x长度可以和u不对应,比如x可以包含【位置x,位置y,yaw,speed】,u=【加速度a】如下所示: n个状态,p个控制量
3: x(k)表示当前状态,u(k)表示当前输出控制量,x(k+1)表示在控制量u(k)下 被控对象(模型) 反馈回来的下一次状态
视频整体思路(三个视频总结):
1:明确了目标函数/状态函数J 的目的,和怎么来的。
即:一个时间窗口下所有累计 状态平方误差+控制量平方误差+终端结束时差那一点的差 。注意:这时x(k),u(k)只是一个向量,如某一时间车轮速度,位置x,y,角度 :x(k)=[1m/s,2m,1m,0.2rad]
2:将单步x=Ax+Bu 推导为多步下的 输入输出控制表达式:Xk,Uk
目的:因为MPC是时间窗口下预测,所以不能在是单步
推导过程:
3:改造J 变成多时间步长
4:再将改造后多步长代价函数J 改写为符合二次规划可以计算的形式。
(为了求解改写)
注意:巧妙还在于消除了大X(k)矩阵,使得J,只包含一个变量矩阵U(k) 和xk常数。
各个矩阵规模:
此时u是单变量控制,若包含两个变量,则U(k)应该为61*