两年前第一次接触到PID觉得很高深,很神奇;后来逐渐觉得单纯的PID小儿科了,又了解到专家PID,模糊PID,神经网络PID这些改进算法,再后来又知道了ADRC,便感控制领域浩如烟海,所学不过沧海一粟。然便纵真理无穷,进一寸自有一寸的欢喜。
不敢说看了几篇论文,听了几节报告,做了几次仿真,就吃透ADRC了,不过只是一些粗浅的理解,记录一行歪歪斜斜的足迹。以便回首过眼云烟之时,可以安慰自己一句,我已经飞过。
描述一个系统,最常用的数学模型有:
其中状态空间模型常用于对系统进行数学计算。状态空间模型用状态方程表示。
{
x
˙
=
A
x
+
B
u
y
=
C
x
+
D
u
(
1
−
1
)
\left\{ \begin{array}{c} \dot{x}=Ax+Bu \\ y=Cx+Du \end{array} \right. (1-1)
{x˙=Ax+Buy=Cx+Du(1−1)
ABCD是四个矩阵,
x
x
x为状态向量,里面包含的状态变量个数一般等于系统阶数,且相互独立。
y
y
y为系统输出向量。
状态变量的选取一般是:
x
1
=
y
,
x
2
=
d
y
d
t
,
.
.
.
,
x
n
=
d
n
−
1
y
d
t
n
−
1
x_1=y, x_2=\frac{dy}{dt}, ..., x_n=\frac{d^{n-1}y}{dt^{n-1}}
x1=y,x2=dtdy,...,xn=dtn−1dn−1y
设计反馈的时候需要知道系统内部的状态变量
x
x
x。大部分情况下
x
x
x是不知道的,需要用一个观测器,通过系统的输入输出,去把它观测出来。如果在状态变量
x
x
x中包含了系统的扰动,那么在观测出来之后,就可以在控制器中把系统扰动尽可能消除。观测出的状态变量称为
x
^
\hat{x}
x^。那么状态观测器的任务,就是使得
x
x
x的状态估计
x
^
\hat{x}
x^尽可能接近
x
x
x。通常按照copycat的思路来设计状态观测去,即设计一个相同结构的系统
x
^
˙
=
A
x
^
+
B
u
+
L
(
y
−
y
^
)
\dot{\hat{x}}=A\hat{x}+Bu+L(y-\hat{y})
x^˙=Ax^+Bu+L(y−y^),其中
L
(
y
−
y
^
)
L(y-\hat{y})
L(y−y^)这一项是矫正项。
L
L
L为矫正项增益矩阵。用数学公式表达如下:
{
e
o
b
s
=
x
−
x
^
x
˙
=
A
x
+
B
u
x
^
˙
=
A
x
^
+
B
y
+
L
(
y
−
y
^
)
(
1
−
2
)
\left\{ \begin{array}{c} e_{obs}=x-\hat{x}\\ \dot{x}=Ax+Bu\\ \dot{\hat{x}}=A\hat{x}+By+L(y-\hat{y}) \end{array} \right. \ \ \ \ \ \ \ \ (1-2)
⎩⎨⎧eobs=x−x^x˙=Ax+Bux^˙=Ax^+By+L(y−y^) (1−2)通过数学变换,可以得到:
e
o
b
s
˙
=
(
A
−
L
C
)
e
o
b
s
(
1
−
3
)
\dot{e_{obs}}=(A-LC)e_{obs} \ \ \ \ \ \ \ \ (1-3)
eobs˙=(A−LC)eobs (1−3)这个方程的解是
e
o
b
s
(
t
)
=
e
(
A
−
L
C
)
t
e
o
b
s
(
0
)
(
1
−
4
)
e_{obs}(t)=e^{(A-LC)t}e_{obs}(0) \ \ \ \ \ \ \ \ (1-4)
eobs(t)=e(A−LC)teobs(0) (1−4)可以看出,(A-LC)这一项决定了观测器的收敛速度。当
e
o
b
s
e_{obs}
eobs降到 0 的时候,也就意味着
x
x
x和
x
^
\hat{x}
x^相等,同时矫正项
L
(
y
−
y
^
)
=
0
L(y-\hat{y})=0
L(y−y^)=0。这就是状态观测器的数学模型。ADRC的核心是一个扩张状态观测器,它比一般的状态观测器多了一个总扰动的项,但基础是一样的。
跟踪微分器实际上就是一个事先的过渡过程。提取含有随机噪声的输入信号及其微分,这两个值将被一起送入控制器。也就是说,TD的输入信号只有一个,即给定值,输出信号有两个。这样做的目的是解决PID控制器超调和响应速度之间的矛盾。
然而,微分运算对噪声有很严重的放大效果。由于真正意义上的微分环节(
G
(
s
)
=
s
G(s)=s
G(s)=s)是无法在物理上实现的,因此通常用一阶惯性环节(
G
(
s
)
=
s
T
s
+
1
G(s)=\frac{s}{Ts+1}
G(s)=Ts+1s)来代替。但是对于一阶惯性环节,要想追求逼近性好,就会不可避免的引入噪声的放大。因此,为了抑制高频噪声,考虑用一个二阶环节来取代一阶环节。当二阶系统处于临界阻尼状态,则过渡过程就不会产生超调。
G
(
s
)
=
s
(
T
s
+
1
)
2
G(s)=\frac{s}{(Ts+1)^2}
G(s)=(Ts+1)2s 式中,当时间常数T很小的时候有
lim
T
→
0
s
(
T
s
+
1
)
2
=
s
\lim_{T \to 0} \frac{s}{(Ts+1)^2}\quad=s
limT→0(Ts+1)2s=s,也有微分的效果。并且这个二阶系统对于高频噪声有很高的抑制能力。因此TD中采用的通常是这种结构。过渡过程的阶数一般根据系统来决定,与系统同阶或者比系统高一阶。
ESO是ADRC控制器的核心,可以用一个扩张状态方程来描述。通过扩张状态观测的方式把系统上和输入量(u)无关的所有杂项(扰动)全部观测出来,以便用控制器去补偿这些扰动。设计ESO的思路如下:
考虑一个二阶系统:
y
¨
=
a
y
˙
+
b
y
+
c
u
+
d
(
2
−
1
)
\ddot{ y}=a\dot{y}+by+cu+d \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ (2-1)
y¨=ay˙+by+cu+d (2−1)
d
d
d为扰动。显然二阶系统的状态变量有两个,
x
1
x_1
x1和
x
2
x_2
x2。一般情况下如果要写出状态方程的话应该是二阶的,即有两个状态变量。为了将扰动
d
d
d也纳入状态观测器,建立第三个状态变量
x
3
x_3
x3,使其等于
a
y
˙
+
b
y
+
d
a\dot{y}+by+d
ay˙+by+d,即上式中除了输入
u
u
u之外的其他项(也可称作总扰动)。令
x
3
˙
=
h
\dot{x_3}=h
x3˙=h,那么按照一般状态方程的写法,可以列写出上面这个二阶系统的状态方程:
[
x
1
˙
x
2
˙
x
3
˙
]
=
[
0
1
0
0
0
1
0
0
0
]
[
x
1
x
2
x
3
]
+
[
0
c
0
]
u
+
[
0
0
1
]
h
(
2
−
2
)
\begin{bmatrix} \dot{x_1} \\ \dot{x_2} \\ \dot{x_3} \\ \end{bmatrix} =\begin{bmatrix} 0&1&0 \\ 0&0&1 \\0&0&0 \\ \end{bmatrix} \begin{bmatrix} x_1 \\ x_2 \\ x_3 \\ \end{bmatrix} + \begin{bmatrix} 0 \\ c \\ 0 \\ \end{bmatrix}u + \begin{bmatrix}0 \\0 \\ 1 \\ \end{bmatrix}h\ \ \ \ \ \ \ (2-2)
⎣⎡x1˙x2˙x3˙⎦⎤=⎣⎡000100010⎦⎤⎣⎡x1x2x3⎦⎤+⎣⎡0c0⎦⎤u+⎣⎡001⎦⎤h (2−2)和输出方程:
y
=
[
1
0
0
]
[
x
1
x
2
x
3
]
(
2
−
3
)
y= \begin{bmatrix} 1 & 0 & 0 \\ \end{bmatrix}\begin{bmatrix} x_1 \\ x_2 \\ x_3 \\ \end{bmatrix}\ \ \ \ \ \ \ (2-3)
y=[100]⎣⎡x1x2x3⎦⎤ (2−3)这个状态方程即被称为扩张状态方程。扩张状态观测器的设计和传统状态观测器类似,也是
{
x
^
˙
=
A
x
^
+
B
u
+
L
(
y
−
y
^
)
+
E
h
y
^
=
C
x
^
(
2
−
4
)
\left\{ \begin{array}{c} \dot{\hat{x}}=A\hat{x}+Bu+L(y-\hat{y})+Eh\\ \hat{y}=C\hat{x} \end{array} \right. \ \ \ \ \ \ \ (2-4)
{x^˙=Ax^+Bu+L(y−y^)+Ehy^=Cx^ (2−4)其中
E
h
Eh
Eh这一项和模型有关,大部分情况下是未知的,因此通常这一项被直接忽略,不然放着也没用。由于有了矫正项
L
(
y
−
y
^
)
L(y-\hat{y})
L(y−y^)
(
L
(L
(L状是态观测器的增益矩阵,记为
[
l
1
l
2
l
3
]
\begin{bmatrix} l_1\\ l_2 \\ l_3\\ \end{bmatrix}
⎣⎡l1l2l3⎦⎤),因此观测器中的矩阵A、B、C、D(为了区分记为
A
1
、
B
1
、
C
1
、
D
1
A_1、B_1、C_1、D_1
A1、B1、C1、D1)和状态方程中的矩阵A、B、C、D是不一样的。
通过一定的数学变换,状态观测器方程(2-4)可化为如下形式:
x
^
˙
=
(
A
−
L
C
1
)
x
^
+
[
B
L
]
[
u
y
]
\dot{\hat{x}}=(A-LC_1)\hat{x}+\begin{bmatrix} B&L \\ \end{bmatrix}\begin{bmatrix} u\\y \\ \end{bmatrix}
x^˙=(A−LC1)x^+[BL][uy]观测器中的系统矩阵
A
1
=
A
−
L
C
1
A_1=A-LC_1
A1=A−LC1,即
A
1
=
[
−
l
1
1
0
−
l
2
0
1
−
l
3
0
0
]
A_1=\begin{bmatrix} -l_1&1&0 \\ -l_2&0&1 \\-l_3&0&0 \\ \end{bmatrix}
A1=⎣⎡−l1−l2−l3100010⎦⎤,而新的输入矩阵;
B
1
=
[
B
L
]
B_1=\begin{bmatrix} B&L \\ \end{bmatrix}
B1=[BL],即
B
1
=
[
0
−
l
1
c
−
l
2
0
−
l
3
]
B_1=\begin{bmatrix}0& -l_1 \\ c&-l_2 \\0&-l_3 \\ \end{bmatrix}
B1=⎣⎡0c0−l1−l2−l3⎦⎤为新的控制矩阵(
c
c
c是原二阶系统中输入
u
u
u的系数),
[
u
y
]
\begin{bmatrix} u\\y \\ \end{bmatrix}
[uy]两个一起作为观测器输入;状态观测器的输出
y
^
\hat{y}
y^实际上包含3个分量,即
y
^
=
C
1
[
x
1
^
x
2
^
x
3
^
]
\hat{y}=C_1\begin{bmatrix} \hat{x_1} \\ \hat{x_2} \\ \hat{x_3} \\ \end{bmatrix}
y^=C1⎣⎡x1^x2^x3^⎦⎤那么在观测器的输出方程中,
C
1
C_1
C1就是一个三阶单位矩阵,因为
y
^
=
x
^
\hat{y}=\hat{x}
y^=x^;
D
1
D_1
D1是零矩阵。
为了让观测器系统稳定,需要进行极点配置。假设让这个三阶的状态观测器的三个极点全部位于左半平面的
−
ω
0
-ω_0
−ω0处,则增益
L
L
L就需要特别设计。令
A
1
A_1
A1的特征值 =
−
ω
0
-ω_0
−ω0,可解得
l
1
=
3
ω
0
,
l
2
=
3
ω
0
2
,
l
3
=
ω
0
2
l_1=3\omega_0,l_2=3\omega_0^2,l_3=\omega_0^2
l1=3ω0,l2=3ω02,l3=ω02。
ω
0
ω_0
ω0即是观测器的带宽,应当根据实际系统来设计。如果带宽选择过小,可能会导致扩张状态
x
3
x_3
x3的观测
x
3
^
\hat{x_3}
x3^的跟随性变差,带宽选择过大的话有可能会引入额外的噪声。
u
u
u的系数
c
c
c在设计的时候有可能是不知道的,但是仿真表明
c
c
c的选择即使跟真实的系统有偏差,ESO也能正常工作(但这一点目前尚无严格的理论证明)。至此,扩张状态观测器设计完成!!
ADRC的控制器部分的输入包含两个部分,分别是TD的输出结果(输入信号及其微分)和ESO的输出(包含三个元素的状态向量
y
^
\hat{y}
y^)。因此它就有5个输入量。其中
y
^
\hat{y}
y^的第三个分量
x
3
^
\hat{x_3}
x3^的作用,是通过观测,将复杂系统转化为纯积分器,简化控制。
依然是这个二阶系统
y
¨
=
a
y
˙
+
b
y
+
c
u
+
d
\ddot{ y}=a\dot{y}+by+cu+d
y¨=ay˙+by+cu+d扩张状态
x
3
=
a
y
˙
+
b
y
+
d
x_3=a\dot{y}+by+d
x3=ay˙+by+d。假设状态观测器工作顺利,
x
3
x_3
x3的观测值
x
3
^
\hat{x_3}
x3^就等于真实的
x
3
x_3
x3,即满足
x
3
=
x
3
^
x_3=\hat{x_3}
x3=x3^那么将系统的输入,也即控制器的输出
u
u
u设计为
u
=
u
0
−
x
3
^
c
u=\frac{u_0-\hat{x_3}}{c}
u=cu0−x3^带入上面的二阶系统,可以得到
y
¨
=
u
0
\ddot{y}=u_0
y¨=u0即一个二阶积分器。设计一个PD控制器来控制
u
0
u_0
u0:(一般稳态的时候给定的目标值(reference)都是恒定的,即
r
˙
=
0
\dot{r}=0
r˙=0,
r
¨
\ddot{r}
r¨为前馈项,用于去除稳态误差。但很多时候都是把它忽略的,加上这一项之后有可能会影响响应速度)
u
0
=
K
p
(
r
−
x
1
)
+
K
d
(
r
˙
−
x
2
)
+
r
¨
u_0=K_p(r-x_1)+K_d(\dot{r}-x_2)+\ddot{r}
u0=Kp(r−x1)+Kd(r˙−x2)+r¨同样按照极点配置的方法,可得到
K
p
=
ω
c
2
K_p=ω_c^2
Kp=ωc2,
K
=
2
ω
c
K_=2ω_c
K=2ωc。如此,控制器传递函数中阻尼系数
ξ
=
1
ξ=1
ξ=1,处于临界阻尼,系统无超调。当然
K
p
、
K
d
K_p、K_d
Kp、Kd设计的方法很多,可以综合超调和响应速度来调节。
因篇幅问题不能全部显示,请点此查看更多更全内容