精华内容
下载资源
问答
  • MPC算法

    千次阅读 2020-05-12 07:13:05
    MPC算法 一. 引言 在工程技术方面,MPC全称可指Model Predictive Control模型预测控制(又称RHC, Receding Horizon )。 模型预测控制算法 一种进阶过程控制方法,自1980年以来开始在化工炼油等过程工业得到应用,...

    MPC算法

    一. 引言

    在工程技术方面,MPC全称可指Model Predictive Control模型预测控制(又称RHC, Receding Horizon )。

    在这里插入图片描述

    模型预测控制算法

    一种进阶过程控制方法,自1980年以来开始在化工炼油等过程工业得到应用,并在经济领域开始得到应用。

    MPC是一种多变量控制策略,其中涉及了:

    过程内环动态模型;控制量的历史数值;在预测区间上的一个最优值方程J。最优控制量可由以上各量求出。

    MPC最大的特点在于,相对于LQR控制而言,MPC可以考虑空间状态变量的各种约束,而LQR,PID等控制只能够考虑输入输出变量的各种约束。

    MPC可应用于线性和非线性系统。

    在当今过程控制中,PID当然是用的最多的控制方法,但MPC也超过了10%的占有率。MPC是一个总称,有着各种各样的算法。其动态矩阵控制(DMC)是代表作。DMC采用的是系统的阶跃响应曲线,其突出的特点是解决了约束控制问题。那么是DMC是怎么解决约束的呢?在这里只给出宏观的解释,而不做详细的说明。DMC把线性规划和控制问题结合起来,用线性规划解决输出约束的问题,同时解决了静态最优的问题,一石二鸟,在工业界取得了极大的成功。

    如下图所示为一个MIMO系统u1,u2输入与y1,y2输出相互影响。如果使用PID控制的话,每一个子系统单独设计一个PID控制器,两个相互影响的子系统没有任何的交联,使得系统难以设计,如果像图二一样设计一个较大的系统,则参数较多难以实现,而使用MPC控制器的话可以较好的解决两种问题,综合相互间的影响来设计参数。

    在这里插入图片描述

    二. 作用机理

    MPC作用机理描述为:在每一个采用时刻,根据获得的当前测量信息,在线求解一个有限时间开环优化问题,并将得到的控制序列的第一个元素作用于被控对象。在下一个采样时刻,重复上述过程:用新的测量值作为此时预测系统未来动态的初始条件,刷新优化问题并重新求解

    即MPC算法包括三个步骤:

    (1)预测系统未来动态;

    (2)(数值)求解开环优化问题;

    (3)将优化解的第一个元素(或者说第一部分)作用于系统

    这三步是在每个采样时刻重复进行的,且无论采用什么样的模型,每个采样时刻得到的测量值都作为当前时刻预测系统未来动态的初始条件

    在线求解开环优化问题获得开环优化序列是MPC和传统控制方法的主要区别,因为后者通常是离线求解一个反馈控制律,并将得到的反馈控制律一直作用于系统。

    在这里给出两点说明:

    1.MPC是一个反馈控制策略,但是之前不是说将得到的控制序列中的第一个元素作用于被控对象,求解开环问题。那么哪来的反馈呢?

    实际上在下一个采样周期,下一时刻的测量值又被使用上了,用下一时刻的测量值求解下一时刻的控制值。故这是一个反馈控制策略

    2.传统的控制方法为什么被称为离线控制?

    设计变阻器应有的级数来达到控制并励直流电动机启动的例子,那么如何看的出来是离线控制呢?其实很简单,在起始的时候就已经把每级电阻值就给定出来了,但是实际上是否能如理论计算的这样呢?比如我电压突然受到了扰动了怎么办?那么这个计算的每级电阻值肯定不对了啦,但是传统的控制方法对此确是无能为力的,因为每级启动电阻在最早的时候已经计算好了的。

    三. MPC的基本特点

    不管是何种算法,他们的基本特点都是:基于模型的预测、滚动优化和前馈-反馈的控制结构。

    1.基于模型的预测

    在MPC算法中,需要一个描述对象动态行为的模型,这个模型的作用是预测系统未来的动态。即能够根据系统k时刻的状态和k时刻的控制输入,预测到k+1时刻的输出。在这里k时刻的输入正是用来控制系统k+1时间的输出,使其最大限度的接近k+1时刻的期望值。故我们强调的是该模型的预测作用,而不是模型的形式。

    在这里我重点讲解一下状态空间模型。那么什么是状态?输出是不是也是状态的一种?对的,输出也是一种状态,只不过我们赋予了这个状态特殊的意义。举个例子来说,舞龙,假设是只能通过龙尾的人A指挥前面一个人B动作,然后B指挥他前面的一个人C动作….依次如此,达到控制龙头的人F叼住绣球的动作。如果只关注龙头的人(输出)和龙尾的人(输入),而忽略龙身子的动态,那就是所谓的输入—输出系统。经典控制理论就是建立在输入—输出系统的基础上面的。
    但是我如果不管要管龙尾和龙头的人,我连龙身子上面的人也要要求在固定的位置,那么这就是状态空间的概念,即我对系统中的每一个状态都要控制到。龙头位置的人也是一个状态,故输出本身就是一个状态,或者说是状态的一个组合。

    2.滚动优化

    因为外部干扰和模型失配的影响,系统的预测输出和实际输出存在着偏差,如果测量值能测到这个偏差,那么在下一时刻能根据这个测量到偏差的测量值在线求解下一时刻的控制输入,即优化掉了这个偏差值。若将求解的控制输出的全部序列作用于系统,那么k+1时刻的测量值不能影响控制动作,也就是说测量值所包括的外部干扰或模型误差信息得不到有效利用。故我们将每个采样时刻的优化解的第一个分量作用于系统,在下一个采用时刻,根据新得到的测量值为初始条件重新预测系统的未来输出并求解优化解,继续讲这个时刻的优化解的第一个分量作用于系统,这样重复至无穷。

    故预测控制不是采用一个不变的全局优化目标,而是采用时间向前滚动式的有限时域优化策略。这也就是意味着优化过程不是一次离线进行,而是反复在线进行的。

    3.前馈-反馈的控制结构

    这个在前面给出的两点说明中的第一点就已经给出了。

    四. MPC参数选择

    选择一个好的参数不仅影响MPC控制的性能,而且还会影响到MPC每一个timestep内进行在线优化的计算复杂度。这里将会给出关于控制器采样周期、预测及控制范围(prediction and control)、约束及权重。

    采样周期的选择

    采样周期过大,则系统反应过慢导致难以及时进行修正控制,而采样周期过小,则会导致系统产生大量的在线优化计算,给系统带来较大的开销。因而建议采样周期设计采用开环响应时间(10~90%上升时间)的十分之一或二十分之一:

    在这里插入图片描述

    展开全文
  • 控制算法MPC算法.zip

    2021-03-28 23:08:09
    控制算法MPC算法讲解,另外还包含了自动驾驶学习资料的获取: 涵盖感知,规划和控制,ADAS,传感器; 1. apollo相关的技术教程和文档; 2.adas(高级辅助驾驶)算法设计(例如AEB,ACC,LKA等) 3.自动驾驶鼻祖...
  • 一种减轻MIMO计算负担的快速MPC算法
  • MPC算法伯克利分校精品资源,对理解MPC算法,实现matlab编程具有很好的参考意义
  • MPC工具箱提供的MPC模块不能实现权重参数的实时修改,有必要自己编写一个实现模型预测控制算法的matlab function。 主义事项 ...2. MPC算法的采样频率。 3. 被控对象的状态空间方程的离散化频率。 ...

    MPC工具箱提供的MPC模块不能实现权重参数的实时修改,有必要自己编写一个实现模型预测控制算法的matlab function。

    • 主义事项

    求解QP问题的时候使用哪一个函数更好????

    mpcqpsolver   (To be removed) Solve a quadratic programming problem using the KWIK algorithm

    quadprog

    mpcInteriorPointSolver

    以下物理量必须设置相同,不然容易报错或求解不出理论控制量:

    1. matlab func模块的调用频率

    2. MPC算法的采样频率。

    3. 被控对象的状态空间方程的离散化频率。

    以一个双积分系统为例子,MPC的实现代码如下

    function U = fcn(Ref,x,v,q1,ut)
    % clear
    % s=tf('s')
    % G=1/s^2
    % G=ss(G)
    % A=G.A
    % B=G.B
    % C=eye(2)
    % D=zeros(2,1)
    % sys=ss(A,B,C,D)
    % plant=c2d(sys,0.01)
    coder.extrinsic('quadprog');
    U = 0;
    deltaU =0;
    
    Ak = ...
      [1     0;
      0.01     1];
     
    Bk = ...
    [0.01;
    5e-05];
    
    Ck=eye(2);
    Dk=zeros(2,1);
    
    dk=zeros(6,1);
    ek=zeros(4,1);
    % 权重矩阵
    Q=diag([1.5+q1,100]);  % 1.52 100  2.8 
    R=diag([0]);
    S=diag([0]);
    pho=0.05;
    e=0.1;
    
    Ts=0.01;
    
    xk=[v;x;ut];
    yref=Ref;
    
    % 维数说明
    m=1; % 控制
    n=2; % 状态变量
    n0=m+n; % 新的状态维度
    Hc=2;
    Hp=10;
    p=size(Ck,1) ; %输出量维数
    % 已知量
    u_1 = ut;
    U_1=kron(ones(Hc,1),u_1);
    % syms deltau deltau1 deltau2 deltau3 deltau4
    % deltaU=[deltau;deltau1;deltau2;deltau3;deltau4]
    % U=M*deltaU+U_1
    
    %% 令 x=[x(k);u(k-1)]  控制量变为 delta u  则新系统的状态空间为
    Ak=[ Ak,Bk;zeros(m,n),eye(m) ];
    Bk=[Bk;eye(m)];
    Ck=[Ck,Dk];
    Dk=Dk;
    dk=[dk;zeros(m,1)];
    ek=ek;
    %% 预测输出矩阵 k+1 ... K+Hp    共Hp个
    % 控制输出矩阵  k...K+Hc-1   共Hc个
    
    % compute PSIk
    [m1,n1]=size(Ck*Ak);
    PSIk=zeros(m1*Hp , n1);
    for i=1:Hp
        PSIk( (i-1)*m1+1 :(i-1)*m1+m1 , 1:n1)=Ck*Ak^i;
    end
    % compute THETAk
    [m2,n2]=size(Ck*Bk);
    THETAk=zeros(m2*Hp , n2*Hc);
    for i=1:Hp
        for j=1:Hc
            if i>=j
                THETAk( (i-1)*m2+1:(i-1)*m2+m2, (j-1)*n2+1:(j-1)*n2+n2 ) = Ck*Ak^(i-j)*Bk;
            elseif j-i==1
                THETAk( (i-1)*m2+1:(i-1)*m2+m2, (j-1)*n2+1:(j-1)*n2+n2)=Dk;
            else
                THETAk( (i-1)*m2+1:(i-1)*m2+m2, (j-1)*n2+1:(j-1)*n2+n2)=zeros(m2,n2);
            end
        end
    end
    % compute TAUk
    [m3,n3]=size(Ck);
    TAUk=zeros(m3*Hp , n3*Hp);
    for i=1:Hp
        for j=1:Hp
            if i>=j
                TAUk( (i-1)*m3+1:(i-1)*m3+m3, (j-1)*n3+1:(j-1)*n3+n3 ) = Ck*Ak^(i-j);
            else
                TAUk( (i-1)*m3+1:(i-1)*m3+m3, (j-1)*n3+1:(j-1)*n3+n3)=zeros(m3,n3);
            end
        end
    end
    % compute PHIk
    PHIk=zeros(n0*Hp,1);  
    % compute LAMBDA
    LAMBDAk=zeros(p*Hp,1);   %% 线性时变时候不为0!!!!!!!!!!!!!
    
    % compute Qe
    [m4,n4]=size(Q);
    Qe=zeros(m4*Hp,n4*Hp);
    for i=1:Hp
        for j=1:Hp
            if i==j
                Qe( (i-1)*m4+1:(i-1)*m4+m4, (j-1)*n4+1:(j-1)*n4+n4 ) = Q;
            else
                Qe( (i-1)*m4+1:(i-1)*m4+m4, (j-1)*n4+1:(j-1)*n4+n4 )=zeros(m4,n4);
            end
        end
    end
    % compute Re
    [m5,n5]=size(R);
    Re=zeros(m5*Hc,n5*Hc);
    for i=1:Hc
        for j=1:Hc
            if i==j
                Re( (i-1)*m5+1:(i-1)*m5+m5, (j-1)*n5+1:(j-1)*n5+n5 ) = R;
            else
                Re( (i-1)*m5+1:(i-1)*m5+m5, (j-1)*n5+1:(j-1)*n5+n5 )=zeros(m5,n5);
            end
        end
    end
    % compute Se
    [m6,n6]=size(S);
    Se=zeros(m6*Hc,n6*Hc);
    for i=1:Hc
        for j=1:Hc
            if i==j
                Se( (i-1)*m6+1:(i-1)*m6+m6, (j-1)*n6+1:(j-1)*n6+n6 ) = S;
            else
                Se( (i-1)*m6+1:(i-1)*m6+m6, (j-1)*n6+1:(j-1)*n6+n6 )=zeros(m6,n6);
            end
        end
    end
    
    K=tril(ones(Hc));
    Im=eye(m,m);
    M=kron(K,Im);
    
    [m7,n7]=size(yref);
    Yrefk=zeros(m7*Hp,1);
    for i=1:Hp
        Yrefk( (i-1)*m7+1:(i-1)*m7+m7 , 1)=yref;
    end
    epsilon=PSIk*xk+TAUk*PHIk+LAMBDAk-Yrefk;
    %% 最终变量 Hk Gk Pk
    Hk=...
        [ 2*(THETAk'*Qe*THETAk+Re+M'*Se*M) ,  zeros(m*Hc,1) ;
        zeros(1,m*Hc)                    ,  pho             ];
    
    Gk=...
        [  2*epsilon'*Qe*THETAk+2*U_1'*Se*M  ,  0  ];
    
    
    Pk=...
        [  epsilon'*Qe*epsilon + U_1'*Se*U_1 + pho*e^2  ];
    
    
    %% QP问题
    H=Hk;
    c=Gk';
    A=[];
    b=[];
    Aeq=[];
    beq=[];
    Minv=M^-1;
    VLB=[Minv*(-ones(m*Hc,1)-U_1);-1];
    VUB=[Minv*(ones(m*Hc,1)-U_1);1];
    [x,z,fla,out]=quadprog(H,c,A,b,Aeq,beq,VLB,VUB);
    deltaU = x(1);
    
    U = ut(1)+deltaU  ;
    
    
    


    MPC算法的参考文献为:

    基于模型预测控制的无人驾驶车辆轨迹跟踪控制算法研究_孙银健

     

    !!!!!

    声明:若果您觉得您被侵犯了权利,请联系本博客作者,同样的,若引用了本文也请注明出处。

    !!!!!

    需要源代码、slx文件或技术支持的童鞋请联系我。

     

     

     

     

     

    展开全文
  • 基于模糊MPC算法的自适应巡航控制系统研究
  • 自适应MPC算法

    2019-03-21 13:27:49
    基于matlab SIMULINK模型实现自适应模型预测控制,Adaptive MPC controllers adjust their prediction model at run time to compensate for nonlinear or time-varying plant characteristics. To implement ...
  • 针对在大规模电力系统互联情况下如何准确、快速控制系统负荷频率的问题,本文结合模型预测控制算法(MPC),提出了一种多区域电力系统负荷频率控制方法....当系统参数偏移10%时,MPC算法仍能保证控制性能.
  • 具有执行器饱和和状态延迟的LPV系统的约束分布式MPC算法
  • practical_quad:根据实际飞行数据测试系统识别和MPC算法
  • 加速s-function 编写的MPC算法 一句话总结,这是一个误会。大神勿喷 背景 由于我的控制问题中约束条件是时变的,不是一个定值,simulink自带的MPC模块貌似不能用(如果可以望大神告知),所以采用S-Function编写了...

    加速s-function 编写的MPC算法


    一句话总结,这是一个误会。大神勿喷

    背景

    由于我的控制问题中约束条件是时变的,不是一个定值,simulink自带的MPC模块貌似不能用(如果可以望大神告知),所以采用S-Function编写了MPC算法。我把状态方程,序列化的状态方程,等很复杂的矩阵放在S-Function里写了(switch flag之前),之后单步调试的时候看,这一部分代码只运行了一次,之后就一只在case 0,2,3等那几个代码块中切换了。因此我认为这样的写法不会影响运行速度。

    现象

    30秒的仿真要跑块300秒。。。。我吐了,我还有个3000秒的仿真要跑啊!阿里云也救不了我。。。

    解决方法

    使用profile代码分析工具发现,那块计算各种矩阵的代码每个采样时间都被调用了,里面还写了各种循环嵌套。。。之后就好办了,由于这段代码计算的这些参数是不会变的,另开一个脚本先计算好,在传入S-Function就好了。改进后30秒的仿真只要跑80秒啦,99%的时间都花费在最后求解二次规划上了,那暂时就没有优化空间了。

    展开全文
  • 1、百度Apollo中MPC算法对于模型做出了:在horizon时间内车辆的horizon plant以及model behavior 是不变的,因此在计算matrix_k等矩阵时采用的都是当前周期内计算的车辆模型参数。 2、百度Apollo中MPC算法对于...

    愚见,仅做记录

     

    1、百度Apollo中MPC算法对于模型做出了:在horizon时间内车辆的horizon plant以及model behavior 是不变的,因此在计算matrix_k等矩阵时采用的都是当前周期内计算的车辆模型参数。

     

    2、百度Apollo中MPC算法对于控制量进行了约束处理,但是没有针对控制增量进行约束处理,自动驾驶中方向盘转角的变化速度对应横摆角速度的变化率,影响乘客体验最重要的Jerk参数,因此需要考虑增量约束。参考《无人驾驶模型预测控制》中提到,可以使用X(k|t)=[x(k|t);u(k-1|t)]来替代x(k+1)=Ax(k)+Bu(k)+C中的x,可以将x(k+1)=Ax(k)+Bu(k)+C转写为X(k+1|t)=A1*X(k|t)+B1*delta_u(k|t)+C,这里A1和B1是转换后对应的A、B 矩阵,在针对转换后的模型进行MPC计算即可实现对于控制增量的约束。

     

    展开全文
  • MPC控制 对于审稿人: MPC模型的详细信息。 初始状态和参考轨迹 Eigen::MatrixXd transformGlobal2Vehicle ( double x, double y, double psi, const vector< double> & ptsx, const vector< double> & ptsy) {...
  • 积分java源码注意 该存储库包含 SKYSTONE (2019-2020) 比赛赛季的公共 FTC SDK。 以前这个软件项目是托管的。 ...的团队应该使用它而不是旧的(不再更新)ftc_app ...如果您不熟悉机器人技术或不熟悉FIRST技术挑战赛,那么...
  • 阿波罗 MPC算法学习

    千次阅读 2019-01-16 16:51:45
    这是一篇写的比较好的文章,转载留档 https://blog.csdn.net/u013914471/article/details/83824490
  • ESO+LTV MPC算法笔记

    2020-12-14 15:25:17
    问题起因: 理想模型的输入无时延,实际模型中,因为伺服电机的存在,所以存在惯性,可以将这个惯性时间常数当作一个纯时延。 解决办法:在ESO的u输入当添加一个delay模块,调整时延系数以适应实际系统输入的惯性...
  • mpc预测控制算法

    2018-12-08 11:54:28
    mpc预测控制算法 用于理解模型预测控制 希望有所帮助
  • 自编Matlab代码实现MPC基本算法

    万次阅读 多人点赞 2019-12-28 06:27:53
    #用Matlab实现MPC的基本算法 写之前我在网上找了一下相关的文章,发现没有一个写得很直观的答案,刚好最近在研究MPC,于是决定自己写一个,力求做到直接了当,让入门的同学一眼就能看明白。 首先要介绍一下一个基于...
  • MPC预测控制算法中的DMC算法simulink仿真文件,详细原理和工程说明见博客:https://blog.csdn.net/qq_33243369/article/details/89408341
  • MAC算法讲解,另外还包含了自动驾驶学习资料的获取: 涵盖感知,规划和控制,ADAS,传感器; 1. apollo相关的技术教程和文档; 2.adas(高级辅助驾驶)算法设计(例如AEB,ACC,LKA等) 3.自动驾驶鼻祖mobileye的论文...
  • Apollo控制算法MPC分析

    2021-01-16 22:20:34
    百度apollo控制算法MPC,另外还包含了自动驾驶学习资料 涵盖感知,规划和控制,ADAS,传感器; 1. apollo相关的技术教程和文档; 2.adas(高级辅助驾驶)算法设计(例如AEB,ACC,LKA等) 3.自动驾驶鼻祖mobileye的...
  • 龚建伟第二版书中可行的程序,遇到问题大家一起留言讨论进步学习。
  • 引言 控制算法的作用在于保证被控系统能够在满足规定的性能需求...下文中要介绍的MPC算法是一种基于能够描述系统特性的数学模型,来组合出一串时间维度的上的控制量序列,最终保证车辆对目标轨迹贴合较好又舒...
  • 基于MPC的LKA算法设计

    千次阅读 2019-10-30 22:47:04
    Matlab 2018版本中的simulink,有个自带的车道辅助保持模块,可以直接在帮助文档中搜索lane keeping assist system,如下,该模块是以MPC控制器为基础的,通过道路曲率、纵向速度、侧向路径偏移、横摆角误差作为控制...
  • MPC控制算法的资料很多,这里就不详讲了,这里搭建的matlab程序也是用了matlab自带的模块,Lane Keeping Assist System,matlab整体框架如下: MPC内部结构如下: 仿真结果如下: maltab/simulink程序...
  • 内有5个关于高级过程控制算法代码,个人亲手总结,matlab代码运行有效,非常值得下载,
  • 车辆运动控制算法——MPC

    千次阅读 2018-05-23 17:03:00
    MPC是模型预测控制算法,在车辆运动跟踪轨迹的控制中发挥很大的优势 基础的不多说,下面记录我对LQR/MPC/二次规划问题的理解 我们从LQR来引出MPC LQR的能量函数,目的是求函数J最小,即用最小的代价得到最好的...
  • 自动驾驶MPC算法,讲解,另外还包含了自动驾驶学习资料的获取: 涵盖感知,规划和控制,ADAS,传感器; 1. apollo相关的技术教程和文档; 2.adas(高级辅助驾驶)算法设计(例如AEB,ACC,LKA等) 3.自动驾驶鼻祖...
  • MPC多方安全计算——比较算法示意

    千次阅读 2020-01-27 22:03:10
    文章目录MPC多方安全计算——比较算法示意1. 简介与经典例子1.1 简介2.1 经典例子2. 比较算法流程示意2.1 描述2.2 比较算法的流程2.3 算法优势、劣势分析3. 可供参考的项目 MPC多方安全计算——比较算法示意 1. 简介...

空空如也

空空如也

1 2 3 4 5 ... 17
收藏数 340
精华内容 136
关键字:

mpc算法