线性二次最优控制-圆轨迹跟踪matlab

    点击查看代码
     
    clear all;
    close all;
    clc;
     
    %% 参数
    ts=0.1;
    t=30;
    d=1.45;
     
    %% 初始状态
    x(1)=0;
    y(1)=0;
    xita(1)=0;
    v=3;
    w=0.2;
    u=[v;w];
    Z(:,1)=[-3;-3;0.2];
    for k=1:1:t/ts
        times(k+1)=k*ts;
        X(:,k)=[cos(xita(k)) -d*sin(xita(k));
                    sin(xita(k)) d*cos(xita(k));
                    0 1]*u;
        %% 状态更新
        x(k+1)=x(k)+X(1,k)*ts;
        y(k+1)=y(k)+X(2,k)*ts;
        xita(k+1)=xita(k)+X(3,k)*ts;
        
        
        A=[0 0 -v*sin(xita(k))-d*w*cos(xita(k));
            0 0 v*cos(xita(k))-d*w*sin(xita(k));
            0 0 0];
        B=[cos(xita(k)) -d*sin(xita(k));
            sin(xita(k)) d*cos(xita(k));
            0 1];
        Q=[2 0 0;
            0 2 0;
            0 0 2];
        R=[1 0; 0 1];
        K=lqr(A,B,Q,R);
        Z_=(A-B*K)*Z(:,k);%每秒变化率
        Z(:,k+1)=Z(:,k)+Z_*ts;%每步变化率
        xc(k)=Z(1,k)+x(k); %跟踪轨迹
        yc(k)=Z(2,k)+y(k);
    end
     
     
    figure(1)
    for k=1:1:length(xc)
    plot(x,y,'r','Linewidth',2);
    hold on;
    plot(xc(k),yc(k),'sb','MarkerSize',10);
    pause(0.1);
    end
    figure(2)
    plot(times,Z(1,:),'r');
    figure(3)
    plot(times,Z(2,:),'r');
    figure(4);
    plot(times,Z(3,:),'r');
    
    posted @   相对维度  阅读(77)  评论(0编辑  收藏  举报
    相关博文:
    阅读排行:
    · 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
    · 地球OL攻略 —— 某应届生求职总结
    · 周边上新:园子的第一款马克杯温暖上架
    · 提示词工程——AI应用必不可少的技术
    · Open-Sora 2.0 重磅开源!
    点击右上角即可分享
    微信分享提示