控制类论文复现(1)

目录

前言

一、论文理论知识

1、系统描述

2、输出反馈控制器

二、MATLAB仿真

1.船系统描述

2.MATLAB代码

3.仿真结果

总结

前言

本文复现论文"Global Output-Feedback Prescribed Performance Control of Nonlinear Systems With Unknown Virtual Control Coefficients"中设计的控制算法,使用MATLAB验证论文中控制算法的有效性。

一、论文理论知识

1、系统描述

        考虑下述的非线性系统:

\begin{align*} \begin{split} \left \{ \begin{array}{ll} \dot{z}=f_0(z,y,d), \\ \dot{x}_i=f_i(z,y,d)+b_ix_{i+1}, \quad i=1,\dots,n-1\\ \dot{x}_n=f_n(z,y,d)+b_nu, \\ y=x_1 \end{array} \right. \end{split} \end{align*}

其中 z \in R^m 和  x=[x_1,\dots,x_n]^T 表示系统的状态,u \in R和 y \in R分别表示系统的输入和输出,d \in R^q表示有界扰动,并且是时变的和关于时间分段连续的。f_i(z,y,d)表示非线性函数。

        由于系统中存在不可测的状态变量,故使用输入驱动滤波器来补偿系统中存在不可测的状态变量,其形式为:

\begin{align*} \begin{split} \left \{ \begin{array}{ll} \dot{\hat{s}}_i=-l_i\hat{s}_1+ \hat{s}_{i+1},\quad \hat{s}_i(0)=0,\quad, i=1,\dots, n-1\\ \dot{\hat{s}}_n=-l_n\hat{s}_1+u,\quad \hat{s}_n(0)=0 \end{array} \right. \end{split} \end{align*}

其中l_1,\dots,l_n为待设计的参数,但是必须满足

L=\left[ \begin{matrix} -l_1 & & & \\ \vdots & & I_{n-1} & \\ -l_n & 0 & \cdots & 0 \\ \end{matrix} \right]

是赫尔维茨矩阵,I_{n-1}是单位矩阵,此外,\tilde{s}_i满足

\tilde{s}_i=s_i-\hat{s}_i, \quad i=1,\dots,n,

s_i=\frac{x_i}{\underline{b}_i}, \quad \underline{b}_i=b_i\dots b_n, \quad i=1,\dots,n.

2、输出反馈控制器

选择一个调节函数:

\begin{align*} \phi(t) = \begin{split} \left \{ \begin{array}{ll} {\rm{sin}}(\frac{\pi t}{2 \tau}) \quad {\rm{if}} \quad t<\tau\\ 1 \qquad \rm otherwise \end{array} \right. \end{split} \end{align*}

其中\tau是一个正常数。

定义barrier function 为

\eta_1(e_1,k_1)={\rm{tan}}(\frac{\pi e_1}{2 k_1})

其中e_1(t)=\phi (t)(y(t)-r(t))r(t)表示参考轨迹,e_1(t)表示跟踪误差。

虚拟控制器被设计为:

\alpha_1=c_1\eta_1g(\eta_1)

e_i=\hat{s}_i-\alpha_{i-1}

\eta_i={\rm{tan}}(\frac{\pi e_i}{2 k_i})

\alpha_i=-c_i \eta_i

其中 i=2,\dots,n。实际控制率被设计为

u=\alpha_n

本节为论文理论部分,主要涉及的是论文中控制器的设计过程,文章中的引理,定理和系统稳定性分析没有涉及,读者可以自行拜读论文,这样可以加深对文章算法的设计过程的理解,为后续自己的论文重新提供更多的想法。

二、MATLAB仿真

1.船系统描述

考虑船的系统

\ddot{y}+C\dot{y}+K(ay^3+by)=Ku

其中y表示船的航向角速度,u表示舵角,a,b,CK表示船舶的质量和动力系数。船的动力学参数被设定义为a=5.5, \quad b=4, \quad C=3.5, \quad K=0.05。初始值被设计为y(0)=1, \quad \dot{y}(0)=4y(0)=-0.5, \quad \dot{y}(0)=-2.3。控制目标使输出信息y跟踪上参考轨迹r=\rm{sin} (0.5t)满足

\left | y(t)-r(t) \right |<0.05, t\geqslant 5

令 x_1=yx_2=\dot{y}+Cy,可以将船的运动学方程转换为

\begin{align*} \phi(t) = \begin{split} \left \{ \begin{array}{ll} \dot{x}_1=-Cy+x_2\\ \dot{x}_2=-K(ay^3+by)+Ku \end{array} \right. \end{split} \end{align*}

初始值被设计为\overline{x}=\left [ 1,2 \right ]^T\underline{x}(0)=\left [ -0.5,0.2 \right ]^T,考虑扰动和零动力学,船的动力学系统被重新定义为

\begin{align*}\begin{split} \left \{ \begin{array}{ll} \dot{z}=-2z+y^3\\ \dot{x}_1=-Cy+x_2\\ \dot{x}_2=-K(ay^3+by+z^3-0.2{\rm{cos}}(2t))+Ku \end{array} \right. \end{split} \end{align*}

其中z(0)=0,输入驱动滤波器被设计为:

\begin{align*} \begin{split} \left \{ \begin{array}{ll} \dot{\hat{s}}_1=-2\hat{s}_1+ \hat{s}_{2},\quad \hat{s}_1(0)=0,\\ \dot{\hat{s}}_2=-10\hat{s}_1+u,\quad \hat{s}_2(0)=0. \end{array} \right. \end{split} \end{align*}

调节函数被定义为:

\begin{align*} \phi(t) = \begin{split} \left \{ \begin{array}{ll}{ \rm{sin}}(\frac{\pi t}{10}) \quad {\rm{if}} \quad t<5\\ 1 \qquad {\rm otherwise} \end{array} \right. \end{split} \end{align*}

控制器被设计为:

\alpha_1=c_1\eta_1g(\eta_1)=4*{\rm{tan}}(\frac{\pi e_1}{0.1})*{\rm cos}({\rm{tan}}(\frac{\pi e_1}{0.1}))^2

u=\alpha_2=-c_2 \eta_2=-10*{\rm{tan}}(\frac{\pi e_2}{2})

2.MATLAB代码

function dx =lifei3(t,x,num,C,K,a,b,c_2,k_2,c_1,k_1,tao,l_1,l_2)
z1=x(1:num);
x1=x(num+1:2*num);
x2=x(2*num+1:3*num);
s_hat1=x(3*num+1:4*num);
s_hat2=x(4*num+1:5*num);

for i=1:num    
    if t<tao
        phi(i,1)=sin((pi*t)/(2*tao));
    else
        phi(i,1)=1;
    end
    r=sin(0.5*t);
    e_1(i,1)=phi(i)*(x1(i)-r);
    eta_1(i,1)=tan((pi*e_1(i))/(2*k_1));
    g(i,1)=cos((eta_1(i))^2);
    alpha_1(i,1)=c_1*eta_1(i)*g(i);
    e_2(i,1)=x(4*num+i)-alpha_1(i);
    eta_2(i,1)=tan((pi*e_2(i))/(2*k_2));
    alpha_2(i,1)=-c_2*eta_2(i);
    u(i,1)=alpha_2(i);    
    dx(3*num+i,1)=-l_1*s_hat1(i)+s_hat2(i);
    dx(4*num+i,1)=-l_2*s_hat1(i)+u(i); 
end

%% 状态方程
for i=1:num   
    dx(i)=-2*z1(i)+x1(i);
    dx(num+i)=-C*x1(i)+x2(i);
    dx(2*num+i)=-K*(a*(x1(i)^3)+b*x1(i)+(z1(i))^3-0.2*cos(2*t))+K*u(i);  
end


clc;
clear ;
close all;
num = 2 ;

C=3.5;
K=0.05;
a=5.5;
b=4;
c_2=10;
k_2=1;
c_1=4;
k_1=0.05;
tao=5;
l_1=2;
l_2=10;

z_1=[0;0];
x_bar=[1;-0.5];
x_under=[1;0.2];
s_hat1=[0;0];
s_hat2=[0;0];
ini=[z_1;x_bar;x_under;s_hat1;s_hat2];
tspan = [0 10];


options = odeset('RelTol',1e-8,'AbsTol',1e-8);    %改代码精度
[t,x] = ode15s(@(t,x)lifei3(t,x,num,C,K,a,b,c_2,k_2,c_1,k_1,tao,l_1,l_2),tspan,ini,options);   %改代码精度之后需要在ode后面加上options


hhh=length(x(:,end));
%% 重构控制器
for j=1:hhh
    
    for i=1:num
        
        if t(j)<tao
            phi(j,i)=sin((pi*t(j))/(2*tao));
        else
            phi(j,i)=1;
        end
        
    end
    
    r(j,1)=sin(0.5*t(j));
    
    for i=1:num   
        k_1(j,1)=0.05;
        k_2(j,1)=1; 
        e_1(j,i)=phi(j,i)*(x(j,num+i)-r(j,1));
        eta_1(j,i)=tan((pi*e_1(j,i))/(2*k_1(j,1)));
        g(j,i)=cos((eta_1(j,i))^2);
        alpha_1(j,i)=c_1*eta_1(j,i)*g(j,i);
        e_2(j,i)=x(j,4*num+i)-alpha_1(j,i);
        eta_2(j,i)=tan((pi*e_2(j,i))/(2*k_2(j,1)));
        alpha_2(j,i)=-c_2*eta_2(j,i);
        u(j,i)=alpha_2(j,i);
        m(j,i)=x(j,num+i)-r(j,1);       
    end
    
end




figure(1) ;
plot(t,x(:,3),'color',[1 0.27 0],'LineWidth',2); 
hold on ;
grid on ;
plot(t,x(:,4),'color',[0.25 0.41 0.88],'LineWidth',2);
hold on ;
grid on ;
plot(t,sin(0.5*t));



figure(2) ;
plot(t,m(:,1),'color',[1 0.27 0],'LineWidth',2);  
hold on ;
grid on ;
plot(t,m(:,2),'color',[0.25 0.41 0.88],'LineWidth',2);
hold on ;
grid on ;
plot(t,k_1(:,1));
hold on ;
grid on ;
plot(t,-k_1(:,1));
hold on ;
grid on ;
% % 画局部图
h1=axes('position',[0.55 0.55 0.31 0.3]);    %此处的h1可以变换,但是不可以为h3
set(h1,'FontName','Times New Roman','FontSize',16);
axis(h1);	 %设置轴范围和纵横比
plot(t,m(:,1),'color',[1 0.27 0],'LineWidth',1.4);  
hold on ;
grid on;
plot(t,m(:,2),'color',[0.25 0.41 0.88],'LineWidth',1.4);
hold on ;
grid on;
plot(t,k_1(:,1),'color',[1 0.84 0.25],'LineWidth',1.4);
hold on ;
grid on;
plot(t,-k_1(:,1),'color',[0.63 0.13 0.94],'LineWidth',1.4);
hold on ;
grid on;
xlim([8 10]);
ylim([-0.06 0.06]);




figure(3) ;
plot(t,e_2(:,1),'color',[1 0.27 0],'LineWidth',2);  
hold on ;
grid on ;
plot(t,e_2(:,2),'color',[0.25 0.41 0.88],'LineWidth',2);
hold on ;
grid on ;
plot(t,k_2(:,1));
hold on ;
grid on ;
plot(t,-k_2(:,1));
hold on ;
grid on ;
ylim([-1.5 1.5]);



figure(4) ;
plot(t,x(:,5),'color',[1 0.27 0],'LineWidth',2);  
hold on ;
grid on ;
plot(t,x(:,6),'color',[0.25 0.41 0.88],'LineWidth',2);
hold on ;
grid on ;



figure(5) ;
plot(t,u(:,1),'color',[1 0.27 0],'LineWidth',2);  
hold on ;
grid on ;
plot(t,u(:,2),'color',[0.25 0.41 0.88],'LineWidth',2);
hold on ;
grid on ;

3.仿真结果


总结

本文通过使用MATLAB验证了论文"Global Output-Feedback Prescribed Performance Control of Nonlinear Systems With Unknown Virtual Control Coefficients"中提出的算法。文章中通过利用输入驱动滤波器设计了一种分布式输出反馈控制器。此外,本文控制器的设计过程中考虑了控制方向未知的情况,并且没有使用努斯鲍姆函数,保证了文章中设计的控制器更可靠。

  • 7
    点赞
  • 39
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
电赛控制类赛题(saiti)是指在电子竞赛中涉及控制系统设计与应用的题目。这类赛题要求参赛选手具备对控制理论的深刻理解和实践能力。 电赛控制类赛题主要涉及以下几个方面: 1. 系统建模与仿真:选手需要根据给定的问题,进行系统的建模和仿真。具体包括确定系统的输入输出关系,建立数学模型,并通过仿真软件进行系统行为的模拟与分析。 2. 控制器设计与调试:选手需要根据系统特性和控制要求设计合适的控制器,如比例积分控制器、模糊控制器或PID控制器等,并进行参数调试,使系统能够稳定地响应输入信号。 3. 硬件接口与编程:选手需要将设计好的控制器与实际的硬件设备(如传感器、执行器等)进行接口连接,编写相应的控制程序,实现系统的自动化控制。 4. 故障诊断与处理:选手需要具备对自动控制系统故障的诊断和处理能力,能够通过错误信息分析和设备排查来准确查找故障原因,并解决问题。 5. 性能评估与优化:选手需要评估系统的控制性能,并进行优化。通过系统的参数调整或算法改进,使系统能够更好地满足控制要求。 电赛控制类赛题旨在培养选手的系统分析与设计能力、实际动手能力和团队协作能力。参与这类赛题的选手需要具备扎实的理论基础,熟练掌握控制系统的基本原理,具备良好的逻辑思维和问题解决能力。通过电赛控制类赛题的学习和比赛,选手不仅可以提高对控制理论的理解和掌握,还可以锻炼自己的实践能力,为将来的工程实践打下坚实的基础。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值