一个简单的协同自适应巡航控制的MPC控制器设计源码程序 - matlab算法设计 - 谷速源码
下载频道> 资源分类> matlab源码> 算法设计> 一个简单的协同自适应巡航控制的MPC控制器设计源码程序

标题:一个简单的协同自适应巡航控制的MPC控制器设计源码程序
分享到:

所属分类: 算法设计 资源类型:程序源码 文件大小: 47.39 KB 上传时间: 2019-07-16 23:14:11 下载次数: 2 资源积分:1分 提 供 者: jiqiren 20190716111434916
内容:
%求解有约束预测控制问题,函数返回值为系统输出及控制输入
%此函数针对无限预测时域与有限控制时域的情况
%function [Y,U]=cmpcQP()
clear;
%初始化
load dstatespace.mat;%下载辨识出的状态空间模型
%输入输出个数
usize=size(Bd,2);
ysize=size(C,1);
xsize=size(Ad,1);
YW=[10 0 0 0;0 6 0 0;0 0 3 0;0 0 0 0];%输出误差加权阵
% YW=[10 0;0 1];%输出误差加权阵
UW=0;%输入加权阵
m=5;%控制时域
p=10;%预测时域
Ts=0.1;%采样周期
Tend=30;%仿真总时间
Nrow=Tend/Ts+m;
LR1=5*ones(Nrow,1);%L1输出期望值
LR2=zeros(Nrow,1);%L2输出期望值
LR3=zeros(Nrow,1);%L2输出期望值
LR4=zeros(Nrow,1);%L2输出期望值
r=[LR1 LR2 LR3 LR4];
% r=[LR1 LR2];
 
L=zeros(Nrow,3);
for k=1:1:150
    L(k,1)=0;
    L(k,2)=3;
    L(k,3)=3*k*Ts+2;
end
for k=151:1:160
    L(k,1)=-1;
    L(k,2)=L(k-1,2)+L(k,1)*Ts;
    L(k,3)=L(k-1,3)+L(k-1,2)*Ts+0.5*L(k,1)*Ts*Ts;
end
for k=161:1:Nrow
    L(k,1)=0;
    L(k,2)=L(k-1,2);
    L(k,3)=L(k-1,3)+L(k-1,2)*Ts;
end
 
 
% v=zeros(1,Nrow);
% for i=20:1:24
%     v(1,i)=0.5;
% end
% for i=40:1:44
%     v(1,i)=-1.5;
% end
 
% % %产生均值为a,标准差为b的白噪声
% % n=randn(1,Nrow); 
% % n=n/std(n); 
% % n=n-mean(n);
% % a=0;         %均值为0
% % b=sqrt(0.01); %方差为0.01
% % n=a+b*n;
% % %dn=[n;n];
% % dn=n;
% % K=[0.1;0.1;0.1;0.1];
 
%输出约束
% % YMAX=ones(2*m,1);
% % for i=1:2*m
% %     if rem(i,2)==0
% %         YMAX(i,1)=3;
% %     else
% %         YMAX(i,1)=3;
% %     end
% % end
% % YMIN=ones(2*m,1);
% % for i=1:2*m
% %     if rem(i,2)==0
% %         YMIN(i,1)=-3;
% %     else
% %         YMIN(i,1)=0;
% %     end
% % end
YMAX=ones(4*m,1);
for i=1:4*m
    if rem(i,4)==0
        YMAX(i,1)=40;
    elseif rem(i,3)==0
         YMAX(i,1)=Inf;
    elseif rem(i,2)==0&&rem(i,4)~=0
        YMAX(i,1)=30;
    else
        YMAX(i,1)=10;
    end
end
YMIN=ones(4*m,1);
for i=1:4*m
    if rem(i,4)==0
        YMIN(i,1)=0;
    elseif rem(i,3)==0
         YMIN(i,1)=-Inf;
    elseif rem(i,2)==0&&rem(i,4)~=0
        YMIN(i,1)=-30;
    else
        YMIN(i,1)=0;
    end
end
 
