• 大小: 4KB
    文件类型: .m
    金币: 1
    下载: 0 次
    发布日期: 2023-12-26
  • 语言: Matlab
  • 标签:

资源简介

此代码是关于无人驾驶车辆的直线轨迹跟踪模型预测控制算法实现

资源截图

代码片段和文件信息

N=100;
T=0.05;
Xout=zeros(N3);
Tout=zeros(N1);
for k=1:1:N
    Xout(k1)=k*T;
    Xout(k2)=2;
    Xout(k3)=0;
    Tout(k1)=(k-1)*T;
end

Nx=3;
Nu=2;
[NrNc]=size(Xout);
Tsim=30;
X0=[0 0 pi/3];
L=1;
vd1=1;
vd2=0;


x_real=zeros(NrNc);
x_piao=zeros(NrNc);
u_real=zeros(NrNu);
u_piao=zeros(NrNu);
x_real(1:)=X0;
x_piao(1:)=x_real(1:)-Xout(1:);
X_PIAO=zeros(NrNx*Tsim);
XXX=zeros(NrNx*Tsim);
q=[1 0 0;0 1 0;0 0 0.5];
Q_cell=cell(TsimTsim);
for i=1:1:Tsim
    for j=1:1:Tsim
        if i==j
            Q_cell{ij}=q;
         else
            Q_cell{ij}=zeros(NxNx);
        end
    end
end
Q=cell2mat(Q_cell);
R=0.1*eye(Nu*TsimNu*Tsim);


for i=1:1:Nr
    t_d=Xout(i3);
    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;
       vd2*T/L  vd1*T/(cos(vd2)^2);];
    A_cell=cell(Tsim1);
    B_cell=cell(TsimTsim);
  for j=1:1:Tsim
      A_cell{j1}=a^j;
      for k=1:1:Tsim
          if k<=j
              B_cell{jk}=(a^(j-k))*b;
          else        
              
            B_cell{jk}=zeros(NxNu);
          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=[-2.2;-0.64];
  ub=[0.2;0.64];
  [Xfval(i1)exitflag(i1)output(i1)]=quadprog(HfA_consb_cons[][]lbub);
  X_PIAO(i:)=(A*x_piao(i:)‘+B*X)‘;
  if i+j      for j=1:1:Tsim
   XXX(i1+3*(j-1))=X_PIAO(i1+3*(j-1))+Xout(i+j1);
   XXX(i2+3*(j-1))=X_PIAO(i2+3*(j-1))+Xout(i+j2);
   XXX(i3+3*(j-1))=X_PIAO(i3+3*(j-1))+Xout(i+j3);
      end
   else
      for j=1:1:Tsim
    XXX(i1+3*(j-1))=X_PIAO(i1+3*(j-1))+Xout(Nr1);
    XXX(i2+3*(j-1))=X_PIAO(i2+3*(j-1))+Xout(Nr2);
    XXX(i3+3*(j-1))=X_PIAO(i3+3*(j-1))+Xout(Nr3);
      end
  end

评论

共有 条评论