MPC轨迹跟踪控制器推导及Simulink验证

文章目录

  • MPC轨迹跟踪控制器推导及Simulink验证
  • MPC的特点
  • MPC轨迹跟踪控制器推导
    • 一 系统离散化
    • 二 预测区间状态和变量推导
    • 三 代价函数推导
    • 四 优化求解
  • <center> 基于MPC的倒立摆控制系统
  • 相关资料
  • Reference:

MPC轨迹跟踪控制器推导及Simulink验证

MPC的特点

  1. 多变量控制

一步都需要解决一个优化问题,特别是当系统变量和预测范围增大时,计算量会显著增加。
7. 需要精确模型:虽然MPC可以设计来应对模型不确定性,但其性能很大程度上依赖于模型的准确性。
8. 实现复杂:MPC的实现相对复杂,需要较高的专业知识和经验。
9. 与LQR相比:

  • 计算较复杂:LQR控制器的求解相对简单,只需要解决一个线性二次调节器问题。
  • 考虑约束:传统的LQR不考虑输入和状态约束。
  • 灵活性:LQR通常优化一个固定的二次型目标,不如MPC灵活。

MPC轨迹跟踪控制器推导

一 系统离散化

对连续线性状态方程:
{ x ˙ ( t ) = A x ( t ) + B u ( t ) y ( t ) = C x ( t ) + D u ( t ) \left\{ \begin{aligned} \dot{x}(t) &= Ax(t) + Bu(t) \\ y(t) &= Cx(t) + Du(t) \end{aligned} \right. {x˙(t)y(t)=Ax(t)+Bu(t)=Cx(t)+Du(t)
其离散化状态方程为:
{ x [ k + 1 ] = A d x [ k ] + B d u [ k ] y [ k ] = C d x [ k ] + D d u [ k ] \left\{ \begin{aligned} & x[k+1] = A_dx[k] + B_du[k] \\ &y [k] = C_dx[k] + D_du[k] \end{aligned} \right. {x[k+1]=Adx[k]+Bdu[k]y[k]=Cdx[k]+Ddu[k]
其中,
{ A d = e A T B d = A − 1 ( e A T − I ) B C d = C D d = D \left\{ \begin{aligned} A_d &= e^{AT}\\ B_d &= A^{-1}(e^{AT}-I)B \\ C_d &= C\\ D_d &= D \end{aligned} \right. AdBdCdDd=eAT=A1(eATI)B=C=D

二 预测区间状态和变量推导

X = [ x ( k ∣ k ) x ( k + 1 ∣ k ) x ( k + 2 ∣ k ) ⋮ x ( k + N ∣ k ) ] ( N + 1 ) n × 1 X = \begin{bmatrix} x(k|k) \\ x(k+1|k) \\ x(k+2|k) \\ \vdots \\ x(k+N|k) \end{bmatrix}_{(N+1)n\times1} X= x(kk)x(k+1∣k)x(k+2∣k)x(k+Nk) (N+1)n×1

U = [ u ( k ∣ k ) u ( k + 1 ∣ k ) u ( k + 2 ∣ k ) ⋮ u ( k + N − 1 ∣ k ) ] N p × 1 U = \begin{bmatrix} u(k|k) \\ u(k+1|k) \\ u(k+2|k) \\ \vdots \\ u(k+N-1|k) \end{bmatrix} _{Np\times1} U= u(kk)u(k+1∣k)u(k+2∣k)u(k+N1∣k) Np×1
根据离散化的状态空间方程
{ x ( k ∣ k ) = x k x ( k + 1 ∣ k ) = A d x ( k ∣ k ) + B d u ( k ∣ k ) = A d x k + B d u ( k ∣ k ) x ( k + 2 ∣ k ) = A d x ( k + 1 ∣ k ) + B d u ( k + 1 ∣ k ) = A d 2 x k + A d B d u ( k ∣ k ) + u ( k + 1 ∣ k ) ⋮ x ( k + N ∣ k ) = A d N x k + A d N − 1 B d u ( k ∣ k ) + ⋯ + u ( k + N − 1 ∣ k ) \left\{ \begin{aligned} & x(k|k) = x_k\\ & x(k+1|k) = A_dx(k|k)+B_du(k|k) = A_dx_k+B_du(k|k)\\ & x(k+2|k) = A_dx(k+1|k)+B_du(k+1|k) = A_d^2x_k+A_dB_du(k|k)+u(k+1|k)\\ \vdots\\ & x(k+N|k) = A_d^Nx_k+A_d^{N-1}B_du(k|k)+\dots +u(k+N-1|k) \end{aligned} \right. x(kk)=xkx(k+1∣k)=Adx(kk)+Bdu(kk)=Adxk+Bdu(kk)x(k+2∣k)=Adx(k+1∣k)+Bdu(k+1∣k)=Ad2xk+AdBdu(kk)+u(k+1∣k)x(k+Nk)=AdNxk+AdN1Bdu(kk)++u(k+N1∣k)
化简得:
X k = M ( N + 1 ) n × n x k + C ( N + 1 ) n × N p U k X_k = M_{(N+1)n\times n} x_k+C_{(N+1)n\times Np}U_k Xk=M(N+1)n×nxk+C(N+1)n×NpUk
其中:
M ( N + 1 ) n × n = [ I A d A d 2 ⋮ A d N ] C ( N + 1 ) n × N p = [ O B d A d B d B d ⋮ ⋮ ⋱ A d N − 1 B d A d N − 2 B d … B d ] M_{(N+1)n\times n} = \begin{bmatrix} I\\ A_d \\ A_d^2 \\ \vdots \\ A_d^N \end{bmatrix} \\ C_{(N+1)n\times Np}= \begin{bmatrix} O\\ B_d \\ A_dB_d & B_d \\ \vdots &\vdots &\ddots \\ A_d^{N-1}B_d & A_d^{N-2}B_d & \dots & B_d \end{bmatrix} M(N+1)n×n= IAdAd2AdN C(N+1)n×Np= OBdAdBdAdN1BdBdAdN2BdBd

三 代价函数推导

定义代价函数为状态误差加权和、控制输入加权和以及终端误差加权三者之和
J = ∑ k N − 1 ( E k T Q E k + u T k R u k ) + E N T F E N J = \sum_{k}^{N-1}(E_{k}^{T}QE_k + u_{T}^{k}Ru_{k})+E_{N}^{T}FE_N J=kN1(EkTQEk+uTkRuk)+ENTFEN
其中, E k = y − r E_{k}=y-r Ek=yr, y y y为输出变量,r为参考向量,在倒立摆中,取 y = x y = x y=x,故 E k = x − r e f E_k = x-ref Ek=xref,化简代价函数为:
J = [ E ( k ∣ k ) E ( k + 1 ∣ k ) E ( k + 2 ∣ k ) ⋮ E ( k + N ∣ k ) ] T Q ‾ [ E ( k ∣ k ) E ( k + 1 ∣ k ) E ( k + 2 ∣ k ) ⋮ E ( k + N ∣ k ) ] + [ u ( k ∣ k ) u ( k + 1 ∣ k ) u ( k + 2 ∣ k ) ⋮ u ( k + N − 1 ∣ k ) ] T R ‾ [ u ( k ∣ k ) u ( k + 1 ∣ k ) u ( k + 2 ∣ k ) ⋮ u ( k + N − 1 ∣ k ) ] J = \begin{bmatrix} E(k|k)\\ E(k+1|k)\\ E(k+2|k)\\ \vdots\\ E(k+N|k) \end{bmatrix}^{T}\overline{Q} \begin{bmatrix} E(k|k)\\ E(k+1|k)\\ E(k+2|k)\\ \vdots\\ E(k+N|k) \end{bmatrix}+ \begin{bmatrix} u(k|k)\\ u(k+1|k) \\ u(k+2|k)\\ \vdots\\ u(k+N-1|k) \end{bmatrix}^{T}\overline{R} \begin{bmatrix} u(k|k)\\ u(k+1|k) \\ u(k+2|k)\\ \vdots\\ u(k+N-1|k) \end{bmatrix} J= E(kk)E(k+1∣k)E(k+2∣k)E(k+Nk) TQ E(kk)E(k+1∣k)E(k+2∣k)E(k+Nk) + u(kk)u(k+1∣k)u(k+2∣k)u(k+N1∣k) TR u(kk)u(k+1∣k)u(k+2∣k)u(k+N1∣k)
其中:

{ E ( k + i ∣ k ) = x ( k + i ∣ k ) − r e f , i = 0 , 1 , 2 , … , N Q ‾ = d i a g ( Q , Q , Q , … , F ) R ‾ = d i a g ( R , R , R , … , R ) \left\{ \begin{aligned} & E(k+i|k) = x(k+i|k)-ref, i= 0,1,2,\dots,N\\ & \overline{Q} = diag(Q,Q,Q,\dots,F)\\ & \overline{R} = diag(R,R,R,\dots,R) \end{aligned} \right. E(k+ik)=x(k+ik)ref,i=0,1,2,,NQ=diag(Q,Q,Q,,F)R=diag(R,R,R,,R)
进一步展开得:
J = X k T Q ‾ X k − X T Q ‾ R e f − R e f T Q ‾ X + R e f T Q ‾ R e f + U k T R ‾ U k J = X_k^T\overline{Q}X_k - X^T\overline{Q}R_{ef} - R_{ef}^T\overline{Q}X + R_{ef}^T\overline{Q}R_{ef} + U_k^T\overline{R} U_k J=XkTQXkXTQRefRefTQX+RefTQRef+UkTRUk
易知:
{ R e f = [ r e f ; r e f ; …   ; r e f ] X T Q ‾ R e f = R e f T Q ‾ X X k = M x k + C U k \left\{ \begin{aligned} & R_{ef} =[ref;ref;\dots;ref] \\ & X^T\overline{Q}R_{ef} = R_{ef}^T\overline{Q}X \\ & X_k = Mx_k+CU_k \\ \end{aligned} \right. Ref=[ref;ref;;ref]XTQRef=RefTQXXk=Mxk+CUk
继续化简:
J = ( M x k + C U k ) T Q ‾ ( M x k + C U k ) − 2 ∗ ( M x k + C U k ) T Q ‾ R e f + R e f T Q ‾ R e f + U k T R ‾ U k = x k T M T Q ‾ M x k + 2 x k T M T Q ‾ C U k + U k T C T Q ‾ C U k − 2 x k T M T Q ‾ R e f − 2 U k T C T Q ‾ R e f + R e f T Q ‾ R e f + U k T R ‾ U k = x k T M T Q ‾ M x k + 2 x k T M T Q ‾ C U k − 2 x k T M T Q ‾ R e f − 2 U k T C T Q ‾ R e f + R e f T Q ‾ R e f + U k T ( C T Q ‾ C + R ‾ ) U k = x k T G x k + 2 x k T L U k − 2 x k T P R e f − 2 U k T S R e f + R e f T Q ‾ R e f + U k T T U k = x k T G x k − 2 R e f T P T x k + R e f T Q ‾ R e f + 2 ( x k T L − R e f T S T ) U k + U k T T U k \begin{aligned} J & = (Mx_k+CU_k)^T\overline{Q}(Mx_k+CU_k) - 2*(Mx_k+CU_k)^T\overline{Q}R_{ef} + R_{ef}^T\overline{Q}R_{ef} + U_k^T\overline{R} U_k \\[2ex] & = x_k^TM^T\overline{Q}Mx_k + 2x_k^TM^T\overline{Q}CU_k + U_k^TC^T\overline{Q}CU_k - 2x_k^TM^T\overline{Q}R_{ef} \\ & \hspace{1.5em} -2U_k^TC^T\overline{Q}R_{ef} + R_{ef}^T\overline{Q}R_{ef} + U_k^T\overline{R} U_k \\[2ex] & = x_k^TM^T\overline{Q}Mx_k + 2x_k^TM^T\overline{Q}CU_k - 2x_k^TM^T\overline{Q}R_{ef} - 2U_k^TC^T\overline{Q}R_{ef} + \\ & \hspace{1.5em} R_{ef}^T\overline{Q}R_{ef} + U_k^T(C^T\overline{Q}C+\overline{R})U_k \\[2ex] & = x_k^TGx_k + 2x_k^TLU_k - 2x_k^TPR_{ef} - 2U_k^TSR_{ef} + R_{ef}^T\overline{Q}R_{ef} + U_k^TTU_k\\[2ex] % & = x_k^TGx_k - 2R_{ef}^TLx_k + 2x_k^THU_k - 2R_{ef}^TPU_k + R_{ef}^T\overline{Q}R_{ef} + U_k^TSU_k\\[2ex] & = x_k^TGx_k - 2R_{ef}^TP^Tx_k + R_{ef}^T\overline{Q}R_{ef} + 2(x_k^TL - R_{ef}^TS^T)U_k + U_k^TTU_k\\ \end{aligned} J=(Mxk+CUk)TQ(Mxk+CUk)2(Mxk+CUk)TQRef+RefTQRef+UkTRUk=xkTMTQMxk+2xkTMTQCUk+UkTCTQCUk2xkTMTQRef2UkTCTQRef+RefTQRef+UkTRUk=xkTMTQMxk+2xkTMTQCUk2xkTMTQRef2UkTCTQRef+RefTQRef+UkT(CTQC+R)Uk=xkTGxk+2xkTLUk2xkTPRef2UkTSRef+RefTQRef+UkTTUk=xkTGxk2RefTPTxk+RefTQRef+2(xkTLRefTST)Uk+UkTTUk
其中:

{ G = M T Q ‾ M L = M T Q ‾ C P = M T Q ‾ S = C T Q ‾ T = C T Q ‾ C + R ‾ \left\{ \begin{aligned} & G = M^T\overline{Q}M\\ & L = M^T\overline{Q}C \\ & P = M^T\overline{Q}\\ & S = C^T\overline{Q}\\ & T = C^T\overline{Q}C+\overline{R}\\ \end{aligned} \right. G=MTQML=MTQCP=MTQS=CTQT=CTQC+R

四 优化求解

通过3. 代价函数推导,采用二次优化方法使得代价 J J J最小,进而进行控制,定义优化问题如下:
min ⁡ U k J = U k T T U k + 2 ( x k T L − R e f T S T ) U k subject to U m i n ≤ U k ≤ U m a x \begin{aligned} \underset{U_k}\min \quad & J = U_k^TTU_k+2(x_k^TL-R_{ef}^TS^T)U_k \\ \text{subject to}\quad & U_{min}\leq U_k \leq U_{max}\\ \end{aligned} Ukminsubject toJ=UkTTUk+2(xkTLRefTST)UkUminUkUmax
在MATLAB中可使用函数quadprog(quadprog函数介绍)求解:

根据MATLAB中quadprog要求,定义:
{ H = 2 T = 2 ( C T Q ‾ C + R ‾ ) f = 2 ( x k T L − R e f T S T ) T A = [ ] b = [ ] A e q = [ ] b e q = [ ] l b = U m i n u b = U m a x \left\{ \begin{aligned} H & = 2T = 2(C^T\overline{Q}C+\overline{R})\\ f & = 2(x_k^TL-R_{ef}^TS^T)^T\\ A & = [\quad]\\ b & = [\quad]\\ A_{eq} & = [\quad]\\ b_{eq} & = [\quad]\\ lb & = U_{min}\\ ub & = U_{max}\\ \end{aligned} \right. HfAbAeqbeqlbub=2T=2(CTQC+R)=2(xkTLRefTST)T=[]=[]=[]=[]=Umin=Umax
调用 quadprog(H,f,A,b,Aeq,beq,lb,ub) 即可求解代价函数 J J J取最小值时,最优控制输入 u k u_k uk

基于MPC的倒立摆控制系统

采用这篇文章建立的倒立摆模型进行仿真测试。
simulink中搭建控制仿真模型如下:
simulink模型

输入计算出的反馈增益 K K K仿真结果如下:
仿真结果

相关资料

MATLAB代码和simulink模型点击这里

NMPC轨迹跟踪控制器推导及Simulink验证点击这里

欢迎大家与我交流!!!

Reference:

  1. 推导倒立摆模型并使用LQR进行位置跟踪控制:https://blog.csdn.net/weixin_55249340/article/details/140421091?spm=1001.2014.3001.5501
  2. MATLAB quadprog函数:https://ww2.mathworks.cn/help/optim/ug/quadprog_zh_CN.html?requestedDomain=cn

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/798700.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

SAP 消息输出 - Adobe Form

目录 1 安装链接 2 前台配置 - Fiori app 2.1 维护表单模板 (maintain form templates) 2.2 管理微标 (manage logos) 2.3 管理文本 (manage texts) 3 后台配置 3.1 定义表单输出规则 3.2 分配表单模板 SAP 消息输出&#xff0c;不仅是企业内部用来记录关键业务操作也是…

Win11任务栏当中对 STM32CubeMX 的堆叠问题

当打开多个 CubeMX 程序的时候&#xff0c;Win11 自动将其进行了堆叠&#xff0c;这时候就无法进行预览与打开。 问题分析&#xff1a;大部分ST的工具都是基于 JDK 来进行开发的&#xff0c;Win11 将其识别成了同一个 Binary 但是实际上他们并不是同一个&#xff0c;通过配置…

基于conda包的环境创建、激活、管理与删除

Anaconda是一个免费、易于安装的包管理器、环境管理器和 Python 发行版&#xff0c;支持平台包括Windows、macOS 和 Linux。下载安装地址&#xff1a;Download Anaconda Distribution | Anaconda 很多不同的项目可能需要使用不同的环境。例如某个项目需要使用pytorch1.6&#x…

C语言详解(结构体)

Hi~&#xff01;这里是奋斗的小羊&#xff0c;很荣幸各位能阅读我的文章&#xff0c;诚请评论指点&#xff0c;欢迎欢迎~~ &#x1f4a5;个人主页&#xff1a;小羊在奋斗 &#x1f4a5;所属专栏&#xff1a;C语言 本系列文章为个人学习笔记&#xff0c;在这里撰写成文一…

《后端程序猿 · EasyPOI 导入导出》

&#x1f4e2; 大家好&#xff0c;我是 【战神刘玉栋】&#xff0c;有10多年的研发经验&#xff0c;致力于前后端技术栈的知识沉淀和传播。 &#x1f497; &#x1f33b; CSDN入驻不久&#xff0c;希望大家多多支持&#xff0c;后续会继续提升文章质量&#xff0c;绝不滥竽充数…

Android OkHttp3中HttpLoggingInterceptor使用

目录 一 概述1.1 日志级别 二 使用2.1 引入依赖2.2 创建对象2.3 添加拦截器 三 结果展示3.1 日志级别为BODY3.2 日志级别为BASIC3.3 日志级别为HEADERS 参考 一 概述 HttpLoggingInterceptor是OkHttp3提供的拦截器&#xff0c;用来记录HTTP请求和响应的详细信息。 1.1 日志级…

Dify中的经济索引模式实现过程

当索引模式为经济时&#xff0c;使用离线的向量引擎、关键词索引等方式&#xff0c;降低了准确度但无需花费 Token。 一.提取函数**_extract** 根据不同文档类型进行内容的提取&#xff1a; def _extract(self, index_processor: BaseIndexProcessor, dataset_document: Data…

pico+unity预设配置

picosdk中有很多预设的配置、使用预设配置的方法有 1、创建 XR Origin、展开 XR Origin > Camera Offset&#xff0c;选中 LeftHand Controller。点击 XR Controller (Action-Based) 面板右上角的 预设 按钮 2、打开Assets\Samples\XR Interaction Toolkit\2.5.2\Starter A…

《人工智能 从小白到大神》:一本让你彻底掌握AI的书

在当今这个快速发展的时代&#xff0c;人工智能&#xff08;AI&#xff09;已经成为改变世界的关键力量。你是否曾想过&#xff0c;如何从一个对AI一无所知的小白&#xff0c;成长为一名真正的AI大神&#xff1f;今天&#xff0c;我要向大家推荐一本能够帮助你实现这一目标的书…

51单片机11(蜂鸣器硬件设计和软件设计)

一、蜂鸣器硬件设计 1、 2、上面两张图&#xff0c;是针对不同产品的电路图。像左边这一块&#xff0c;是我们的A2&#xff0c;A3&#xff0c;A4的一个产品对应的一个封闭器的硬件电路。而右边的这一块是对应的A5到A7的一个硬件电路。因为A5到A7的一个产品&#xff0c;它的各…

Python和C++全球导航卫星系统和机器人姿态触觉感知二分图算法

&#x1f3af;要点 &#x1f3af;马尔可夫随机场网格推理学习 | &#x1f3af;二维伊辛模型四连网格模型推理 | &#x1f3af;统计物理学模型扰动与最大乘积二值反卷积 | &#x1f3af;受限玻尔兹曼机扰动和最大乘积采样 | &#x1f3af;视觉概率生成模型测试图像 &#x1f3…

关于文档理解相关工作的一些总结

过去四年时间&#xff0c;都在处理结构化数据的存储优化相关的工作。最近一段时间在做RAG相关的工作。非结构数据的存储与检索&#xff0c;接触的也越来越多。这篇文章聊聊最近一段时间关于文档理解方面的一些心得。 文档理解 文档理解旨在从非结构化文档中提取信息并将其转化…

推荐一款uniapp拖动验证码插件

插件地址&#xff1a;易盾验证码 - DCloud 插件市场 具体使用方式访问插件地址自行获取

JVM:SpringBoot TomcatEmbeddedWebappClassLoader

文章目录 一、介绍二、SpringBoot中TomcatEmbeddedWebappClassLoader与LaunchedURLClassLoader的关系 一、介绍 TomcatEmbeddedWebappClassLoader 是 Spring Boot 在其内嵌 Tomcat 容器中使用的一个类加载器&#xff08;ClassLoader&#xff09;。在 Spring Boot 应用中&#…

【学习笔记】无人机(UAV)在3GPP系统中的增强支持(八)-通过无人机进行无线接入

引言 本文是3GPP TR 22.829 V17.1.0技术报告&#xff0c;专注于无人机&#xff08;UAV&#xff09;在3GPP系统中的增强支持。文章提出了多个无人机应用场景&#xff0c;分析了相应的能力要求&#xff0c;并建议了新的服务级别要求和关键性能指标&#xff08;KPIs&#xff09;。…

实现多层感知机

目录 多层感知机&#xff1a; 介绍&#xff1a; 代码实现&#xff1a; 运行结果&#xff1a; 问题答疑&#xff1a; 线性变换与非线性变换 参数含义 为什么清除梯度&#xff1f; 反向传播的作用 为什么更新权重&#xff1f; 多层感知机&#xff1a; 介绍&#xff1a;…

LabVIEW红外热波图像缺陷检

开发使用LabVIEW开发的红外热波图像缺陷检测系统。该系统结合红外热像仪、工业相机和高效的数据采集硬件&#xff0c;实现对工件表面缺陷的自动检测和分析。通过LabVIEW的强大功能&#xff0c;系统能够实时采集、处理和显示红外热波图像&#xff0c;有效提高了检测的精度和效率…

【Playwright+Python】系列 Pytest 插件在Playwright中的使用

一、命令行使用详解 使用 Pytest 插件在Playwright 中来编写端到端的测试。 1、命令行执行测试 pytest --browser webkit --headed 2、使用 pytest.ini 文件配置 内容如下&#xff1a; [pytest] # Run firefox with UIaddopts --headed --browser firefox效果&#xff1…

机器人相关工科专业课程体系

机器人相关工科专业课程体系 前言传统工科专业机械工程自动化/控制工程计算机科学与技术 新兴工科专业智能制造人工智能机器人工程 总结Reference: 前言 机器人工程专业是一个多领域交叉的前沿学科&#xff0c;涉及自然科学、工程技术、社会科学、人文科学等相关学科的理论、方…

STM32MP135裸机编程:定时器内核时钟频率计算方法

0 工具准备 STM32MP13xx参考手册 1 定时器内核时钟频率计算方法 1.1 定时器分组 STM32MP135的定时器按照时钟源不同分成了三组&#xff0c;如下&#xff1a; APB1: APB2: APB6&#xff1a; 1.2 定时器内核时钟频率计算方法 APB1DIV是APB1的分频系数&#xff0c;APB2DIV、…