预设性能控制简单算例仿真——双弹簧阻尼(附matlab代码)

突然发现研一的时候写的预设性能控制的博客一直有人看,估计是PPC又火起来了,虽然现在不做这个方向了,但想了想把之前做的仿真也加上,这样理论和仿真都有了更完整一点,可以帮助大家更快的入门PPC。

本仿真复现裕魏才盛学长博士论文第二章《一类非线性系统低复杂度静态预设性能控制方法》

有兴趣的同学也可以去学习一下这篇博士论文


1. 问题描述

(1) 动力学模型

大型非线性系统由N 个互联的子系统组成,具体动力学模型如下所示:
{ x ˙ i , j = x i , j + 1 , j = 1 , . . . , n i − 1 x ˙ i , n i = f i ( x i , u i ) + h i ( x 1 , . . . , x N ) + d i ( t ) y i = x i , 1 \begin{cases}\dot{x}_{i,j}=x_{i,j+1},\quad j=1,...,n_i-1\\\dot{x}_{i,n_i}=f_i\left(x_i,u_i\right)+h_i\left(x_1,...,x_N\right)+d_i\left(t\right)\\y_i=x_{i,1}\end{cases} x˙i,j=xi,j+1,j=1,...,ni1x˙i,ni=fi(xi,ui)+hi(x1,...,xN)+di(t)yi=xi,1
x i = [ x i , 1 , . . . , x i , n i ] T ∈ R n , y i ∈ R ( i = 1 , . . . , N ) \left.x_{i}=\left[\begin{array}{c}{x_{i,1},...,x_{i,n_{i}}}\\\end{array}\right.\right]^{T}\in\mathbb{R}^{n},y_{i}\in\mathbb{R}\left(i=1,...,N\right) xi=[xi,1,...,xi,ni]TRn,yiR(i=1,...,N)表示第 i i i个子系统的状态向量和输出。

(2) 控制目标

a. 在不依赖于神经网络和模糊系统逼近的情况下,设计一个鲁棒的分散式控制器,使得每个子系统能够追踪上期望指令。同时追踪误差系统(2-10)中的所有闭环变量都是一致最终有界的;

b. 追踪误差系统的瞬态与稳态性能能够先验地设计并在全时间域上得以保证。

2. 低复杂度静态预设性能控制器设计

根据预设性能控制的基本原理,低复杂度预设性能控制器设计包含三个步骤。

首先,设计预设性能函数;其次,基于设计的预设性能函数,设计预设性能控制器;最后,在设计的控制器下,给出受控系统的稳定性证明。

(1) 预设函数设计

a. 滑模面设计

s i = c i , 1 e i , 1 + c i , 2 e i , 2 + ∣ ⋯ + c i , n i − 1 e i , n i − 1 + e i , n i s_{i}=c_{i,1}e_{i,1}+c_{i,2}e_{i,2}+|\cdots+c_{i,n_{i}-1}e_{i,n_{i}-1}+e_{i,n_{i}} si=ci,1ei,1+ci,2ei,2++ci,ni1ei,ni1+ei,ni

其中, c i = [ c i , 1 , . . . , c i , n i − 1 ] T ∈ R n i \left.c_{i}=\left[\begin{array}{ccc}c_{i,1},...,c_{i,n_i-1}\end{array}\right.\right]^{T}\in\mathbb{R}^{n_{i}} ci=[ci,1,...,ci,ni1]TRni 是待设计的参数向量并且使得多项式 C i ( λ ) = c i , 1 + c i , 2 λ + ⋯ + c i , n , − 1 λ n i − 1 + λ n i C_{i}\left(\lambda\right)=c_{i,1}+c_{i,2}\lambda+\cdots+c_{i,n,-1}\lambda^{n_{i}-1}+\lambda^{n_{i}} Ci(λ)=ci,1+ci,2λ++ci,n,1λni1+λni 是 Hurwitz 稳定的( λ \lambda λ 是Laplace 算子)。同时,参
c i c_i ci的选择应该保证当多项式 C i ( λ ) = 0 C_i(\lambda)=0 Ci(λ)=0时有 n i n_i ni个不同的解。值得注意的是, s i s_i si的大小可以看作当前追踪误差到时滑模面的距离。基于上述滑模面可得:
e i , 1 ( λ ) s i ( λ ) = 1 c i , 1 + c i , 2 λ + ⋯ + c i , n i − 1 λ n i − 1 + λ n i = 1 Π j ∗ = 1 n i ( λ + p i , j ∗ ) \frac{e_{i,1}\left(\lambda\right)}{s_i\left(\lambda\right)}=\frac1{c_{i,1}+c_{i,2}\lambda+\cdots+c_{i,n_i-1}\lambda^{n_i-1}+\lambda^{n_i}}=\frac1{\Pi_{j^*=1}^{n_i}\left(\lambda+p_{i,j^*}\right)} si(λ)ei,1(λ)=ci,1+ci,2λ++ci,ni1λni1+λni1=Πj=1ni(λ+pi,j)1
其中 : p i , j , > 0 :\quad p_{i,j},>0 :pi,j,>0是多项式 C i ( λ ) = 0 C_i(\lambda)=0 Ci(λ)=0时的第 j ∗ j^* j个解 ( i = 1 , . . . , N , j ∗ = 1 , . . . , n t ) (i=1,...,N,j^*=1,...,n_t) (i=1,...,N,j=1,...,nt)

b. 预设函数设计

定义性能包络:
− δ i , 1 μ i ( t ) < s i ( t ) < δ i , 2 μ i ( t ) -\delta_{i,1}\mu_i(t)<s_i(t)<\delta_{i,2}\mu_i(t) δi,1μi(t)<si(t)<δi,2μi(t)
其中: δ i , 1 , δ i , 2 \delta_{i,1},\delta_{i,2} δi,1,δi,2是正的设计参数。 μ i ( t ) > 0 \mu_i(t)>0 μi(t)>0 是严格连续递减性能函数。不失一般性,性能函数选择为
μ i ( t ) = ( μ i 0 − μ i ∞ ) e − κ i t + μ i σ \mu_i(t)=\left(\mu_{i0}-\mu_{i\infty}\right)\mathrm{e}^{-\kappa_it}+\mu_{i\sigma} μi(t)=(μi0μi)eκit+μ
其中 , μ i 0 > μ i ∞ > 0 , κ i > 0 \mu_{i0}>\mu_{i\infty}>0,\kappa_{i}>0 μi0>μi>0,κi>0 是待设计参数。

为了减轻控制系统设计的复杂度,定义如下约束无关连续转换函数:
s i ( t ) ≜ ρ ( z i ) μ i s_i(t)\triangleq\rho(z_i)\mu_i si(t)ρ(zi)μi
其中:严格单调函数 ρ ( ∙ ) \rho(\bullet) ρ() 满足 ρ ( 0 ) ≠ 0 , lim ⁡ z i → + ∞ ρ ( z i ) = δ i , 2 , lim ⁡ z i → − ∞ ρ ( z i ) = − δ i , 1 \rho(0)\neq0,\lim_{z_i\to+\infty}\rho(z_i)=\delta_{i,2},\lim_{z_i\to-\infty}\rho(z_i)=-\delta_{i,1} ρ(0)=0,limzi+ρ(zi)=δi,2,limziρ(zi)=δi,1。不失一般性,函数 ρ ( ∙ ) \rho(\bullet) ρ()选为:

ρ ( z i ) = δ i , 2 e x p ( z i ) − δ i , 1 e x p ( − z i ) exp ⁡ ( z i ) + exp ⁡ ( − z i ) \rho(z_{i})=\frac{\delta_{i,2}\mathrm{exp}(z_{i})-\delta_{i,1}\mathrm{exp}(-z_{i})}{\exp(z_{i})+\exp(-z_{i})} ρ(zi)=exp(zi)+exp(zi)δi,2exp(zi)δi,1exp(zi)
其中: z i ∈ R z_i\in\mathbb{R} ziR 是新定义的误差转化变量。基于式 上式, 可得转换误差变量等于

z i = ρ − 1 ( s i ) = 1 2 ln ⁡ [ ( δ i , 1 + Λ i ) / ( δ i , 2 − Λ i ) ] ( Λ i = s i / μ i ) z_i=\rho^{-1}\left(s_i\right)=\frac12\ln\left[\left(\delta_{i,1}+\Lambda_i\right)/\left(\delta_{i,2}-\Lambda_i\right)\right]\quad\text{(}\Lambda_i=s_i/\mu_i) zi=ρ1(si)=21ln[(δi,1+Λi)/(δi,2Λi)](Λi=si/μi)
z i z_i zi对时间求导数可得:
{ z ˙ i = 1 2 μ i δ i , 1 + δ i , 2 ( δ i , 1 + Λ i ) ( δ i , 2 − Λ i ) ( s ˙ i − Λ i μ ˙ i ) = ξ i [ f u i , θ u i + f i ( x i , u i ∗ ) − ∫ u i , θ u i ∗ + h i ( x 1 , . . . , x N ) + d i ( t ) − y d i ( n i ) + ∑ j = 1 n i − 1 c i , j e i , j + 1 − Λ i μ ˙ i ] ξ i = 1 2 μ i δ i , 1 + δ i , 2 ( δ i , 1 + Λ i ) ( δ i , 2 − Λ i ) \begin{cases}\dot{z}_i&=\dfrac{1}{2\mu_i}\dfrac{\delta_{i,1}+\delta_{i,2}}{\left(\delta_{i,1}+\Lambda_i\right)\left(\delta_{i,2}-\Lambda_i\right)}\big(\dot{s}_i-\Lambda_i\dot{\mu}_i\big)\\[1ex]&=\xi_i\Big[f_{u_i,\theta}u_i+f_i\big(x_i,u_i^*\big)-\int_{u_i,\theta}u_i^*+h_i\big(x_1,...,x_N\big)\\[1ex]\quad&+d_i\big(t\big)-y_{di}^{(n_i)}+\sum_{j=1}^{n_i-1}c_{i,j}e_{i,j+1}-\Lambda_i\dot{\mu}_i\big]\\[1ex]\xi_i&=\dfrac{1}{2\mu_i}\dfrac{\delta_{i,1}+\delta_{i,2}}{\left(\delta_{i,1}+\Lambda_i\right)\big(\delta_{i,2}-\Lambda_i\big)}\end{cases} z˙iξi=2μi1(δi,1+Λi)(δi,2Λi)δi,1+δi,2(s˙iΛiμ˙i)=ξi[fui,θui+fi(xi,ui)ui,θui+hi(x1,...,xN)+di(t)ydi(ni)+j=1ni1ci,jei,j+1Λiμ˙i]=2μi1(δi,1+Λi)(δi,2Λi)δi,1+δi,2
简写为 z ˙ i = ξ i ( f u i , θ u i + g i ) \dot{z}_i=\xi_i\left(f_{u_{i,\theta}}u_i+g_i\right) z˙i=ξi(fui,θui+gi)

(2) 预设性能控制器设计

基于 ρ ( ∙ ) \rho(\bullet) ρ()设计的无约束转换函数,设计的低复杂度预设性能控制器如下所示:
u i = − k i ξ i z i = − k i ξ i ln ⁡ ( δ i , 1 + Λ i δ i , 2 − Λ i ) u_i=-k_i\xi_iz_i=-k_i\xi_i\ln\biggl(\frac{\delta_{i,1}+\Lambda_i}{\delta_{i,2}-\Lambda_i}\biggr) ui=kiξizi=kiξiln(δi,2Λiδi,1+Λi)
其中: k i k_i ki是正的控制增益,其他参数含义见上文。

给出的控制器形式类似传统PID 控制中的静态比例(P 型)控制器,形式简单,复杂度低,容易在线实现。

(3) 稳定性分析

在这里插入图片描述

3.算例仿真验证

(1) 仿真算例

在这里插入图片描述在这里插入图片描述

在这里插入图片描述

(2) 仿真结果

在这里插入图片描述
在这里插入图片描述

4. 源代码

clc;
clear all;
close all;

M1 = 0.25; M2 = 0.2;          %物块质量
k1 = 0.1; k2 = 0.1;           
K1 = 1; K2 = 1;
deta11 = 0.5; deta12 = 1;
deta21 = 1; deta22 = 0.7;
mu10 = 2; mu11 = 0.1;
mu20 = 3; mu21 = 0.1;
circle = 3000;

a21 = 10; a22 = 10;
c11 = 1; c21 = 1;
X = zeros(4,circle);
X(:,1) = [0.5; 0; -1; 0];

h = 0.01;
e = zeros(4,circle);

x11 = 0.5;
x12 = 0;
x21 = -1;
x22 = 0;

for i = 1:circle
    
    yd1(i) = 0.5*(sin(1.5*h*i)+sin(0.5*h*i));
    yd2(i) = sin(h*i);
    dyd1(i) = 0.5*(1.5*cos(1.5*h*i)+0.5*cos(0.5*h*i));
    dyd2(i) = cos(h*i);

    delta1 = 0.2*sin(3*h*i)*exp(-0.2*h*i);
    delta2 = 0.2*cos(3*h*i)*exp(-0.1*h*i);

    e(:,i) = [x11; x12; x21; x22]-[yd1(i);dyd1(i);yd2(i);dyd2(i)];


    s1(i) = c11*e(1,i)+e(2,i);       %滑模面
    s2(i) = c21*e(3,i)+e(4,i);

    mu1(i) = (mu10-mu11)*exp(-K1*h*i)+mu11;
    mu2(i) = (mu20-mu21)*exp(-K2*h*i)+mu21;

    gama1(i) = s1(i)/mu1(i); gama2 = s2(i)/mu2(i);

    ksi1(i) = (1/(2*mu1(i)))*((deta11+deta12)/((deta11+gama1(i))*(deta12-gama1(i))));
    ksi2(i) = (1/(2*mu2(i)))*((deta21+deta22)/((deta21+gama2)*(deta22-gama2)));

    u1(i) = -k1*ksi1(i)*log((deta11+gama1(i))/(deta12-gama1(i)));%位控制输出
    u2(i) = -k2*ksi2(i)*log((deta21+gama2)/(deta22-gama2));

    sat_u1(i) = sign(u1(i))*min(abs(u1(i)),a21);%饱和输出
    sat_u2(i) = sign(u2(i))*min(abs(u2(i)),a22);%
    
    fs1 = X(1,i);
    fs2 = 2*(X(3,i)-X(1,i))+0.12*(X(3,i)-X(1,i))^3;
    fd1 = 2*X(2,i)+0.2*(X(2,i))^2;
    fd2 = 2.2*(X(4,i)-X(2,i))+0.15*(X(4,i)-X(2,i))^2;
    fc1 = 0.02*sign(X(2,i));
    fc2 = 0.02*sign(X(4,i)-X(2,i));
    
    
    dx11(i) = x12;
    dx12(i) = sat_u1(i)/M1 + (1/M1)*(-fs1-fd1+fs2+fd2-fc1+fc2+delta1);
    dx21(i) = x22;
    dx22(i) = sat_u2(i)/M2 + (1/M2)*(-fs2-fd2-fc2+delta2);
    
    dX = [dx11; dx12; dx21; dx22];
    
    X(:,i) = h*dX(:,i) + [x11; x12; x21; x22];
    
    x11 = X(1,i); 
    x12 = X(2,i);
    x21 = X(3,i);
    x22 = X(4,i);
    

end
x=linspace(0,circle,circle);
figure(1);
subplot(2,1,1);
plot(x*h,X(1,:),'r',x*h,yd1,'-.b','linewidth',1.2);grid;
ylabel('x_{11}(m)');xlabel('time(s)');
legend('x_{11}','y_{d1}');
subplot(2,1,2);
plot(x*h,X(3,:),'r',x*h,yd2,'-.b','linewidth',1.2);grid;
ylabel('x_{21}(m)');xlabel('time(s)');
legend('x_{21}','y_{d2}');
sgtitle('质量块位移响应图','FontSize',12);

figure(2)
subplot(2,1,1);
plot(x*h,sat_u1,'r','linewidth',1);grid;
ylabel('u_{1}(N)');xlabel('time(s)');
subplot(2,1,2);
plot(x*h,sat_u2,'b','linewidth',1);grid;
ylabel('u_{2}(N)');xlabel('time(s)');
sgtitle('质量块位控制输入图','FontSize',12);

figure(3)
plot(x*h,s1,'r',x*h,deta12*mu1,':k',x*h,-deta11*mu1,':k','linewidth',1);grid;
ylabel('s');xlabel('time(s)');
legend('s1','PPC');
sgtitle('滑模面s_1随时间响应图','FontSize',12);
figure(4)
plot(x*h,s2,'b',x*h,deta22*mu2,':k',x*h,-deta21*mu2,':k','linewidth',1);grid;
ylabel('s');xlabel('time(s)');
legend('s2','PPC');
sgtitle('滑模面s_2随时间响应图','FontSize',12);

figure(5);
subplot(2,1,1);
plot(x*h,X(2,:),'r',x*h,dyd1,'-.b','linewidth',1.2);grid;
ylabel('x_{12}(m/s)');xlabel('time(s)');
legend('x_{12}','dy_{d1}');
subplot(2,1,2);
plot(x*h,X(4,:),'r',x*h,dyd2,'-.b','linewidth',1.2);grid;
ylabel('x_{22}(m/s)');xlabel('time(s)');
legend('x_{22}','dy_{d2}');
sgtitle('质量块速度响应图','FontSize',12);


本文来源于魏才盛学长博士论文《航天器姿态预设性能控制方法研究》,证明过程省略,可能也省略了一些其他的重要部分;
如有疏漏以论文为主,有兴趣强烈推荐阅读原文。
航天器姿态预设性能控制方法研究 - 中国知网 (cnki.net)

  • 51
    点赞
  • 80
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值