【ADRC】一. 线性跟踪微分器

跟踪微分器(TD,Tracking-Differentiator)由韩京清研究员在《自抗扰控制技术》中提出,是自抗扰控制(ADRC,Active Disturbance Rejection Controller)的一个重要组成部分。跟踪微分器最常见的用途是安排过渡过程,但它作为一种微分器,同样也可以提取含噪信号的微分、配置系统零点、引入相角超前等。

下面我们从头来梳理一下跟踪微分器提出的过程。

假如我们要提取一个信号的微分,最直接也是最简单的想法便是用 ( R ( n + 1 ) − R ( n ) ) / d t (R(n+1)-R(n))/dt (R(n+1)R(n))/dt,写成传递函数的形式就是一个纯微分环节 s s s。这样做对一个理想的信号是没问题的,但一旦有一个噪声混在信号中,这个噪声便会微分环节放的非常大,使提取出来的原信号的微分失真。而现实系统中的信号普遍存在噪声,所以我们想要一种方式,可以既提取出原信号的微分,又不放大噪声。

所以就有了经典微分器,其传递函数为:
G ( s ) = s 1 + τ s = s ∗ 1 1 + τ s = s ∗ F L ( s ) G(s) = \frac{s}{1+\tau s} = s * \frac{1}{1+\tau s} = s * F_L(s) G(s)=1+τss=s1+τs1=sFL(s)
可以看到,其实就是在一个纯微分环节后,又串联了一个一阶低通滤波器来抑制噪声。当滤波器的时间常数 τ \tau τ 趋近 0 时, G ( s ) G(s) G(s) 趋近于纯微分环节 s s s,微分的效果变好,相角滞后小,但对噪声的抑制效果变差,反之亦然。

我们从波特图中也可以清楚的看出来:
请添加图片描述
所以在实际系统中提取微分信号,其实就是在相角滞后(微分的效果)和噪声抑制之间做权衡,虽然鱼和熊掌不可兼得,但我们仍然可以尽力找到一个滞后和噪声都可以接受的平衡点。

其实上面说的微分器很简单,就是一个纯微分环节 s s s 与一个低通滤波器 F L ( s ) F_L(s) FL(s) 的乘积,搞清楚了这件事情之后,我们可以很容易地引入很多更高级的微分器:只需要把 F L ( s ) F_L(s) FL(s) 换成一些更高级的低通滤波器就好了。

下面我们考虑一个双极点滤波器:
F L ( s ) = ω n 2 s 2 + 2 ξ ω n + ω n 2 F_L(s) = \frac{\omega_n^2}{s^2 + 2\xi \omega_n + \omega_n^2} FL(s)=s2+2ξωn+ωn2ωn2
其中, ω n \omega_n ωn 是滤波器的固有频率, ξ \xi ξ 是阻尼比。滤波器的极点越多,幅值特性下降的速度越快,所以当滤波器提供相同的滤波效果时,一般来说,越高阶的滤波器可以拥有越低的带宽,在低频时的相位滞后可以更小。对双极点滤波器来说,阻尼比越低,低频时相位滞后越小。下面的对比图摘自《控制系统设计指南》。
请添加图片描述
但阻尼比低也不是没有代价的,下面我们画出 ξ \xi ξ 变化时滤波器的波特图和阶跃响应曲线。
请添加图片描述
请添加图片描述
可以看到,当 ξ < 1 \xi <1 ξ<1 时,该滤波器是一个欠阻尼的二阶震荡环节,其阶跃响应将有超调;当 ξ < 0.707 \xi < 0.707 ξ<0.707 时,滤波器的波特图将出现增益凸峰, ξ \xi ξ 越小,凸峰越显著。一般在控制系统中应用双极点滤波器来滤波时, ξ \xi ξ 通常设置在 0.4 到 0.7 之间。

ξ = 0.707 \xi = 0.707 ξ=0.707 时,该滤波器是一个二阶 Butterworth 滤波器,它是在不产生增益凸峰的前提下衰减速度最快的滤波器,我们不过多展开。当 ξ = 1 \xi = 1 ξ=1 时,该滤波器是一个线性跟踪滤波器(下文为了方便,统一都叫跟踪微分器,尽管这一定程度上混淆了微分器和滤波器的概念),它是在阶跃响应不产生超调的前提下衰减速度最快的滤波器。

到这里,我们已经清楚,线性跟踪微分器是双极点滤波器在阻尼比等于1时的一种特例。那么为什么跟踪微分器要令 ξ = 1 \xi = 1 ξ=1 呢?要说清楚这个我们首先要看一下低通滤波器的指令处理作用。

