PID controller design for second order nonlinear uncertain systems
摘要 复现一下论文的推导过程,补充一些推导细节,证明PID可以控制满足一定条件的二阶非线性系统并全局稳定,最后跑个仿真。
对二阶非线性系统(相对阶为2)
x
˙
1
=
x
2
x
˙
2
=
f
(
x
1
,
x
2
,
t
)
+
u
(
t
)
\begin{aligned} \dot x_1 =& x_2 \\ \dot x_2 =& f(x_1,x_2,t)+u(t) \\ \end{aligned}
x˙1=x˙2=x2f(x1,x2,t)+u(t)
其中
f
(
x
1
,
x
2
,
t
)
f(x_1,x_2,t)
f(x1,x2,t) 满足
∣
∂
f
∂
x
1
∣
≤
L
1
,
∣
∂
f
∂
x
2
∣
≤
L
2
\left|\frac{\partial f}{\partial x_1}\right|\leq L_1, \left|\frac{\partial f}{\partial x_2}\right|\leq L_2
∂x1∂f
≤L1,
∂x2∂f
≤L2
取控制信号为
u
(
t
)
=
k
p
e
(
t
)
+
k
i
∫
0
t
e
(
τ
)
d
τ
+
k
d
e
˙
(
t
)
u(t)=k_pe(t)+k_i\int_0^te(\tau)\text d\tau+k_d\dot e(t)
u(t)=kpe(t)+ki∫0te(τ)dτ+kde˙(t)
其中
e
(
t
)
=
y
∗
−
x
1
(
t
)
e(t)=y^*-x_1(t)
e(t)=y∗−x1(t) 为待跟踪信号
y
∗
y^*
y∗ 与系统输出
x
1
(
t
)
x_1(t)
x1(t) 的差。定义
x
(
t
)
=
∫
0
t
e
(
τ
)
d
τ
+
f
(
y
∗
,
0
,
0
)
k
i
y
(
t
)
=
e
(
t
)
z
(
t
)
=
e
˙
(
t
)
g
(
y
,
z
,
t
)
=
−
f
(
y
∗
−
y
,
−
z
,
t
)
+
f
(
y
∗
,
0
,
0
)
\begin{aligned} & x(t) = \int_0^te(\tau)\text d\tau+\frac{f(y^*,0,0)}{k_i} \\ & y(t) = e(t) \\ & z(t) = \dot e(t) \\ & g(y,z,t) = -f(y^*-y,-z,t) + f(y^*,0,0) \end{aligned}
x(t)=∫0te(τ)dτ+kif(y∗,0,0)y(t)=e(t)z(t)=e˙(t)g(y,z,t)=−f(y∗−y,−z,t)+f(y∗,0,0)
则
z
˙
(
t
)
=
e
¨
=
−
x
¨
1
=
−
f
(
x
1
,
x
2
,
t
)
−
(
k
p
e
(
t
)
+
k
i
∫
0
t
e
(
τ
)
d
τ
+
k
d
e
˙
(
t
)
)
=
−
f
(
y
∗
−
e
,
−
e
˙
,
t
)
−
k
p
y
−
k
i
x
+
f
(
y
∗
,
0
,
0
)
−
k
d
z
=
f
(
y
∗
,
0
,
0
)
−
f
(
y
∗
−
y
,
−
z
,
t
)
−
k
i
x
−
k
p
y
−
k
d
z
\begin{aligned} \dot z(t) =& \ddot e = -\ddot x_1 \\ =& -f(x_1,x_2,t) -\left(k_pe(t)+k_i\int_0^te(\tau)\text d\tau+k_d\dot e(t)\right) \\ =& -f(y^*-e,-\dot e,t) -k_py-k_ix+f(y^*,0,0)-k_dz \\ =& f(y^*,0,0)-f(y^*-y,-z,t) -k_ix -k_py -k_dz \\ \end{aligned}
z˙(t)====e¨=−x¨1−f(x1,x2,t)−(kpe(t)+ki∫0te(τ)dτ+kde˙(t))−f(y∗−e,−e˙,t)−kpy−kix+f(y∗,0,0)−kdzf(y∗,0,0)−f(y∗−y,−z,t)−kix−kpy−kdz
即
{
x
˙
=
y
y
˙
=
z
z
˙
=
g
(
y
,
z
,
t
)
−
k
i
x
−
k
p
y
−
k
d
z
\left\{\begin{aligned} & \dot x=y \\ & \dot y=z \\ & \dot z=g(y,z,t) -k_ix -k_py -k_dz \\ \end{aligned}\right.
⎩
⎨
⎧x˙=yy˙=zz˙=g(y,z,t)−kix−kpy−kdz
其中
g
(
y
,
z
,
t
)
g(y,z,t)
g(y,z,t) 为非线性函数,可以使用局部线性化的方法将其中的
y
y
y 和
z
z
z 分离,即
g
(
y
,
z
,
t
)
=
b
(
y
,
t
)
y
+
a
(
y
,
z
,
t
)
z
g(y,z,t)=b(y,t)y+a(y,z,t)z
g(y,z,t)=b(y,t)y+a(y,z,t)z
其中
b
(
y
,
t
)
=
{
g
(
y
,
0
,
t
)
y
,
y
≠
0
∂
g
∂
y
∣
(
0
,
0
,
t
)
,
y
=
0
,
a
(
y
,
z
,
t
)
=
{
g
(
y
,
z
,
t
)
−
g
(
y
,
0
,
t
)
z
,
z
≠
0
∂
g
∂
z
∣
(
y
,
0
,
t
)
,
z
=
0
,
b(y,t)=\left\{\begin{aligned} \frac{g(y,0,t)}y &,\ y\neq 0 \\ \left.\frac{\partial g}{\partial y}\right|_{(0,0,t)} &,\ y=0 \end{aligned}\right., a(y,z,t)=\left\{\begin{aligned} &\frac{g(y,z,t)-g(y,0,t)}z&,\ z\neq 0 \\ &\left.\frac{\partial g}{\partial z}\right|_{(y,0,t)}&, \ z = 0 \end{aligned}\right.,
b(y,t)=⎩
⎨
⎧yg(y,0,t)∂y∂g
(0,0,t), y=0, y=0,a(y,z,t)=⎩
⎨
⎧zg(y,z,t)−g(y,0,t)∂z∂g
(y,0,t), z=0, z=0,
于是
[
x
˙
y
˙
z
˙
]
=
[
0
1
0
0
0
1
−
k
i
b
(
y
,
t
)
−
k
p
a
(
y
,
z
,
t
)
−
k
d
]
[
x
y
z
]
\begin{bmatrix} \dot x \\ \dot y \\ \dot z \end{bmatrix} = \begin{bmatrix} 0 & 1 & 0 \\ 0 & 0 & 1 \\ -k_i & b(y,t)-k_p & a(y,z,t)-k_d \end{bmatrix} \begin{bmatrix} x \\ y \\ z \end{bmatrix}
x˙y˙z˙
=
00−ki10b(y,t)−kp01a(y,z,t)−kd
xyz
下面用李雅普诺夫函数证明稳定性。
取PID参数
k
p
k_p
kp,
k
i
k_i
ki,
k
d
k_d
kd 满足下面几个条件
k
p
>
L
1
,
k
d
>
L
2
,
k
i
>
0
,
(
k
p
−
L
1
)
(
k
d
−
L
2
)
−
k
i
>
L
2
k
i
(
k
d
+
L
2
)
(1)
\begin{aligned} & k_p>L_1,\ k_d>L_2,\ k_i>0, \\ & (k_p-L_1)(k_d-L_2)-k_i>L_2\sqrt{k_i(k_d+L_2)} \\ \end{aligned}\tag{1}
kp>L1, kd>L2, ki>0,(kp−L1)(kd−L2)−ki>L2ki(kd+L2)(1)
定义
ψ
0
=
inf
y
,
z
,
t
{
k
d
−
a
(
y
,
z
,
t
)
}
ψ
1
=
sup
y
,
z
,
t
{
k
d
−
a
(
y
,
z
,
t
)
}
ψ
=
ψ
0
+
ψ
1
2
ϕ
(
y
)
=
k
p
−
b
(
y
)
ϕ
0
=
inf
y
ϕ
(
y
)
μ
=
2
(
ϕ
0
ψ
0
+
k
i
)
4
ϕ
0
+
L
2
2
(2)
\begin{aligned} \psi_0 =& \inf_{y,z,t}\{k_d-a(y,z,t)\} \\ \psi_1 =& \sup_{y,z,t}\{k_d-a(y,z,t)\} \\ \psi =& \frac{\psi_0+\psi_1}2 \\ \phi(y) =& k_p-b(y) \\ \phi_0 =& \inf_y\phi(y) \\ \mu =& \frac{2(\phi_0\psi_0+k_i)}{4\phi_0+L_2^2} \end{aligned} \tag{2}
ψ0=ψ1=ψ=ϕ(y)=ϕ0=μ=y,z,tinf{kd−a(y,z,t)}y,z,tsup{kd−a(y,z,t)}2ψ0+ψ1kp−b(y)yinfϕ(y)4ϕ0+L222(ϕ0ψ0+ki)(2)
其中
μ
\mu
μ 是个大于0的常数。取李雅普诺夫函数
V
(
x
,
y
,
z
)
=
[
x
y
z
]
P
[
x
y
z
]
+
∫
0
y
(
ϕ
(
s
)
−
ϕ
0
)
s
d
s
V(x,y,z)=\begin{bmatrix} x & y & z \end{bmatrix}P \begin{bmatrix} x \\ y \\ z \end{bmatrix} +\int_0^y(\phi(s)-\phi_0)s\text ds
V(x,y,z)=[xyz]P
xyz
+∫0y(ϕ(s)−ϕ0)sds
其中
P
=
1
2
[
μ
k
i
k
i
0
k
i
ϕ
0
+
μ
ψ
μ
0
μ
1
]
P=\frac 12\begin{bmatrix} \mu k_i & k_i & 0 \\ k_i & \phi_0+\mu\psi & \mu \\ 0 & \mu & 1 \end{bmatrix}
P=21
μkiki0kiϕ0+μψμ0μ1
为半正定矩阵。下面证明
P
P
P 为半正定矩阵。根据式(2)的定义和式(1)的约束条件可得
ϕ
0
≥
k
p
−
L
1
>
0
,
k
d
+
L
2
≥
ψ
≥
ψ
0
≥
k
d
−
L
2
>
0
,
μ
>
0
,
ϕ
0
ψ
0
−
k
i
>
(
k
p
−
L
1
)
(
k
d
−
L
2
)
−
k
i
>
L
2
k
i
(
k
d
+
L
2
)
>
L
2
k
i
ψ
0
>
0
\begin{aligned} & \phi_0\geq k_p-L_1>0, \\ & k_d+L_2\geq\psi\geq\psi_0\geq k_d-L_2>0, \\ & \mu>0, \\ & \phi_0\psi_0-k_i>(k_p-L_1)(k_d-L_2)-k_i \\ &> L_2\sqrt{k_i(k_d+L_2)}>L_2\sqrt{k_i\psi_0}>0 \end{aligned}
ϕ0≥kp−L1>0,kd+L2≥ψ≥ψ0≥kd−L2>0,μ>0,ϕ0ψ0−ki>(kp−L1)(kd−L2)−ki>L2ki(kd+L2)>L2kiψ0>0
ϕ
0
ψ
0
−
k
i
>
L
2
k
i
ψ
0
(
ϕ
0
ψ
0
−
k
i
)
2
>
L
2
2
k
i
ψ
0
(
ϕ
0
ψ
0
+
k
i
)
2
>
L
2
2
k
i
ψ
0
+
4
k
i
ϕ
0
ψ
0
\begin{aligned} \phi_0\psi_0-k_i >& L_2\sqrt{k_i\psi_0} \\ (\phi_0\psi_0-k_i)^2 >& L_2^2k_i\psi_0 \\ (\phi_0\psi_0+k_i)^2 >& L_2^2k_i\psi_0+4k_i\phi_0\psi_0 \\ \end{aligned}
ϕ0ψ0−ki>(ϕ0ψ0−ki)2>(ϕ0ψ0+ki)2>L2kiψ0L22kiψ0L22kiψ0+4kiϕ0ψ0
下面用这些条件和结果证明如下3个式子
μ
<
ψ
0
4
(
μ
ϕ
0
−
k
i
)
(
ψ
0
−
μ
)
>
μ
2
L
2
2
μ
ϕ
0
>
k
i
(3)
\begin{aligned} & \mu < \psi_0 \\ & 4(\mu\phi_0-k_i)(\psi_0-\mu) > \mu^2L_2^2 \\ & \mu\phi_0 > k_i \end{aligned}\tag{3}
μ<ψ04(μϕ0−ki)(ψ0−μ)>μ2L22μϕ0>ki(3)
第3个式子可以由前两个得到。
μ
−
ψ
0
=
2
(
ϕ
0
ψ
0
+
k
i
)
−
ψ
0
(
4
ϕ
0
+
L
2
2
)
4
ϕ
0
+
L
2
2
=
2
k
i
−
2
ϕ
0
ψ
0
−
ψ
0
L
2
2
4
ϕ
0
+
L
2
2
<
−
ψ
0
L
2
2
4
ϕ
0
+
L
2
2
<
0
\begin{aligned} \mu-\psi_0 =& \frac{2(\phi_0\psi_0+k_i)-\psi_0(4\phi_0+L_2^2)}{4\phi_0+L_2^2} \\ =& \frac{2k_i-2\phi_0\psi_0-\psi_0L_2^2}{4\phi_0+L_2^2} \\ <& \frac{-\psi_0L_2^2}{4\phi_0+L_2^2}<0 \\ \end{aligned}
μ−ψ0==<4ϕ0+L222(ϕ0ψ0+ki)−ψ0(4ϕ0+L22)4ϕ0+L222ki−2ϕ0ψ0−ψ0L224ϕ0+L22−ψ0L22<0
4
(
μ
ϕ
0
−
k
i
)
(
ψ
0
−
μ
)
−
μ
2
L
2
2
=
−
(
4
ϕ
0
+
L
2
2
)
μ
2
+
4
(
ϕ
0
ψ
0
+
k
i
)
μ
−
4
k
i
ψ
0
=
1
4
ϕ
0
+
L
2
2
[
−
4
(
ϕ
0
ψ
0
+
k
i
)
2
+
8
(
ϕ
0
ψ
0
+
k
i
)
2
−
4
k
i
ψ
0
(
4
ϕ
0
+
L
2
2
)
]
=
4
4
ϕ
0
+
L
2
2
[
(
ϕ
0
ψ
0
+
k
i
)
2
−
4
k
i
ϕ
0
ψ
0
−
k
i
ψ
0
L
2
2
]
>
0
\begin{aligned} & 4(\mu\phi_0-k_i)(\psi_0-\mu) - \mu^2L_2^2 \\ =& -(4\phi_0+L_2^2)\mu^2+4(\phi_0\psi_0+k_i)\mu-4k_i\psi_0 \\ =& \frac{1}{4\phi_0+L_2^2}\Big[-4(\phi_0\psi_0+k_i)^2+8(\phi_0\psi_0+k_i)^2 -4k_i\psi_0(4\phi_0+L_2^2)\Big] \\ =& \frac{4}{4\phi_0+L_2^2}\Big[(\phi_0\psi_0+k_i)^2 -4k_i\phi_0\psi_0-k_i\psi_0L_2^2\Big]>0 \\ \end{aligned}
===4(μϕ0−ki)(ψ0−μ)−μ2L22−(4ϕ0+L22)μ2+4(ϕ0ψ0+ki)μ−4kiψ04ϕ0+L221[−4(ϕ0ψ0+ki)2+8(ϕ0ψ0+ki)2−4kiψ0(4ϕ0+L22)]4ϕ0+L224[(ϕ0ψ0+ki)2−4kiϕ0ψ0−kiψ0L22]>0
于是矩阵
P
P
P 的三阶顺序主子式的行列式
μ
k
i
>
0
det
[
μ
k
i
k
i
k
i
ϕ
0
+
μ
ψ
]
=
μ
k
i
(
ϕ
0
+
μ
ψ
)
−
k
i
2
≥
k
i
(
μ
ϕ
0
+
μ
2
ψ
0
−
k
i
)
>
k
i
μ
2
ψ
0
>
0
det
[
μ
k
i
k
i
0
k
i
ϕ
0
+
μ
ψ
μ
0
μ
1
]
=
k
i
(
μ
ϕ
0
+
μ
2
ψ
−
k
i
−
μ
3
)
>
k
i
(
μ
2
ψ
0
−
μ
3
)
=
k
i
μ
2
(
ψ
0
−
μ
)
>
0
\begin{aligned} & \mu k_i>0 \\ & \operatorname{det}\begin{bmatrix} \mu k_i & k_i \\ k_i & \phi_0+\mu \psi \end{bmatrix} = \mu k_i(\phi_0+\mu \psi)-k_i^2 \geq k_i(\mu \phi_0+\mu^2 \psi_0-k_i)> k_i \mu^2 \psi_0>0 \\ & \operatorname{det}\begin{bmatrix} \mu k_i & k_i & 0 \\ k_i & \phi_0+\mu \psi & \mu \\ 0 & \mu & 1 \end{bmatrix} = k_i(\mu \phi_0+\mu^2 \psi-k_i-\mu^3)> k_i(\mu^2 \psi_0-\mu^3)=k_i \mu^2(\psi_0-\mu)>0 \end{aligned}
μki>0det[μkikikiϕ0+μψ]=μki(ϕ0+μψ)−ki2≥ki(μϕ0+μ2ψ0−ki)>kiμ2ψ0>0det
μkiki0kiϕ0+μψμ0μ1
=ki(μϕ0+μ2ψ−ki−μ3)>ki(μ2ψ0−μ3)=kiμ2(ψ0−μ)>0
所以
P
P
P 正定。
A
T
P
+
P
A
=
1
2
[
0
0
−
k
i
1
0
b
−
k
p
0
1
a
−
k
d
]
[
μ
k
i
k
i
0
k
i
ϕ
0
+
μ
ψ
μ
0
μ
1
]
+
1
2
[
μ
k
i
k
i
0
k
i
ϕ
0
+
μ
ψ
μ
0
μ
1
]
[
0
1
0
0
0
1
−
k
i
b
−
k
p
a
−
k
d
]
=
1
2
[
0
−
μ
k
i
−
k
i
μ
k
i
k
i
+
μ
(
b
−
k
p
)
b
−
k
p
k
i
ϕ
0
+
μ
(
ψ
+
a
−
k
d
)
μ
+
a
−
k
d
]
+
1
2
[
0
μ
k
i
k
i
−
μ
k
i
k
i
+
μ
(
b
−
k
p
)
ϕ
0
+
μ
(
ψ
+
a
−
k
d
)
−
k
i
b
−
k
p
μ
+
a
−
k
d
]
=
[
0
0
0
0
k
i
+
μ
(
b
−
k
p
)
1
2
(
b
−
k
p
+
ϕ
0
+
μ
(
ψ
+
a
−
k
d
)
)
0
1
2
(
b
−
k
p
+
ϕ
0
+
μ
(
ψ
+
a
−
k
d
)
)
μ
+
a
−
k
d
]
\begin{aligned} & A^\text TP+PA \\ =& \frac 12\begin{bmatrix} 0 & 0 & -k_i \\ 1 & 0 & b-k_p \\ 0 & 1 & a-k_d \end{bmatrix} \begin{bmatrix} \mu k_i & k_i & 0 \\ k_i & \phi_0+\mu\psi & \mu \\ 0 & \mu & 1 \end{bmatrix} +\frac 12\begin{bmatrix} \mu k_i & k_i & 0 \\ k_i & \phi_0+\mu\psi & \mu \\ 0 & \mu & 1 \end{bmatrix} \begin{bmatrix} 0 & 1 & 0 \\ 0 & 0 & 1 \\ -k_i & b-k_p & a-k_d \end{bmatrix} \\ =& \frac 12\begin{bmatrix} 0 & -\mu k_i & -k_i \\ \mu k_i & k_i+\mu(b-k_p) & b-k_p \\ k_i & \phi_0+\mu(\psi+a-k_d) & \mu+a-k_d \\ \end{bmatrix} +\frac 12\begin{bmatrix} 0 & \mu k_i & k_i \\ -\mu k_i & k_i+\mu(b-k_p) & \phi_0+\mu(\psi+a-k_d) \\ -k_i & b-k_p & \mu+a-k_d \\ \end{bmatrix} \\ =& \begin{bmatrix} 0 & 0 & 0 \\ 0 & k_i+\mu(b-k_p) & \frac 12(b-k_p+\phi_0+\mu(\psi+a-k_d)) \\ 0 & \frac 12(b-k_p+\phi_0+\mu(\psi+a-k_d)) & \mu+a-k_d \\ \end{bmatrix} \\ \end{aligned}
===ATP+PA21
010001−kib−kpa−kd
μkiki0kiϕ0+μψμ0μ1
+21
μkiki0kiϕ0+μψμ0μ1
00−ki10b−kp01a−kd
21
0μkiki−μkiki+μ(b−kp)ϕ0+μ(ψ+a−kd)−kib−kpμ+a−kd
+21
0−μki−kiμkiki+μ(b−kp)b−kpkiϕ0+μ(ψ+a−kd)μ+a−kd
0000ki+μ(b−kp)21(b−kp+ϕ0+μ(ψ+a−kd))021(b−kp+ϕ0+μ(ψ+a−kd))μ+a−kd
V
˙
=
x
⃗
T
(
A
T
P
+
P
A
)
x
⃗
+
(
ϕ
(
y
)
−
ϕ
0
)
y
y
˙
=
[
x
y
z
]
[
0
0
0
0
k
i
−
μ
ϕ
(
y
)
1
2
(
ϕ
0
−
ϕ
(
y
)
+
μ
(
ψ
+
a
−
k
d
)
)
0
1
2
(
ϕ
0
−
ϕ
(
y
)
+
μ
(
ψ
+
a
−
k
d
)
)
μ
+
a
−
k
d
]
[
x
y
z
]
+
(
ϕ
(
y
)
−
ϕ
0
)
y
z
=
[
y
z
]
[
k
i
−
μ
ϕ
(
y
)
1
2
μ
(
ψ
+
a
−
k
d
)
1
2
μ
(
ψ
+
a
−
k
d
)
μ
+
a
−
k
d
]
[
y
z
]
+
[
y
z
]
[
0
1
2
(
ϕ
0
−
ϕ
(
y
)
)
1
2
(
ϕ
0
−
ϕ
(
y
)
)
0
]
[
y
z
]
+
(
ϕ
(
y
)
−
ϕ
0
)
y
z
=
−
[
y
z
]
Q
[
y
z
]
\begin{aligned} \dot V =& \vec x^\text T(A^\text TP+PA)\vec x +(\phi(y)-\phi_0)y\dot y \\ =& \begin{bmatrix} x & y & z \end{bmatrix} \begin{bmatrix} 0 & 0 & 0 \\ 0 & k_i-\mu\phi(y) & \frac 12(\phi_0-\phi(y)+\mu(\psi+a-k_d)) \\ 0 & \frac 12(\phi_0-\phi(y)+\mu(\psi+a-k_d)) & \mu+a-k_d \\ \end{bmatrix} \begin{bmatrix} x \\ y \\ z \end{bmatrix} +(\phi(y)-\phi_0)yz \\ =& \begin{bmatrix} y & z \end{bmatrix} \begin{bmatrix} k_i-\mu\phi(y) & \frac 12\mu(\psi+a-k_d) \\ \frac 12\mu(\psi+a-k_d) & \mu+a-k_d \\ \end{bmatrix} \begin{bmatrix} y \\ z \end{bmatrix} +\begin{bmatrix} y & z \end{bmatrix} \begin{bmatrix} 0 & \frac 12(\phi_0-\phi(y)) \\ \frac 12(\phi_0-\phi(y)) & 0 \\ \end{bmatrix} \begin{bmatrix} y \\ z \end{bmatrix} +(\phi(y)-\phi_0)yz \\ =& -\begin{bmatrix} y & z \end{bmatrix}Q \begin{bmatrix} y \\ z \end{bmatrix} \end{aligned}
V˙====xT(ATP+PA)x+(ϕ(y)−ϕ0)yy˙[xyz]
0000ki−μϕ(y)21(ϕ0−ϕ(y)+μ(ψ+a−kd))021(ϕ0−ϕ(y)+μ(ψ+a−kd))μ+a−kd
xyz
+(ϕ(y)−ϕ0)yz[yz][ki−μϕ(y)21μ(ψ+a−kd)21μ(ψ+a−kd)μ+a−kd][yz]+[yz][021(ϕ0−ϕ(y))21(ϕ0−ϕ(y))0][yz]+(ϕ(y)−ϕ0)yz−[yz]Q[yz]
其中
Q
=
[
μ
ϕ
(
y
)
−
k
i
−
1
2
μ
(
ψ
+
a
−
k
d
)
−
1
2
μ
(
ψ
+
a
−
k
d
)
k
d
−
μ
−
a
(
y
,
z
,
t
)
]
Q=\begin{bmatrix} \mu\phi(y)-k_i & -\frac 12\mu(\psi+a-k_d) \\ -\frac 12\mu(\psi+a-k_d) & k_d-\mu-a(y,z,t) \\ \end{bmatrix}
Q=[μϕ(y)−ki−21μ(ψ+a−kd)−21μ(ψ+a−kd)kd−μ−a(y,z,t)]
定义
α
=
1
2
(
μ
(
ψ
+
a
(
y
,
z
,
t
)
−
k
d
)
)
β
=
k
d
−
a
(
y
,
z
,
t
)
−
μ
\begin{aligned} \alpha =& \frac 12(\mu(\psi+a(y,z,t)-k_d)) \\ \beta =& k_d-a(y,z,t)-\mu \end{aligned}
α=β=21(μ(ψ+a(y,z,t)−kd))kd−a(y,z,t)−μ
根据式(2)的定义和式(3)的结果得到
μ
ϕ
(
y
)
−
k
i
≥
μ
ϕ
0
−
k
i
>
0
ψ
1
−
μ
≥
β
≥
ψ
0
−
μ
>
0
∣
ψ
+
a
(
y
,
z
,
t
)
−
k
d
∣
≤
L
2
(
μ
ϕ
(
y
)
−
k
i
)
β
≥
(
μ
ϕ
0
−
k
i
)
(
ψ
0
−
μ
)
≥
1
4
μ
2
L
2
2
≥
α
2
\begin{aligned} & \mu\phi(y)-k_i \geq \mu\phi_0-k_i > 0 \\ & \psi_1-\mu \geq \beta \geq \psi_0-\mu > 0 \\ & |\psi+a(y,z,t)-k_d| \leq L_2 \\ & (\mu\phi(y)-k_i)\beta \geq (\mu\phi_0-k_i)(\psi_0-\mu) \geq\frac 14\mu^2L_2^2 \geq\alpha^2 \end{aligned}
μϕ(y)−ki≥μϕ0−ki>0ψ1−μ≥β≥ψ0−μ>0∣ψ+a(y,z,t)−kd∣≤L2(μϕ(y)−ki)β≥(μϕ0−ki)(ψ0−μ)≥41μ2L22≥α2
于是
Q
Q
Q 的所有顺序主子式大于0,
Q
Q
Q 正定。
补充说明与仿真
取
f
(
x
1
,
x
2
)
=
2
ln
(
∣
x
1
∣
+
1
)
+
3
sin
x
2
f(x_1,x_2)=2\ln(|x_1|+1)+3\sin x_2
f(x1,x2)=2ln(∣x1∣+1)+3sinx2
则
L
1
=
2
,
L
2
=
3
L_1=2,L_2=3
L1=2,L2=3,取
k
p
=
k
d
=
4
,
k
i
=
0.01
k_p=k_d=4,k_i=0.01
kp=kd=4,ki=0.01,PID参数需要满足式(1)。但不严格满足也大部分情况下能稳定。另外当待跟踪信号
y
∗
y^*
y∗ 不是常数时不满足
x
˙
=
y
\dot x=y
x˙=y,证明过程不成立。
f
(
x
1
,
x
2
)
=
2
ln
(
∣
x
1
∣
+
1
)
+
3
sin
x
2
f(x_1,x_2)=2\ln(|x_1|+1)+3\sin x_2
f(x1,x2)=2ln(∣x1∣+1)+3sinx2
simucpp 代码如下。
#include <iostream>
#include <cmath>
#include "simucpp.hpp"
using namespace simucpp;
using namespace zhnmat;
using namespace std;
class PIDcontroller: public PackModule
{
public:
PIDcontroller() {};
PIDcontroller(Simulator *sim){
Initialize(sim);
};
virtual PUnitModule Get_InputPort(uint32_t n) const {
if (n==0) return in1;
if (n==1) return in2;
if (n==2) return in3;
if (n==3) return in4;
return nullptr;
};
virtual PUnitModule Get_OutputPort(uint32_t n) const {
if (n==0) return sum3;
return nullptr;
};
void Initialize(Simulator *sim){
SUGain(in1, sim);
SUGain(in2, sim);
SUGain(in3, sim);
SUGain(in4, sim);
SUIntegrator(interr, sim);
SUSum(sum1, sim);
SUSum(sum2, sim);
SUSum(sum3, sim);
SUGain(gainKp, sim);
SUGain(gainKi, sim);
SUGain(gainKd, sim);
sim->connectU(in3, sum1);
sim->connectU(in1, sum1);
sim->connectU(in4, sum2);
sim->connectU(in2, sum2);
sim->connectU(sum1, interr);
sim->connectU(sum1, gainKp);
sim->connectU(sum2, gainKd);
sim->connectU(interr, gainKi);
sim->connectU(gainKp, sum3);
sim->connectU(gainKi, sum3);
sim->connectU(gainKd, sum3);
sum1->Set_InputGain(-1);
sum2->Set_InputGain(-1);
gainKp->Set_Gain(4);
gainKi->Set_Gain(0.1);
gainKd->Set_Gain(4);
}
UGain *in1=nullptr; // x1
UGain *in2=nullptr; // x2
UGain *in3=nullptr; // u
UGain *in4=nullptr; // u'
UIntegrator *interr=nullptr;
USum *sum1=nullptr;
USum *sum2=nullptr;
USum *sum3=nullptr;
UGain *gainKp=nullptr;
UGain *gainKi=nullptr;
UGain *gainKd=nullptr;
};
int main() {
Simulator sim1;
FUIntegrator(intx1, &sim1);
FUIntegrator(intx2, &sim1);
FUFcnMISO(misof, &sim1);
FUInput(inv, &sim1);
FUInput(indotv, &sim1);
FUOutput(outu, &sim1);
FUOutput(outv, &sim1);
FUOutput(outy, &sim1);
auto *controller = new PIDcontroller(&sim1);
sim1.connectU(intx2, intx1);
sim1.connectU(misof, intx2);
sim1.connectU(intx1, misof);
sim1.connectU(intx2, misof);
sim1.connectU(controller, 0, misof);
sim1.connectU(intx1, controller, 0);
sim1.connectU(intx2, controller, 1);
sim1.connectU(inv, controller, 2);
sim1.connectU(indotv, controller, 3);
sim1.connectU(controller, 0, outu);
sim1.connectU(inv, outv);
sim1.connectU(intx1, outy);
inv->Set_Function([](double t){
return 1;
});
indotv->Set_Function([](double t){
return 0;
});
misof->Set_Function([](double *u){
double x1 = u[0];
double x2 = u[1];
double uin = u[2];
return 2*log(abs(x1)+1)+3*sin(x2)+uin;
});
outu->Set_EnableStore(false);
outv->Set_EnableStore(false);
// sim1.Set_SampleTime(0.1);
sim1.Set_SimStep(0.01);
sim1.Initialize();
sim1.Simulate(10);
sim1.Plot();
return 0;
}