针对四足机器人传统控制方法中用到的MPC模型预测进行学习。记录了相关理论及代码实现。
基本概念
最优控制
SISO单输入单输出系统,$J=\int_0^t(qe^2+ru^2)dt$
$q>>r$说明看重误差,$r>>q$说明看重输入
MIMO多输入多输出系统,$J=\int_0^x(E^TQE+U^TRU)dt$
MPC
定义:通过模型来预测系统在某一未来时间段内的表现来进行优化控制。
步骤:
估计/测量读取当前系统状态
基于$u_k,u_{k+1},…,u_{k+N}$来进行最优化控制
$J=\sum_k^{N-1}E_k^TQE_k+u_k^TRu_k+E_N^TFE_N$
只取$u_k$
预测区间(Predictive Horizon):y-t坐标系中,对$y_k,y_{k+1},…,y_{k+N}$的预测
控制区间(Control Horizon):u-t坐标系中,对$u_k,u_{k+1},…,u_{k+N}$的控制
滚动优化控制(Receding Horizon Control):$u_k$之后,即$t=k+1$时,预测区间和控制区间都要移动,再次进行同样的计算,这个过程称为滚动优化控制。
MPC对控制器的计算能力要求很高。
数学建模
二次规划
一般形式:$min(z^TQz+c^Tz)$
其中Q为对角矩阵,如$Q=\left[\begin{matrix}
q_1&0&0\
0&q_2&0\
0&0&q_3\
\end{matrix}\right]$,则是最小二乘问题。
状态方程:
$x(k+1)=Ax(k)+Bu(k)$
在$k$时刻,预测的控制输出为$u(k|k),u(k+1|k)…u(k+N-1|k)$,其中N为预测区间。预测的系统状态为$x(k|k),x(k+1|k)…x(k+N|k)$。分别定义其列向量为$u_k$和$X_k$。$X_k$是(N+1)n×1。$u_k$是Np×1。
$J=\sum_{i=0}^{N-1}(x(k+i|k)^TQx(k+i|k)+u(k+i|k)^TRu(k+i|k))+x(k+N)^TFx(k+N)$
第一项为误差加权和,第二项为输入加权和,Q和R都是对角矩阵,最后一项是终端误差 。
要将上式转化为二次规划形式
令$x_k=x(k|k)$,则
$x(k+1|k)=Ax_k+Bu(k|k)$
$x(k+2|k)=Ax_{k+1}+Bu(k+1|k)=A^2x_k+ABu(k|k)+Bu(k+1|k)$
同理可得,
$x(k+N|k)=A^Nx_k+A^{N-1}Bu(k|k)+…+Bu(k+N-1|k)$
因此,
$$
\begin{align}X_k&=\left[\begin{matrix}I\
A\
A^2\
\vdots\
A^N\end{matrix}\right]x_k+
\begin{bmatrix}0&0&\cdots&0\
B&0&\cdots&0\
AB&B&\cdots&0\
{\vdots}&{\vdots}&{\ddots}&{\vdots}\
A_{N-1}B&A_{N-2}B&\cdots&B
\end{bmatrix}
\begin{bmatrix}
u(k|k)\
u(k+1|k)\
\vdots \
u(k+N-1|k)\
\end{bmatrix}\
&=Mx_k+Cu_k
\end{align}
$$
$$
\begin{align}
J&=\sum_{i=0}^{N-1}(x(k+i|k)^TQx(k+i|k)+u(k+i|k)^TRu(k+i|k))+x(k+N)^TFx(k+N)\
&=\begin{bmatrix}
x(k|k)\
x(k+1|k)\
\vdots\
x(k+N|k)\
\end{bmatrix}^T
\begin{bmatrix}
Q&0&\cdots&0\
0&Q&\cdots&0\
\vdots&\vdots&\ddots&\vdots\
0&0&\cdots&F\
\end{bmatrix}
\begin{bmatrix}
x(k|k)\
x(k+1|k)\
\vdots\
x(k+N|k)\
\end{bmatrix}+\cdots\
&=X_k^T\overline{Q}X_k+u_k^T\overline{R}u_k\
&=(Mx_k+Cu_k)^T\overline{Q}(Mx_k+Cu_k)+u_k^T\overline{R}u_k\
&=x_k^TM^T\overline{Q}Mx_k+x_k^TM^T\overline{Q}Cu_k+u_k^TC^T\overline{Q}Mx_k+u_k^TC^T\overline{Q}Cu_k+u_k^T\overline{R}u_k\
&=x_k^TM^T\overline{Q}Mx_k+2x_k^TM^T\overline{Q}Cu_k+u_k^T(C^T\overline{Q}C+\overline{R})u_k\
&=x_k^TGx_k+2x_k^TEu_k+u_k^THu_k
\end{align}
$$
$J$是个数,是$1*1$的,所以转置等于本身。
$x_k^TGx_k$是初始状态,即刚开始测量的值,不影响最优化的部分。
$u_k^THu_k+2x_k^TEu_k$符合二次规划的一般形式。
建模示例
$$
\begin{align}
A&=\begin{bmatrix}
1&0.1\
-1&2\
\end{bmatrix}\
B&=\begin{bmatrix}
0.2&1\
0.5&2\
\end{bmatrix}
\end{align}
$$
预测区间$N=5$
详细定义见代码
1 | clear;close all;clc; |