突然发现研一的时候写的预设性能控制的博客一直有人看,估计是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,...,ni−1x˙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]T∈Rn,yi∈R(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,ni−1ei,ni−1+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,ni−1]T∈Rni 是待设计的参数向量并且使得多项式
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λni−1+λ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,ni−1λni−1+λ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σ
其中 ,
μ
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}
zi∈R 是新定义的误差转化变量。基于式 上式, 可得转换误差变量等于
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=1ni−1ci,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)