初步认识ADRC(自抗扰控制)与应用
ADRC的基本原理
一、參考資料推薦
想要初步了解ADRC,可以從韓京清教授的一篇文獻和一本書看起
1.文獻: 從PID技術到“自抗擾控制”技術(《控制工程》,2002)
2.書: 自抗擾控制技術——估計補償不確定因素的控制技術
不過文章里講的不是很細,是把之前多篇文章內(nèi)容綜合到一起提出了ADRC整體的控制框架。想要更深入學習當然還是看書更好一些。
二、為什么PID好,以及,為什么PID不夠好
1.為什么PID好——不依賴于模型的控制器
經(jīng)典的PID控制直到如今都還是應用最廣泛的控制算法,大部分的控制系統(tǒng)里用的都還是這個。它的好處主要在于,不需要被控對象的模型。
什么是被控對象的模型?
舉個例子,假設我們以小車的速度 V V V為被控量,但是推動小車的力 F F F才是我們的控制量。
考慮阻力并假設阻力和速度成正比的話,根據(jù)牛頓第二定律我們可以得到小車的動力學方程 F ? k V = m a F-kV=ma F?kV=ma,其中 k k k為阻力系數(shù), m m m為小車質(zhì)量。
根據(jù)質(zhì)點運動學方程又有 V ˙ = a \dot{V}=a V˙=a,
這樣就可以得到利用外力 F F F控制小車速度 V V V的模型 V ˙ = ? k m V + 1 m F \dot{V}=-\frac{k}{m}V+\frac{1}{m}F V˙=?mk?V+m1?F
(也就是 x ˙ = ? A x + B u \dot{x}=-Ax+Bu x˙=?Ax+Bu的線性模型的結構)
OK,這個方程通常就是我們需要的,如果要應用現(xiàn)代控制理論(比如最優(yōu)控制)設計一個控制器,那么我們就需要知道這個模型的全部信息東西,在這里就是模型的結構以及阻力系數(shù) k k k和小車質(zhì)量 m m m。
獲得這個模型存在兩個問題:
- 實際工程的模型結構遠比這復雜。比如阻力和速度的關系可能并不是成正比,我們只是這么假設的,實際的的關系可能是一個復雜的非線性函數(shù)。
- 模型的參數(shù)難以獲得。這里的阻力系數(shù) k k k和小車質(zhì)量 m m m好像挺容易獲得的,但是實際被控對象的模型參數(shù)可能要多的多,有些是很難獲得的。
由于模型難獲得,而現(xiàn)代控制理論又大多基于模型設計,雖然能夠滿足各種各樣的性能條件,但大都不夠?qū)嵱茫@也就導致了PID一直稱霸各個控制領域。因為PID是只利用誤差 e e e 來計算控制量的,不需要模型知識,只需要調(diào)一調(diào) K P , K I , K D K_P,K_I,K_D KP?,KI?,KD? 三個參數(shù)就能得到可以接受的效果。
2.為什么PID不夠好——PID的缺點
注意到前面說 PID 能得到可以接受的效果,我們當然希望PID能夠得到更好的控制效果,那么PID還有哪些不足呢?
以下摘自前面說的韓京清的那篇文章
- 誤差的取法(直接由給定指令計算誤差)
- 由誤差提取誤差微分的方法(使用傳統(tǒng)的線性微分器)
- 加權和的策略不一定最好(比例,積分,微分項各乘上放大系數(shù) K K K然后相加來計算控制量)
- 積分反饋有許多副作用(對誤差進行積分并放大然后反饋到系統(tǒng))
三、ADRC給出的方案——如何保留PID的優(yōu)點,同時彌補PID的缺點
上一節(jié)寫了PID的幾個缺點,下面一條一條解釋這些缺點的意思,并給出ADRC的解決方案:
1. 誤差的取法——安排過渡過程
直接根據(jù)給定指令計算誤差可能會導致控制效果變差,比如有些指令里包含了我們不希望的高頻信號,這類信號的例子有:階躍指令,方波指令。
為了將高頻信號解決掉,ADRC提出了安排“過渡過程”的方法,類似于把給定指令進行低通濾波,得到一個更容易實現(xiàn)的指令,從而在犧牲一點快速性的同時大大降低超調(diào)。
這里給個例子,考慮兩個系統(tǒng),一個帶有指令濾波,一個不帶:
圖1 帶有指令濾波器👆
圖2 不帶指令濾波器👆
當指令為單位階躍指令,只用一個增益 K = 2 K=2 K=2來控制二階系統(tǒng) 1 s 2 + s \frac{1}{s^2+s} s2+s1?的時候,有無指令濾波器的效果如下:
圖3 帶不帶指令濾波器的控制效果對比👆
不難看到,加了指令濾波器之后,雖然上升速度變慢了,但是超調(diào)更小了,調(diào)節(jié)時間基本沒變,甚至還縮短了。
安排過渡過程也是類似這樣的道理。因為像階躍這樣變化太快的突變信號,當控制器增益高的話就很容易引起超調(diào),如果提前安排過渡過程,讓指令信號慢一點變化,就能得到更好一點的控制效果。
2. 由誤差提取誤差微分的方法——跟蹤微分器
經(jīng)典的線性微分器,如 W = s τ s + 1 W=\frac{s}{\tau{s}+1} W=τs+1s?以及 W = s ? ω 2 s 2 + 2 ω s + ω 2 W=\frac{s*\omega^2}{
{s}^2+2\omega{s}+\omega^2} W=s2+2ωs+ω2s?ω2?都是在跟蹤給定信號的同時輸出微分量。
這部分在韓京清的那本書上也有介紹,但是用公式解釋可能比較枯燥,在simulink上畫圖就比較直觀:
對于一階線性微分器: W = s τ s + 1 W=\frac{s}{\tau{s}+1} W=τs+1s?,其實可以看成是一個慣性環(huán)節(jié)的微分:
圖4 一階線性微分器👆
我們知道慣性環(huán)節(jié) G = 1 τ s + 1 G=\frac{1}{\tau{s}+1} G=τs+11? 是可以無超調(diào)的跟蹤到給定階躍信號的。當 G = 1 τ s + 1 G=\frac{1}{\tau{s}+1} G=τs+11? 跟蹤原信號的同時,積分器 1 s \frac{1}{s} s1? 前面的量也就是 W = G ? s = s τ s + 1 W=G*s=\frac{s}{\tau{s}+1} W=G?s=τs+1s? 也在輸出 G G G的微分量,那么我們就可以管這個叫做跟蹤-微分器。它一邊實現(xiàn)對原信號的跟蹤,一邊提供微分信號。
注意:當上圖的Gain越大,也就是慣性環(huán)節(jié)的時間常數(shù) τ \tau τ 越小的時候,慣性環(huán)節(jié)跟蹤原信號就越快。對于輸入信號為正弦波信號的情況就是相位滯后和幅值損失越小,這一點可以綜合慣性環(huán)節(jié)的伯德圖來思考。我們當然是希望相位滯后盡可能的小,但是 τ \tau τ 越大則 W = s τ s + 1 W=\frac{s}{\tau{s}+1} W=τs+1s? 得到的微分信號對高頻噪聲的放大也越明顯,這一點也可以綜合微分環(huán)節(jié) s s s 的伯德圖來考慮。
類似的,二階微分器 W = s ? ω 2 s 2 + 2 ω s + ω 2 W=\frac{s*\omega^2}{
{s}^2+2\omega{s}+\omega^2} W=s2+2ωs+ω2s?ω2? 也可以看成一個阻尼比為1的震蕩環(huán)節(jié) G = ω 2 s 2 + 2 ω s + ω 2 G=\frac{\omega^2}{
{s}^2+2\omega{s}+\omega^2} G=s2+2ωs+ω2ω2? 的微分,即 W = G ? s W=G*s W=G?s。
圖5 二階線性微分器($\omega=10$)👆
注意:這個二階慣性環(huán)節(jié),也可以看成一個閉環(huán)二階系統(tǒng)跟蹤指定的指令(這句話比較有意思)。公式如下:
{ x ˙ 1 = x 2 x ˙ 2 = u = ? ω n 2 ( x 1 ? x r e f ) ? 2 ω n x 2 \left\{ \begin{array}{rcl} \dot{x}_1 &=& x_2 \\ \dot{x}_2 &=& u =-\omega_n^2(x_1-x_{ref})-2\omega_nx_2\\ \end{array} \right. {
x˙1?x˙2??==?x2?u=?ωn2?(x1??xref?)?2ωn?x2??
其中 x r e f x_{ref} xref? 為指定的指令。這個公式的形式和上面那個圖雖然不是很像,但是實際上二者是等效的。
參考這個思想,可不可以用最速控制來實現(xiàn)這個二階系統(tǒng)的指令跟蹤,從而構造出一個新的跟蹤-微分器?
ADRC的跟蹤-微分器就是這么來的。
考慮一個二階系統(tǒng):
{ x ˙ 1 = x 2 x ˙ 2 = u ( ∣ u ∣ ≤ r ) \left\{ \begin{array}{rcl} \dot{x}_1 &=& x_2 \\ \dot{x}_2 &=& u &(|u|≤r)\\ \end{array} \right. {
x˙1?x˙2??==?x2?u?(∣u∣≤r)?
則以原點為收斂點的最速控制函數(shù)為:
u = ? r s i g n ( x 1 + x 1 ∣ x 2 ∣ 2 r ) u=-rsign(x_1+\frac{x_1|x_2|}{2r}) u=?rsign(x1?+2rx1?∣x2?∣?)
可以設計跟蹤器為:
u = ? r s i g n ( x 1 ? x r e f + x 1 ∣ x 2 ∣ 2 r ) u=-rsign(x_1-x_{ref}+\frac{x_1|x_2|}{2r}) u=?rsign(x1??xref?+2rx1?∣x2?∣?)
這就是ADRC的跟蹤-微分器的連續(xù)形式,但是這個東西在進入穩(wěn)態(tài)后算出來的微分量會一直高頻振蕩。主要原因就是 u u u 中符號函數(shù) s i g n ( x ) sign(x) sign(x)的存在,即使經(jīng)過積分一次后得到的 x 2 x_2 x2? 依然避免不了震蕩。因為數(shù)值積分嘛,你懂的。
所以為了能夠?qū)崿F(xiàn)離散系統(tǒng)的最速控制,消除跟蹤-微分器的穩(wěn)態(tài)顫振,韓教授又搞了一個離散最速控制函數(shù),這個比較復雜一點。這里我們只負責介紹跟蹤-微分器的思想,關于離散最速控制函數(shù)放到下一部分(ADRC的公式以及參數(shù)整定)再講。
總之,這里的跟蹤-微分器是為了解決1、2兩個問題:安排過渡過程以及提供微分信號。
注意:其實第二個問題在ADRC里被拆成兩部分了,由誤差提取誤差微分包括了兩部分:指令的微分和輸出量的微分(因為誤差等于指令減去輸出量)。指令的微分是由跟蹤-微分器搞定的,而輸出量的微分是由后面的擴張狀態(tài)觀測器搞定的。
3. 加權和的策略不一定最好——非線性反饋
傳統(tǒng)的線性反饋方式(就是誤差直接乘上一個增益)在收斂速度以及抗擾動能力上存在不足。
ADRC的方案是 用非線性函數(shù)代替?zhèn)鹘y(tǒng)的增益(用非線性反饋代替線性反饋)。
這里也可以舉個例子,比較兩個系統(tǒng),分別使用線性反饋和非線性反饋:(1) x ˙ = ? K x \dot{x}=-Kx x˙=?Kx
以及 (2) x ˙ = ? K ? s i g n ( x ) ? ∣ x ∣ α ( α < 1 ) \dot{x}=-K*sign(x)*|x|^\alpha(\alpha<1) x˙=?K?sign(x)?∣x∣α(α<1)
假設 x 0 ≠ 0 x_0≠0 x0??=0,則可以證明系統(tǒng)(2)能在有限時間內(nèi)收斂到0,而系統(tǒng)(1)是指數(shù)收斂的,意思是永遠收斂不到0。
這里也給一個仿真例子:
圖6 使用線性反饋👆
圖7 使用非線性反饋👆
初始值為1時,仿真結果:
圖8 使用線性反饋和非線性反饋仿真對比👆
可以看到非線性反饋更快地收斂到0了,不過需要注意的是非線性反饋相對于線性反饋的快速性的優(yōu)勢只在 x < 1 x<1 x<1的時候才有,而且在靠近 x = 0 x=0 x=0的附近容易引起顫振。
4. 積分反饋的副作用——擴張狀態(tài)觀測器
積分的主要作用之一就是消除擾動(可以認為它是簡單的擾動觀測器),但是積分起作用比較慢,而且還會引起超調(diào)。
所以ADRC直接把積分舍棄了,使用擴張狀態(tài)觀測器來觀測總擾動,將系統(tǒng)補償成純積分鏈(不知道這個學名是啥)的形式。這樣控起來就容易多了,可以說,擴張狀態(tài)觀測器是ADRC的靈魂和精髓所在,在它面前,前面幾個都是次要的。
用一個例子說明一下上面所說的幾點:
假設某系統(tǒng) x ˙ = u + w \dot{x}=u+w x˙=u+w,其中 x x x為狀態(tài)量(也是被控量), u u u為控制量, w w w為未知的總擾動(包括模型偏差或者外部擾動等等)。
比較兩種情況,一種是 w w w沒有被補償,在線性反饋的基礎上加上積分反饋去抵消,以達到無靜差的目的。另一種是把 w w w補償?shù)簦皇R粋€積分環(huán)節(jié),采用普通的線性反饋。
第一種情況: u = ? K P ? x ? K I ? ∫ x d τ u=-K_P*x-K_I*\int{x}d\tau u=?KP??x?KI??∫xdτ
圖9 采用PI控制的方式👆
w = 0.2 , x 0 = 1 w=0.2,x_0=1 w=0.2,x0?=1,取 K P = 2 K_P=2 KP?=2
先看一下沒有積分反饋(也就是 K I = 0 K_I=0 KI?=0)時 x x x最后能控成什么樣子
得到的 x x x 的仿真結果為:
圖10 無積分反饋時,最后 $x$ 無法回到0,有靜差👆
接著給出有積分反饋(如上上圖,也就是 K I = 0.8 K_I=0.8 KI?=0.8)時 x x x最后能控成什么樣子
得到的 x x x 的仿真結果為:
圖11 有積分反饋時,雖然收斂過程坎坷了點,但最后無靜差👆
再看一下 K I ? ∫ x d τ K_I*\int{x}d\tau KI??∫xdτ與 w w w的對比情況
圖12 積分器對擾動的觀測效果👆
這里說的是積分器對擾動的觀測效果,其實應該是補償效果。可以看到積分環(huán)節(jié)產(chǎn)生的超調(diào)現(xiàn)象比較明顯,并且如果積分增益取大了則超調(diào)就大,如果取的小則收斂就慢,沒轍。
第二種情況我們把擾動去掉(假設被觀測出來然后補償?shù)袅耍挥靡粋€ K P K_P KP?來控,那么結果的就很容易想到了:閉環(huán)之后這是一個單純的慣性環(huán)節(jié),沒有超調(diào),收斂的快慢只和增益有關,增益越大,收斂越快。
和前面的圖6一樣:
圖13 補償之后的一階系統(tǒng)👆
對于一階系統(tǒng)來說,就是把模型補償成一個積分環(huán)節(jié)( n n n階系統(tǒng)補償之后就是 n n n個積分串在一起)。
x x x 的仿真結果:
圖14 (假設)補償之后的控制效果👆
通過對比可以發(fā)現(xiàn),還是把擾動補償?shù)舾谩?/p>
利用擴張狀態(tài)觀測器,ADRC理論上可以把一個任意階的系統(tǒng)補償成任意階的積分鏈,然后就可以用簡單的線性控制方法去實現(xiàn)控制了,而且也能得到較好的控制效果。所以說擴張狀態(tài)觀測器是ADRC的精髓,把前面的跟蹤微分器換成一個別的什么的線性濾波器沒問題,把非線性反饋換回線性反饋沒問題,但是這個觀測擾動并補償?shù)乃枷氩荒軄G。
ADRC的公式以及參數(shù)整定
前面一直是一些簡單的例子解釋說明ADRC的各個組成部分,只是對概念的理解。接下來要給出ADRC的公式以及我對其參數(shù)的理解,理解參數(shù)的含義能夠大大提升參數(shù)整定的能力。
下次再寫。
一、跟蹤微分器(TD)
二、非線性反饋函數(shù)
三、擴張狀態(tài)觀測器(ESO)
ADRC應用到二階導彈模型
這部分的餅也先畫上,其實模型和腳本我都已經(jīng)弄好了。
matlab腳本
simulink模型
結語
發(fā)現(xiàn)這個ADRC還真挺好用的,而且里面的一些思想其實和一些非線性控制都是相通的。
比如指令濾波和指令微分器,這個在反步法里也是標配的,不過反步法里的指令微分直接拿來做前饋補償?shù)模皇怯脕碛嬎阏`差微分的。
再比如非線性反饋,這是(終端)滑模控制里的嘛,不過滑模控制證明穩(wěn)定性更容易一些。
最后是這個擴張狀態(tài)觀測器,本來是在龍伯格觀測器基礎上擴張了一個誤差狀態(tài),然后把里面的線性項換成了非線性項,使其收斂更加快速,但是改造完之后這個ESO就跟高階滑模觀測器很像了。
總結
以上是生活随笔為你收集整理的初步认识ADRC(自抗扰控制)与应用的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 迅雷打不开php文件怎么办
- 下一篇: 苹果iPhone 7手机怎么设置手势解锁