%输入约束
UMAX=2*ones(m,1);
UMIN=-4.5*ones(m,1);
%输入变化率约束
DUMAX=3*ones(m,1);
DUMIN=-3*ones(m,1);
II=eye(m*usize);
IDI=II-[zeros(usize,m*usize);eye((m-1)*usize) zeros((m-1)*usize,usize)];
%调用转化为QP标准型中二次型矩阵的函数
[H,f,YC]=genQP(Ad,Bd,C,YW,UW,m,p);
H=(H'+H)/2;%将H转化为对称阵
%产生不等式约束阵A
A=[YC;-YC;II;-II;IDI;-IDI];
X=zeros(xsize,Nrow);
X(1,1)=2;
X(2,1)=2;
X(3,1)=0;
X(4,1)=1;
U=zeros(m*usize,Nrow);
 
XR=zeros(3,Nrow);
 
k=0;%初始步数
t=Ts*k;
x=X(:,k+1);%初始状态 
 
xr=XR(:,k+1);
XR(1,1)=0;
XR(2,1)=1;
XR(3,1)=0;
% for k=1:1:Nrow
%     vl=1;
%     pl=2*k*Ts+2;
% end
 
 
for i=0:Ts:Tend
    [F,CL]= get_F(Ad,C,f,r(k+1:k+m,:),x,m);
    b=[YMAX-CL;CL-YMIN;UMAX;-UMIN;DUMAX;-DUMIN];
    U(:,k+2)=quadprog(H,F,A,b);%求解QP问题得到最优解U(k)
%     X(:,k+2)=Ad*x+Bd*U(1:usize,k+2);
    XR(:,k+2)=ARd*xr+BRd*U(1:usize,k+2);
%     X(:,k+2)=Ad*x+Bd*U(1:usize,k+2)+K*dn(:,k+1);
%     X(:,k+2)=Ad*x+Bd*U(1:usize,k+2)+Bd1*v(1,k+2);
    k=k+1;
%     x=X(:,k+1);
    xr=XR(:,k+1);
%     vl=3;
%     pl=3*k*Ts+2;
    vl=L(k,2);
    pl=L(k,3);
    X(1,k+1)=(pl-xr(1,1)-xr(2,1));
    X(2,k+1)=(vl-xr(2,1));
    X(3,k+1)=xr(3,1);
    X(4,k+1)=xr(2,1);
    x=X(:,k+1);
    t=[t;Ts*k];
end
 
 
 
Y=C*X;
save('cmpc_data.mat');
%绘制输入输出曲线
figure(1);
subplot(2,1,1)
plot(0:Ts:Tend,Y(1,1:Tend/Ts+1));
hold on;
plot(0:Ts:Tend,Y(2,1:Tend/Ts+1),'r');
xlabel('Time(sec)');
ylabel('error_real');
hold on;
plot(0:Ts:Tend,Y(3,1:Tend/Ts+1),'y');
hold on;
plot(0:Ts:Tend,Y(4,1:Tend/Ts+1),'g');
grid on;
title('Outputs');
legend('ep_real','e_v','ai+1','vi+1'); 
 
subplot(2,1,2)
plot(0:Ts:Tend,U(1,1:Tend/Ts+1));
grid on;
xlabel('Time(sec)');
ylabel('a_real()');
title('Manipulated Variables'); 
legend('u');
 
figure(2);
plot(0:Ts:Tend,L(1:Tend/Ts+1,3),'r');
hold on
plot(0:Ts:Tend,XR(1,1:Tend/Ts+1),'b');
grid on 
title('positions');
xlabel('Time(sec)');
ylabel('positions');
legend('P_l','P_f');
 
figure(3);
plot(0:Ts:Tend,L(1:Tend/Ts+1,2),'r');
hold on
plot(0:Ts:Tend,XR(2,1:Tend/Ts+1),'b');
grid on 
title('velocity');
xlabel('Time(sec)');
ylabel('velocity');
legend('V_l','V_f');

文件列表(点击上边下载按钮,如果是垃圾文件请在下面评价差评或者投诉):

cmpcQP.asv
cmpcQP.m
cmpc_data.mat
dstatespace.mat
genQP.m
get_F.m
state_model_c2d.asv
state_model_c2d.m

关键词: 协同自适应巡航控制 PC控制器设计

Top_arrow
回到顶部
联系方式| 版权声明| 招聘信息| 广告服务| 银行汇款| 法律顾问| 兼职技术| 付款方式| 关于我们|
网站客服网站客服 程序员兼职招聘 程序员兼职招聘
沪ICP备19040327号-3
公安备案号:沪公网安备 31011802003874号
库纳格流体控制系统(上海)有限公司 版权所有
Copyright © 1999-2014, GUSUCODE.COM, All Rights Reserved