现在考虑一个最简单的一阶低通滤波器,其截止频率为 1rad/s:
F L ( s ) = 1 1 + s F_L(s) = \frac{1}{1+s} FL(s)=1+s1
其阶跃响应曲线如下图所示:
请添加图片描述
我们可以看到,这个低通滤波器把一个阶跃信号变成了一条平滑的曲线。从频域上考虑,这是因为低通滤波器把阶跃信号的高频部分滤掉了,所以信号只能以一个较低的频率缓慢上升。

利用低通滤波器的这一特点,我们可以使用低通滤波器对输入信号进行处理,我们的目的不是为了滤去输入信号的噪声,而是使输入信号变得平滑。这就是 ADRC 中强调的“安排过渡过程”。

虽然低通滤波器可以既可以对输入信号进行处理,也可以对反馈信号进行处理,但这两个场合对低通滤波器的要求是不一样的。处理反馈信号时,需要特别关注相角的滞后,相角滞后会导致系统的相角裕度变小,严重时甚至会导致系统失稳。为了减小相位滞后,我们甚至可以容忍信号的略微失真,因为有噪声、传感器精度以及量化误差等的限制,我们本就无法获得一个完全准确的反馈信号。而信号失真在处理输入信号时是完全无法忍受的!别说信号失真,即使是响应的超调也是应该尽量避免的,但与此同时,只要控制周期稍微高一些,相位的滞后对输入信号的影响非常小。

所以线性跟踪微分器令 ξ = 1 \xi = 1 ξ=1 的原因也很明了了,线性跟踪微分器更关注输入信号的处理,所以要保证滤波器的阶跃响应没有超调。但这也导致线性跟踪微分器相位滞后非常严重,不太适合用在反馈滤波环节上

我们重写线性跟踪微分器为:
G ( s ) = r 2 s 2 + 2 r s + r 2 G(s) = \frac{r^2}{s^2 + 2rs + r^2} G(s)=s2+2rs+r2r2
其中参数 r r r 越大,系统阶跃响应时间越短,指令跟踪的速度越快,参数 r r r 决定了跟踪速度,故称其为速度因子。

