快速_mpc:快速模型预测控制代码

Alpha版(2008年9月)
杨旺(Yang Wang)斯蒂芬·博伊德

目的

快速_mpc包含两个C函数,带有MATLAB mex接口,实现中描述的快速模型预测控制方法纸张快速模型预测使用在线优化进行控制。请参阅本文了解详细信息问题公式和算法参数的含义。

下载并安装

从以下任一位置获取并解压缩包文件

这将创建一个包含所有源的目录,以及本文档。

查看文件安装以获取安装说明。

什么快速_mpc

我们考虑时不变线性动力系统的控制

 x(t+1)=Ax(t)+Bu(t)+w(t),四元t=0,1,ldots,

哪里x(吨),u(吨)、和重量(吨)状态、输入和干扰时间t吨、和A类B类是动力学和输入矩阵。

模型内预测控制(MPC),每次t吨我们解决了QP

 开始{array}{ll}mbox{minimize}&x(t+t)^TQ_fx(t+t)+displaystylesum_{tau=0}^{t+t-1}x(tau)^TQx(tau)+u(tau)^TRu(tau)mbox{subject to}&x_{mbox{scriptsize min}}leq x(tau)leq x_{mbox{scriptsize max}}},四元tau=t+1,ldots,t+t,&u_{mbox{scriptsize min}}leq u(tau)leq u_{mbox{scriptsize max}}},quad-tau=t,ldots,t+t-1,&x(tau+1)=Ax(tau)+Bu(τ),四τ=t,ldot,t+t-1,结束{数组}

带变量

 x(t+1),ldot,x(t+t),四元u(t),ldots,u(t+t-1),

和数据

 x(t),A,B,Q,Q_f,R,x_{mbox{scriptsize min}},x_}mbox{scriptsize max}}。

MPC输入为u^星(t)。我们在下一个时间步骤重复此操作。

快速_mpc是用于解决此优化问题的软件包通过利用其特殊结构和解决问题来快速大约。功能fmpc步骤从给定的初始状态和输入轨迹。功能fmpc_模拟带MPC控制的系统。

使用fmpc步骤

功能fmpc步骤解决了上述优化问题并返回近似最优x个u个轨迹。(在这种情况下,您必须自己实现MPC控制回路。)调用过程如下跟随。

[X,U,telapsed]=fmpc_step(sys,params,X0,U0,X0);
输入
系统描述(系统结构):系统。A:动力学矩阵A系统。B:输入矩阵B系统。Q:状态成本矩阵Q系统。R:输入成本矩阵Rsys.xmax:状态上限x{max}sys.xmin:状态下限x{min}sys.umax:输入上限u_{max}sys.umin:输入下限u{min}sys.n:状态数sys.m:输入数量MPC参数(参数结构):参数。T:MPC地平线T参数。Qf:MPC最终成本Q_fparams.kappa:屏障参数params.niters:牛顿迭代次数params.quiet:如果为true,则不显示输出其他投入X0:热启动X轨迹(n按T矩阵)U0:热启动U轨迹(m by T矩阵)x0:初始状态输入X0和U0不需要满足约束;他们是第一名在应用快速算法之前,投影到边界框中。
输出
X:最佳X轨迹(n按T矩阵)U:最优U轨迹(m by T矩阵)telapsed:解决问题所需的时间

使用fmpc_模拟

功能fmpc_模拟处理整个MPC模拟。对于t=1,ldot,n_mathrm{steps},fmpc_模拟解决上述优化问题,然后应用MPC输入并根据动力学方程更新状态。状态和控制轨迹由上一步,时间发生变化,以及附加帽子u帽子x,其中

 hat u=Kx(T),qquad hat x=Ax(T。

(与fmpc步骤,然后将这些轨迹投影到约束框。)在这里K(K)是终端控制增益,

 K=-(R+B^TQ_fB)^{-1}乙^TQ_fA。

调用过程是

[Xhist,Uhist,telapsed]=fmpc_sim(sys,params,X0,U0,X0,w);
输入
系统描述(系统结构):系统。A:动力学矩阵A系统。B:输入矩阵B系统。Q:状态成本矩阵Q系统。R:输入成本矩阵Rsys.xmax:状态上限x{max}sys.xmin:状态下限x{min}sys.umax:输入上限u{max}sys.umin:输入下限u{min}sys.n:状态数sys.m:输入数量MPC参数(参数结构):参数。T:MPC地平线T参数。Qf:MPC最终成本Q_fparams.kappa:屏障参数params.niters:牛顿迭代次数params.quiet:如果为true,则不显示输出params.nsteps:运行MPC模拟的步骤数其他投入X0:热启动X轨迹(n按T矩阵)U0:热启动U轨迹(m by T矩阵)x0:初始状态w:扰动轨迹(n按nsteps矩阵)输入X0和U0不需要满足约束;他们是第一名在应用快速算法之前,投影到边界框中。
输出
Xhist:状态历史(n按nsteps矩阵)Uhist:输入历史(m乘以nsteps矩阵)telapsed:解决问题所需的时间

示例

我们提供了两个示例来说明用法:

反馈

请向杨旺报告任何错误<邮箱:224@stanford.edu>.

许可证

快速_mpc使用Apache许可证2.0版,2004年1月。

博伊德的研究小组页面。