mpc 订阅
Media Player Classic(简称为MPC),顾名思义,就是一个模仿 Windows Media Player 6.4 这个经典版本的媒体播放器,但并非基于WMP6.4改进。由匈牙利人 Gabest 开发,基于源代码开放协议(GPL)。根据此协议,任何人都可以自由使用这款软件的源代码,条件是使用这款软件的源代码所开发或改进的软件也必须按GPL协议开放其源代码,而软件也必须同样免费供用户使用。 展开全文
Media Player Classic(简称为MPC),顾名思义,就是一个模仿 Windows Media Player 6.4 这个经典版本的媒体播放器,但并非基于WMP6.4改进。由匈牙利人 Gabest 开发,基于源代码开放协议(GPL)。根据此协议,任何人都可以自由使用这款软件的源代码,条件是使用这款软件的源代码所开发或改进的软件也必须按GPL协议开放其源代码,而软件也必须同样免费供用户使用。
信息
简    称
MPC
特    点
模仿 Windows Media Player 6.4
中文名
Media Player Classic
性    质
媒体播放器
Media Player Classic简介
Media Player Classic 外观酷似Windows Media Player6.4,但它的功能却是后者远不能及的。它支持列表和连续播放,并拥有更强大的Filter控制功能;支持XP界面主题;即使不安装VOBSUB也可以播放某些字幕;可以加挂播放外部的音频文件;改变播放速度、移动画面等等。 而且mpc加强了 DVD 回放,甚至还集成视频捕捉的功能。MPC 不仅可以播放所有 WMP 支持的格式,甚至连 GIF 动画都不放过,而且效果很不错。如果您已经安装了Real、QuickTime、Flash 解码器,那么这些这些类型的媒体也能使用它来播放。MPC 还加强了 DVD 回放,并集成视频捕捉的功能。它还有一个足以傲视众多播放器的资本,就是内建的 Vobsub 字幕引擎和 Subresync 字幕编辑器。对 DVDrip 爱好者来说,MPC 绝对是首选。但如果您的操作系统不是 Windows XP/2k3, 那么它将需要 DirectX 9 (或更高版本)的支持才能直接为DirectShow媒体加载字幕。Gabest 原先是以不公开源代码的方式开发 Media Player Classic,但后来他开放了 Media Player Classic 的源代码。现时 Media Player Classic 是基于GPL下发布,另外,在 SourceForge 亦开发了名为 Guliverkli 的专案:在 Guliverkli 的专案页中亦有大量的编码,阅读器及解码器可供下载。
收起全文
精华内容
下载资源
问答
  • MPC

    2019-11-05 17:57:16
    MPC优势: MIMO 系统,输入输出相互作用 handle constraints preview capability MPC计算频率的建议 开环上升时间里有10~20个sample prediction horizon 建议 开环上升时间的20~30个sample。 太短无法及时控制,...

    YOUTUBE

    MPC优势:

    • MIMO 系统,输入输出相互作用
    • handle constraints
    • preview capability

    MPC计算频率的建议

    开环上升时间里有10~20个sample
    MPC计算频率的建议

    prediction horizon 建议

    开环上升时间的20~30个sample。
    太短无法及时控制,太长不利于处理突发情况,也会浪费计算力。

    在这里插入图片描述

    control horizon 建议

    10~20%的prediction horizon, 并至少有2 ~ 3个step。
    太长会造成冗余,太短不够达到控制效果。
    在这里插入图片描述

    根据不同情况选用不同MPC

    • 线性系统+线性约束: 线性MPC:
    • 非线性系统+线性约束
    1. 自适应MPC: 问题结构不变(num of states)
    2. gain-schedule MPC: 结构改变,不同情况用不同的线性MPC
    • 非线性系统+非线性约束:非线性MPC

    减少时间复杂度

    去掉对dynamic没贡献的states在这里插入图片描述

    explicit MPC

    以空间换时间,离线计算好每个状态需要的控制量,生成look up table,在线直接根据状态查询。
    在这里插入图片描述

    sub-optimal MPC

    测试每个iter花多久,选max_iter=sample time / iter time. 达到max_iter之后就返回当前的sub-optimal outcome.

    展开全文
  • mpc003,mpc004,mpc006,mpc004s运动控制芯片模块,串口通信,功能指令实用
  • MPC模型预测控制(二)-MATLAB代码实现

    万次阅读 多人点赞 2018-12-24 15:18:34
    update:MPC的QQ群 https://blog.csdn.net/tingfenghanlei/article/details/85046120在这篇文章里主要讲了下MPC的原理和C++实现的一个简单例子。 这篇文章里主要写MPC的MATLAB实现。许多做控制的同学还是很...

    update:MPC的QQ群

    第一个群已经满500人(贫穷使我充不起鹅厂会员),这是第二个群。

    群都满了。

     

    https://blog.csdn.net/tingfenghanlei/article/details/85046120在这篇文章里主要讲了下MPC的原理和C++实现的一个简单例子。

    这篇文章里主要写MPC的MATLAB实现。许多做控制的同学还是很喜欢用MATLAB的,可以先用MATLAB跑跑看自己的代码效果怎么样。

    我看MPC的MATLAB代码实现,主要看的是《无人驾驶车辆模型预测控制》这本书,书里的代码也比较完备。这里实现的代码基本上都是这本书中的,CSDN也有下载链接,大家可以去下载观看。

    在实现MPC的代码之前,书中讲了LQR的代码实现。

    LQR和MPC的区别:

    LQR solves an optimization,

    MPC solves a constrained optimization

    In practice, optimization could lead to over-voltage, ovre-current, excessive force etc. You want a motor starts very quickly? The optimizer tells you give it an infinite electric current. So you use a saturation which destroys the optimality. MPC solves an optimization without excessing the limits.

    In addition, LQR can be solved offline for an LTI system. However, MPC is not a linear controller. Typically, it must be solved online at each sample time. It requires higher computational load. MPC has toolbox in MATLAB. You can use it before you learn its theory in deep.

    参考链接https://www.quora.com/Whats-the-difference-between-constrained-LQR-and-MPC

    function LQR_1()
    %这里先从简单开始,给定一个直线车道和车辆位置偏差。
    %参考轨迹的生成方法有两种:
    %1.车辆在Path上投影,然后在PATH上选取一系列的点作参考点
    %*现在遇到的问题是Q R的参数怎么设置。而且通用性怎么办?*%
    
    clear all;
    close all;
    clc;
    %% 给定参数:
    
    vel = 6; % 纵向车速,单位:m/s
    L=2.85;%轴距
    T=0.05;% sample time, control period
    % 给定圆形参考轨迹
     CEN=[0,0];       % 圆心
     Radius=20;       % 半径
    
    %% 设置参数
    Hp =10;%predictive horizion, control horizon 
    N_l=200;% 设置迭代次数
    
    Nx=3;%状态变量参数的个数
    Nu=1;%控制变量参数的个数
    
    FWA=zeros(N_l,1);%前轮偏角
    FWA(1,1)= 0; %初始状态的前轮偏角
    
    x_real=zeros(Nx,N_l);%实际状态
    x_real(:,1)= [22 0 pi/2]; %x0=车辆初始状态X_init初始状态
    % x_piao=zeros(N_l,Nx);%实际状态与参考轨迹的误差
    % 
    % u_real=zeros(N_l,Nu);%实际的控制量
    % u_piao=zeros(N_l,Nu);%实际控制量与参考控制量的误差
    
    % X_PIAO=zeros(N_l,3*Hp);%通过DR估计的状态
    % 
    % XXX=zeros(N_l,3*Hp);%用于保持每个时刻预测的所有状态值
    
    RefTraj=zeros(3,1);
    Delta_x = zeros(3,1);
    
    Q=[10 0 0; 0 10 0; 0 0 100];
    R=[10];%r是对控制量误差的weighting matrice
    
    Pk=[1 0 0; 0 1 0; 0 0 1]; %人为给定,相当于QN
    Vk=[0 0 0]'; %人为给定,相当于QN
    
    %%  算法实现
     u_feedBackward=0;
     u_feedForward=0;
     
     %*首先生成参考轨迹,画出图来作参考*%
     [RefTraj_x,RefTraj_y,RefTraj_theta,RefTraj_delta]=Func_CircularReferenceTrajGenerate(x_real(1,1),x_real(1,2),CEN(1),CEN(2),Radius,250,vel,T,L);
    
    figure(1) %绘制参考路径
    plot(RefTraj_x,RefTraj_y,'k')
    xlabel('x','fontsize',14)
    ylabel('y','fontsize',14)
    title('Plot of x vs y - Ref. Trajectory');
    legend('reference traj');
    axis equal 
    grid on
    hold on
    
    
    for i=1:1:N_l
    
        G_Test = 3;
        %先确定参考点和确定矩阵A,B.这里姑且认为A和B是不变的
        [RefTraj_x,RefTraj_y,RefTraj_theta,RefTraj_delta]=Func_CircularReferenceTrajGenerate(x_real(1,i),x_real(2,i),CEN(1),CEN(2),Radius,Hp,vel,T,L);
        u_feedForward = RefTraj_delta(G_Test);%前馈控制量
    %     u_feedForward=0;
        RefTraj_x(G_Test)
        RefTraj_y(G_Test)
        RefTraj_theta(G_Test)
        Delta_x(1,1) = x_real(1,i) - RefTraj_x(G_Test);
        Delta_x(2,1) = x_real(2,i) - RefTraj_y(G_Test);
        Delta_x(3,1) = x_real(3,i) - RefTraj_theta(G_Test);
        if  Delta_x(3,1) > pi
             Delta_x(3,1) = Delta_x(3,1)-2*pi;
        else if Delta_x(3,1) < -1*pi
                Delta_x(3,1) = Delta_x(3,1) +2*pi;
            else
                Delta_x(3,1) = Delta_x(3,1);
            end            
        end
        
         % 通过Backward recursion 求K    
        for  j=Hp:-1:2   
            Pk_1 = Pk;
            Vk_1 = Vk;     
            A=[1    0   -vel*sin(RefTraj_theta(j-1))*T; 0    1   vel*cos(RefTraj_theta(j-1))*T; 0    0   1;];
    %         B=[cos(RefTraj_theta(j-1))*T   0; sin(RefTraj_theta(j-1))*T   0; 0            vel*T/L;]; 
            COS2 = cos(RefTraj_delta(j-1))^2;
            B=[ 0 0  vel*T/(L*COS2)]'; 
    
            K = (B'*Pk_1*A)/(B'*Pk_1*B+R);
            Ku = R/(B'*Pk_1*B+R);
            Kv = B'/(B'*Pk_1*B+R);
    
            Pk=A'*Pk_1*(A-B*K)+Q;   
            Vk=(A-B*K)'*Vk_1 - K'*R*RefTraj_delta(j-1); 
        end
        
         u_feedBackward = -K*(Delta_x)-Ku*u_feedForward-Kv*Vk_1;  
        
        FWA(i+1,1)=u_feedForward+u_feedBackward;
        
         [x_real(1,i+1),x_real(2,i+1),x_real(3,i+1)]=Func_VehicleKineticModule_Euler(x_real(1,i),x_real(2,i),x_real(3,i),vel,FWA(i,1),FWA(i+1,1),T,L);  
         
        
    end
    
    %%   绘图
    %        figure(1);
    %     plot(RefTraj_x,RefTraj_y,'b')
    %     hold on;
        plot(x_real(1,:),x_real(2,:),'r*');
        title('跟踪结果对比');
        xlabel('横向位置X');
        % axis([-1 5 -1 3]);
        ylabel('纵向位置Y');  
    
    
    end

    还有4个子函数

    function K=Func_Alpha_Pos(Xb,Yb,Xn,Yn)
    AngleY=Yn-Yb;
    AngleX=Xn-Xb;
    %***求Angle*******%
    if Xb==Xn
        if Yn>Yb
            K=pi/2;
        else
            K=3*pi/2;
        end
    else
        if Yb==Yn
            if Xn>Xb
                K=0;
            else
                K=pi;
            end
        else
            K=atan(AngleY/AngleX);
        end    
    end
    %****修正K,使之在0~360°之间*****%
       if (AngleY>0&&AngleX>0)%第一象限
            K=K;
        elseif (AngleY>0&&AngleX<0)||(AngleY<0&&AngleX<0)%第二、三象限
            K=K+pi;
        else if (AngleY<0&&AngleX>0)%第四象限
                K=K+2*pi;  
            else
                K=K;
            end
        end
    end
    function Theta=Func_Theta_Pos(Alpha)
    
    if Alpha >= 3*pi/2
        Theta = Alpha-3*pi/2;
    else
        Theta = Alpha+pi/2;
    end
    
    end
    function [RefTraj_x,RefTraj_y,RefTraj_theta,RefTraj_delta]=Func_CircularReferenceTrajGenerate(Pos_x,Pos_y,CEN_x,CEN_y,Radius,N,Velo,Ts,L)
    %RefTraj为要生成的参考路径
    %Pos_x,Pos_y为车辆坐标
    %CEN_x,CEN_y,Radius圆心与半径
    %N要生成几个参考点,即预测空间。
    %Velo,Ts车速与采样时间
    %L汽车的轴距
    RefTraj=zeros(N,4);%生成的参考路径
    Alpha_init=Func_Alpha_Pos(CEN_x,CEN_y,Pos_x,Pos_y);%首先根据车辆位置和圆心确定alpha
    
    Omega=Velo/Radius%已知车速和半径,可以求得角速度。
    
    DFWA=atan(L/Radius);
    
    for k=1:1:N
        Alpha(k)=Alpha_init+Omega*Ts*(k-1);
        RefTraj(k,1)=Radius*cos(Alpha(k))+CEN_x;%x
        RefTraj(k,2)=Radius*sin(Alpha(k))+CEN_y;%y
        RefTraj(k,3)=Func_Theta_Pos(Alpha(k));%theta  
     
        RefTraj(k,4)=DFWA;%前轮偏角,可以当做前馈量
    
    end
    RefTraj_x= RefTraj(:,1);
    RefTraj_y= RefTraj(:,2);
    RefTraj_theta= RefTraj(:,3);
    RefTraj_delta= RefTraj(:,4);
    
    end
    function [X,Y,H]=Func_VehicleKineticModule_Euler(x,y,heading,vel,FWA,DFWA,T,L)
    %车辆运动学模型,状态量,x,y,heading;控制量:vel=constant,FWA
    %固定的步数,来求得数值解
    
    %%
    %initial the status of the vehicle
    num=100;
    Xmc=zeros(1,num);
    Ymc=zeros(1,num);
    Headingmc=zeros(1,num);
    Xmc(1)=x;
    Ymc(1)=y;%x,y初始坐标
    Headingmc(1)=heading;%航向,
    
    Headingrate=zeros(1,num);
    FrontWheelAngle=zeros(1,num);
    
    t=T/num;
    %%
    FrontWheelAngle=linspace(FWA,DFWA,num);%前轮偏角
    Headingrate=vel*tan(FrontWheelAngle)/L;
    for i=2:num
        Headingmc(i)=Headingmc(i-1)+Headingrate(i)*t;
        Xmc(i)=Xmc(i-1)+vel*t*cos(Headingmc(i-1));
        Ymc(i)=Ymc(i-1)+vel*t*sin(Headingmc(i-1));
    end
    %%
        X=Xmc(num);
        Y=Ymc(num);
        H=Headingmc(num);
    end
    
    %% test
    % [X,Y,H]=VehicleKineticModule_Euler(0,0,0,10,0,3,0.1,2.85)
    %plot(X,Y,'b');
    

    现在再看看MPC的代码实现

    clc;
    close all;
    clear all;
    %% 参考轨迹生成
    N=100;%参考轨迹点数量
    T=0.05;%采样时间,控制周期
    % Xout=zeros(2*N,3);
    % Tout=zeros(2*N,1);
    Xout=zeros(N,3);
    Tout=zeros(N,1);
    for k=1:1:N
        Xout(k,1)=k*T;
        Xout(k,2)=2;
        Xout(k,3)=0;
        Tout(k,1)=(k-1)*T;
    end
    
    %% Tracking a constant reference trajectory
    Nx=3;%状态量个数
    Nu =2;%控制量个数
    Tsim =20;%仿真时间
    X0 = [0 0 pi/3];%初始状态
    [Nr,Nc] = size(Xout); % Nr is the number of rows of Xout,100*3
    % Mobile Robot Parameters
    c = [1 0 0 0;0 1 0 0;0 0 1 0;0 0 0 1];
    L = 1;%车辆轴距
    Rr = 1;
    w = 1;
    % Mobile Robot variable Model
    vd1 = Rr*w; % For circular trajectory,参考系统的纵向速度
    vd2 = 0;%参考系统的前轮偏角
    
    %根据控制系统的维度信息,提前定义好相关矩阵并赋值
    x_real=zeros(Nr,Nc);%X的真实状态
    x_piao=zeros(Nr,Nc);%X的误差状态
    u_real=zeros(Nr,2);%真实控制量
    u_piao=zeros(Nr,2);%误差控制量
    x_real(1,:)=X0;%初始状态
    x_piao(1,:)=x_real(1,:)-Xout(1,:);%与预期的误差值
    X_PIAO=zeros(Nr,Nx*Tsim);
    XXX=zeros(Nr,Nx*Tsim);%用于保持每个时刻预测的所有状态值
    q=[1 0 0;0 1 0;0 0 0.5];
    Q_cell=cell(Tsim,Tsim);
    for i=1:1:Tsim
        for j=1:1:Tsim
            if i==j
                Q_cell{i,j}=q;
            else 
                Q_cell{i,j}=zeros(Nx,Nx);
            end 
        end
    end
    Q=cell2mat(Q_cell);%权重矩阵
    R=0.1*eye(Nu*Tsim,Nu*Tsim);%权重矩阵
    
    %模型预测控制主体
    for i=1:1:Nr
        t_d =Xout(i,3);
        a=[1    0   -vd1*sin(t_d)*T;
           0    1   vd1*cos(t_d)*T;
           0    0   1;];
        b=[cos(t_d)*T   0;
           sin(t_d)*T   0;
           0            T;];     
        A_cell=cell(Tsim,1);
        B_cell=cell(Tsim,Tsim);
         for j=1:1:Tsim
            A_cell{j,1}=a^j;
            for k=1:1:Tsim
               if k<=j
                    B_cell{j,k}=(a^(j-k))*b;
               else
                    B_cell{j,k}=zeros(Nx,Nu);
               end
            end
        end
        A=cell2mat(A_cell);
        B=cell2mat(B_cell);
        
        H=2*(B'*Q*B+R);
        f=2*B'*Q*A*x_piao(i,:)';
        A_cons=[];
        b_cons=[];
        lb=[-1;-1];
        ub=[1;1];
        tic
        [X,fval(i,1),exitflag(i,1),output(i,1)]=quadprog(H,f,A_cons,b_cons,[],[],lb,ub);%二次规划求解
        toc
        X_PIAO(i,:)=(A*x_piao(i,:)'+B*X)';
        if i+j<Nr
             for j=1:1:Tsim
                 XXX(i,1+3*(j-1))=X_PIAO(i,1+3*(j-1))+Xout(i+j,1);
                 XXX(i,2+3*(j-1))=X_PIAO(i,2+3*(j-1))+Xout(i+j,2);
                 XXX(i,3+3*(j-1))=X_PIAO(i,3+3*(j-1))+Xout(i+j,3);
             end
        else
             for j=1:1:Tsim
                 XXX(i,1+3*(j-1))=X_PIAO(i,1+3*(j-1))+Xout(Nr,1);
                 XXX(i,2+3*(j-1))=X_PIAO(i,2+3*(j-1))+Xout(Nr,2);
                 XXX(i,3+3*(j-1))=X_PIAO(i,3+3*(j-1))+Xout(Nr,3);
             end
        end
        u_piao(i,1)=X(1,1);
        u_piao(i,2)=X(2,1);
        Tvec=[0:0.05:4];
        X00=x_real(i,:);
        vd11=vd1+u_piao(i,1);
        vd22=vd2+u_piao(i,2);
        XOUT=dsolve('Dx-vd11*cos(z)=0','Dy-vd11*sin(z)=0','Dz-vd22=0','x(0)=X00(1)','y(0)=X00(2)','z(0)=X00(3)');
         t=T; 
         x_real(i+1,1)=eval(XOUT.x);
         x_real(i+1,2)=eval(XOUT.y);
         x_real(i+1,3)=eval(XOUT.z);
         if(i<Nr)
             x_piao(i+1,:)=x_real(i+1,:)-Xout(i+1,:);
         end
        u_real(i,1)=vd1+u_piao(i,1);
        u_real(i,2)=vd2+u_piao(i,2);
        
        figure(1);
        plot(Xout(1:Nr,1),Xout(1:Nr,2));
        hold on;
        plot(x_real(i,1),x_real(i,2),'r*');
        title('跟踪结果对比');
        xlabel('横向位置X');
        axis([-1 5 -1 3]);
        ylabel('纵向位置Y');
        hold on;
        for k=1:1:Tsim
             X(i,k+1)=XXX(i,1+3*(k-1));
             Y(i,k+1)=XXX(i,2+3*(k-1));
        end
        X(i,1)=x_real(i,1);
        Y(i,1)=x_real(i,2);
        plot(X(i,:),Y(i,:),'y.')
        hold on;
        
    end
    % figure(5)
    % plot(X(2,:),Y(2,:),'b');
    %% 以下为绘图部分
    figure(2)
    subplot(3,1,1);
    plot(Tout(1:Nr),Xout(1:Nr,1),'k--');
    hold on;
    plot(Tout(1:Nr),x_real(1:Nr,1),'k');
    %grid on;
    %title('状态量-横向坐标X对比');
    xlabel('采样时间T');
    ylabel('横向位置X')
    subplot(3,1,2);
    plot(Tout(1:Nr),Xout(1:Nr,2),'k--');
    hold on;
    plot(Tout(1:Nr),x_real(1:Nr,2),'k');
    %grid on;
    %title('状态量-横向坐标Y对比');
    xlabel('采样时间T');
    ylabel('纵向位置Y')
    subplot(3,1,3);
    plot(Tout(1:Nr),Xout(1:Nr,3),'k--');
    hold on;
    plot(Tout(1:Nr),x_real(1:Nr,3),'k');
    %grid on;
    hold on;
    %title('状态量-\theta对比');
    xlabel('采样时间T');
    ylabel('\theta')
    
    figure(3)
    subplot(2,1,1);
    plot(Tout(1:Nr),u_real(1:Nr,1),'k');
    %grid on;
    %title('控制量-纵向速度v对比');
    xlabel('采样时间T');
    ylabel('纵向速度')
    subplot(2,1,2)
    plot(Tout(1:Nr),u_real(1:Nr,2),'k');
    %grid on;
    %title('控制量-角加速度对比');
    xlabel('采样时间T');
    ylabel('角加速度')
    
    figure(4)
    subplot(3,1,1);
    plot(Tout(1:Nr),x_piao(1:Nr,1),'k');
    %grid on;
    xlabel('采样时间T');
    ylabel('e(x)');
    subplot(3,1,2);
    plot(Tout(1:Nr),x_piao(1:Nr,2),'k');
    %grid on;
    xlabel('采样时间T');
    ylabel('e(y)');
    subplot(3,1,3);
    plot(Tout(1:Nr),x_piao(1:Nr,3),'k');
    %grid on;
    xlabel('采样时间T');
    ylabel('e(\theta)');

    添加了一些注释,但是感觉这个代码写的不是很好。

    下次看到好的MPC代码我会放上来。

    展开全文
  • MPC5200MPC5200

    2009-10-02 17:43:02
    MPC5200MPC5200MPC5200MPC5200MPC5200MPC5200MPC5200MPC5200MPC5200MPC5200MPC5200MPC5200
  • MPC绿色版MPC绿色版MPC绿色版MPC绿色版MPC绿色版MPC绿色版
  • simple-mpcMPC的GNU Emacs前端
  • MPC chengxu

    2014-10-17 15:41:30
    mpc 程序,希望这个程序对mpc能有帮助
  • Convex MPC

    2020-12-27 05:14:21
    <p>I wanted to know if you have any thoughts on where I should get started to solve convex MPC problems with the control toolbox. For example, would you be able to use this architecture to solve the ...
  • mpc013_mpc014_mpc014g四轴SPI串口G代码插补运动控制模块参考手册
  • 为您提供MPC播放器 MPC-BE下载,最强的播放器MPC-HC没落了,MPC-BE来了。mpc-be 是从mpc-hc分离出来的,以俄国程序员主打,重新编译优化的版本,解码器不同,界面也多有美化。MPC-BE在保留所有特点的基础上花功夫改进...
  • 为您提供MPC播放器 MPC-BE下载,最强的播放器MPC-HC没落了,MPC-BE来了。mpc-be 是从mpc-hc分离出来的,以俄国程序员主打,重新编译优化的版本,解码器不同,界面也多有美化。MPC-BE在保留所有特点的基础上花功夫改进...
  • 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 Multiplayer

    2020-12-08 22:01:03
    <div><p>Loved GBA4iOS 2.1 beta ability to do gamelinks using MPC. <p>I'd love to try helping out to add this functionality to Delta. <p>Have you planned on adding this? </p><p>该提问来源于开源项目...
  • Add mpc

    2020-12-28 07:23:59
    <p>Builds mpc on Mac and Linux. Borrows the recipe from conda recipes. Makes some tweaks to fix in conda-forge.</p><p>该提问来源于开源项目:conda-forge/staged-recipes</p></div>
  • 自适应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 ...
  • 飞思卡尔MPC8640D/MPC8641D开发板原理图,带ULi南桥,方案不错,就是现在这种南桥芯片不太好找 HPCNSCH.pdf (771.14 KB, 下载次数: 568 ) 卡尔 , 开发
  • Explicit MPC Solutions

    2017-06-02 11:41:28
    Explicit MPC Solutions
  • MPC控制

    2020-05-28 13:02:39
    模型预测控制(MPC)简介 MPC是一个总称,有着各种各样的算法。其动态矩阵控制(DMC)是代表作。

    基于状态空间模型的控制

    模型预测控制(MPC)简介                   对基于状态空间模型的控制理解得很到位

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

    【控制理论】线性二次型最优控制解析               这个讲的LQR很好。这个博主的博客可以都看看,感觉控制方向的都写得不错 

    状态空间模型                   写得很易懂

     

    仔细看下面这一段:

    系统状态会发生变化,那么这个变化应当和什么有关呢?一个是系统当前的状态,一个是系统的输入。比如一个弹簧滑块系统,滑块的加速度(收到的外力)和系统当前的位置有关(弹簧弹力),也和外力输入有关(人手或电机给与滑块一个外力)。将输入记为u。系统状态的变化,对于连续系统而言,是系统的导数,对于离散系统而言,是系统状态的变化量,一般取为系统下一时刻的状态,二者包含的信息一致。于是有了如下方程

    连续系统

    这个方程描述了  系统如何变化,也就是下一时刻的状态是怎样随这一时刻的状态和这一时刻的输入而变化的,可以称之为 系统的演化模型,描述系统如何演化的。

     

    状态变量与状态方程             把系统变为   一阶微分方程

    教了如何在已知系统微分方程或传递函数的前提下,列写状态方程(包括状态变量的寻找)

    现代控制理论_状态变量及状态空间

    讲了如何画控制框图

    现控笔记(二):状态空间表达式         具体说了二阶三阶的框图

    控制理论学习笔记(7)——状态空间(state space) 


    预测控制

    预测控制-百度百科

    模型预测控制(MPC)简介

     

    预测控制,即模型预测控制(MPC),MPC是一个总称,有着各种各样的算法。其动态矩阵控制(DMC)是代表作。

    动态矩阵控制的基本原理    

    预测模型那一部分讲得比较清楚

    动态矩阵控制算法实验报告工科 

     

    【控制理论】预测控制分析


    MPC-双输入单输出控制

    对于双输入双输出系统的模型预测控制(DMC)的MATLAB实现


    Lecture14_MPC

    Model predictive control

    Model predictive control (MPC) is an advanced method of process control that is used to control a process while satisfying a set of constraints. It has been in use in the process industries in chemical plants and oil refineries since the 1980s. In recent years it has also been used in power system balancing models[1] and in power electronics.[2] Model predictive controllers rely on dynamic models of the process, most often linear empirical models obtained by system identification. The main advantage of MPC is the fact that it allows the current timeslot to be optimized, while keeping future timeslots in account. This is achieved by optimizing a finite time-horizon, but only implementing the current timeslot and then optimizing again, repeatedly, thus differing from Linear-Quadratic Regulator (LQR). Also MPC has the ability to anticipate future events and can take control actions accordingly. PID controllers do not have this predictive ability. MPC is nearly universally implemented as a digital control, although there is research into achieving faster response times with specially designed analog circuitry.[3]

    Generalized predictive control (GPC) and dynamic matrix control (DMC) are classical examples of MPC.[4]

    Understanding Model Predictive Control, Part 1: Why Use MPC?

    MPC is a feedback control algorithm that uses a model to make predictions about future outputs of a process.

    Here’s an analogy to explain what we mean: Say that you’re driving and your goal is to keep the car within the lane. The decisions you make to achieve this goal are very similar to how a model predictive controller works. You know your car’s characteristics: how fast it goes or how much it turns based on the control actions you take. Using this model of the car, you do simulations in your head. These give you predictions about your future trajectory based on the control actions you choose. Then you select the optimal action that drives the predicted trajectory as close as possible to the desired trajectory. 

    以下引自论文 MPC-based 3-D trajectory tracking for an autonomous underwater vehicle with constraints in complex ocean environments :

    MPC is a numerical optimization-based control strategy, in which a system model is designed to predict the future control inputs and the future plant responses. It has a sound theoretical basis. By computing a sequence of future system input adjustment, the MPC controller attempts to optimize future plant responses at each regular interval (Qin and Badgwell, 2003). A system cost function is constructed which refers to the errors between the predicted system responses and the desired system outputs. By minimizing the cost function, the optimal control input sequence of the future  sampling instants can be obtained. During solving the optimization problem, the input and state constraints can be explicitly tackled, which can improve the robustness of the system. Rolling optimization and feedback correction are the main characteristics of MPC, which can effectively reduce or even eliminate the time-delay in a closed-loop system (Wang et al., 2018). Therefore, the MPC-based system can achieve excellent stability, optimality, and robustness (Mayne et al., 2000; Rawlings, 2002).

    MPC轨迹跟踪 

    MPC运动学方法实现轨迹跟踪推导

    自动驾驶——模型预测控制(MPC)理解与实践   约束设置那部分有一定的参考意义

    基于CppAD的ipopt控制器进行二次规划求解最优解 (C++)

    自编Matlab代码实现MPC基本算法        两个实现关键点,说得很清楚

    Matlab实现 

    二次规划问题和MATLAB函数quadprog的使用

    quadprog函数的介绍和应用

    展开全文
  • 飞思卡尔MPC5744开发板DEVKIT-MPC5744电路原理图,详细说明了开发板设计的原理,可供参考
  • ECShop MPC黑色模板

    2020-08-24 03:39:25
    ECShop MPC黑色模板
  • mpc003,mpc004,mpc006,mpc004s运动控制芯片模块DIP-30封装,可与普通单片机通过串口连接对步进电机或伺服电机进行控制。单模块最高六轴输出,最高脉冲输出频率为2MHz,最高二路正交编码输入,带同步功能可接手轮,多个...
  • MPC_control_robot:基于MPC的移动机器人轨迹跟踪控制
  • [mpc] add mpc/1.1.0

    2020-12-02 08:12:54
    <p>Specify library name and version: <strong>mpc/1.1.0</strong></p> <ul><li>[x] I've read the <a href="https://github.com/conan-io/conan-center-index/wiki#how-to-submit-a-pull-request">guidelines...
  • ECShop mpc紫色模板

    2019-11-26 16:15:26
    ECShop mpc紫色模板
  • ECShop mpc黑色模板

    2019-11-26 16:13:58
    ECShop mpc黑色模板
  • MPC8568ERM.pdf

    2021-05-10 16:20:27
    MPC8568ERM

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 6,668
精华内容 2,667
关键字:

mpc