设输入信号为 v 0 v_0 v0,将上述线性跟踪微分器离散化,得到:
{ x 1 ( k + 1 ) = x 1 ( k ) + h x 2 ( k ) x 2 ( k + 1 ) = x 2 + h ( − r 2 ( x 1 ( k ) − v 0 ( k ) ) − 2 r x 2 ( k ) ) \left\{ \begin{array}{l} x_1\left( k+1 \right) =x_1\left( k \right) +hx_2\left( k \right)\\ x_2\left( k+1 \right) =x_2+h\left( -r^2\left( x_1\left( k \right) -v_0\left( k \right) \right) -2rx_2\left( k \right) \right)\\ \end{array} \right. {x1(k+1)=x1(k)+hx2(k)x2(k+1)=x2+h(r2(x1(k)v0(k))2rx2(k))
x 1 ( k ) x_1(k) x1(k) 会一直跟踪 v 0 ( k ) v_0(k) v0(k) x 2 ( k ) x_2(k) x2(k) x 1 ( k ) x_1(k) x1(k) 的导数,速度因子 r r r 决定跟踪的速度。

但还有一个问题我们没有弄明白,那就是我们为什么需要把输入信号变得平滑?直接使用阶跃不行吗?

我们首先从物理上直观地去认识。不考虑偏载力矩、摩擦力矩等非线性因素,现假设某云台的最大加速的加速度和最大减速的加速度相同,记作 a m a x a_{max} amax,现在想要其以最快速度不超调的向某个方向转动 x x x 度,我们应该怎么做?根据高中物理,我们知道,应该先让云台以 a m a x a_{max} amax 的加速度加速到 x / 2 x/2 x/2 处,然后再让云台以 a m a x a_{max} amax 的加速度减速运动到 x x x。这就是一个简单的三角规划,它蕴涵了时间最优控制的思想。

那我们如果直接使用 PID,令这个云台去响应一个阶跃信号会发生什么呢?阶跃信号是一个物理系统无法实现的信号,当执行器性能远超于负载时(即相较于负载惯量和偏载力矩而言,电机输出的电磁转矩非常大,且额定转速满足系统快速性的要求),我们会发现,系统响应阶跃信号也可以响应的很好。但大部分物理系统的执行器性能都是和实际需求相匹配的,在这种情况下,如果我们想要快速性,令云台刚开始以 a m a x a_{max} amax 的加速度加速,不管怎么调 PID 的参数,其在 x / 2 x/2 x/2 x x x 的区间内 ,一定无法一直以 a m a x a_{max} amax 的加速度减速,那么就会产生超调。如果我们不想要超调,那刚开始就一定只能用比较小的加速度来加速。这就是韩京清研究员指出传统 PID “快速性”和“超调”之间的矛盾

所以我们需要对输入信号进行处理,使之变得物理可实现。

下面我们进行理论推导。加入前置滤波环节之后,系统的方框图如下所示:
请添加图片描述
假设原系统的闭环传递函数为 G ( s ) G(s) G(s),我们在指令上加了一个滤波环节 F L ( s ) F_L(s) FL(s),通过方框图化简,易知,开环传递函数不变,闭环传递函数变为 G ( s ) ∗ F L ( s ) G(s)*F_L(s) G(s)FL(s)

现在我们考虑一个带机械谐振的欠阻尼的二阶震荡系统,其闭环传递函数如下:
G ( s ) = 1069 s 2 + 9.811 s + 1069 ∗ s 2 + 100 s + 10000 s 2 + s + 10000 G(s) = \frac{1069}{s^2 + 9.811s + 1069}*\frac{s^2 + 100s + 10000}{s^2 + s + 10000} G(s)=s2+9.811s+10691069s2+s+10000s2+100s+10000
一个线性跟踪微分器,令快速因子 r r r 为 20,有如下的传递函数:
F L ( s ) = 400 s 2 + 40 s + 400 F_L(s) = \frac{400}{s^2 + 40s + 400} FL(s)=s2+40s+400400
我们现在来比较一下前置滤波环节对闭环波特图和阶跃响应曲线的影响:
请添加图片描述
请添加图片描述
前置滤波环节通过降低带宽的方式,降低了系统的闭环谐振峰和谐振频率,把整个闭环幅值特性都压到了0db以下,有效降低了阶跃响应时的超调和震荡。而且,我们可以看到,前置滤波环节不仅可以对系统本身的谐振峰进行调整,而且还可以压低机械谐振等高频的未建模动态。

搞清楚这件事之后,又有一个问题出现了,我们前面说过,线性跟踪微分器的相角滞后特别严重,不适合用在反馈滤波上,更适合对指令滤波,那么如果我们要对指令进行滤波,就没有比线性跟踪微分器更好的方法了吗?

答案是有,现在我们先不考虑机械谐振,系统闭环传递函数为:
G ( s ) = 1069 s 2 + 9.811 s + 1069 G(s) = \frac{1069}{s^2 + 9.811s + 1069} G(s)=s2+9.811s+10691069
考虑这样一个带零点的滤波器:
F L ( s ) = s 2 + 10 s + 1000 s 2 + 50 s + 1000 F_L(s) = \frac{s^2 + 10s + 1000}{s^2 + 50s + 1000} FL(s)=s2+50s+1000s2+10s+1000
系统闭环波特图和阶跃响应曲线如下:
请添加图片描述
请添加图片描述
可以看到,带零点的滤波器相位滞后明显小于不带零点的线性跟踪微分器,阶跃响应曲线也好于线性跟踪微分器处理过的系统。

那这样分析下来,线性跟踪微分器不适合用在反馈滤波上,指令滤波效果又比不上那些带零点的滤波器,我们为什么还要用线性跟踪微分器呢?

我认为这是因为线性跟踪微分器在工程应用中有优越性。我设计的带零点的 F L ( s ) F_L(s) FL(s) ,本质上是一个陷波滤波器,或者说是带阻滤波器。陷波滤波器比低通滤波器引入的相角滞后小得多,但想要在工程中应用,还需要考虑建模、辨识以及噪声和谐振频率的测量问题,同时还要考虑到模型摄动以及噪声、谐振频率的变动。如果想要滤除的信号的频率相差过大,还需要多个陷波滤波器串联,这也是为什么我举陷波滤波器的例子时没考虑机械谐振的原因。但线性跟踪微分器只有快速因子 r r r 需要整定,通过简单的整定,我们可以把中低频的模型问题和高频的未建模动态一并处理掉,一个系统总有一些高频的未建模动态,所以“加个线性跟踪微分器处理处理”总是一个不错的选择。

至此,线性跟踪微分器的由来以及优缺点已经全部讲完了。

  • 26
    点赞
  • 93
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值