串級PID為什么外環輸出是內環的期望?
我們先來看一個最典型的反饋系統
是不是非常熟悉,好像控制器天生就有能力鏈接我們的物理世界,輕而易舉的改變物理對象。
但是仔細看,說破天,這個算法也就是一堆數學公式,輸入的是數字,輸出的也是數字,它怎么就能改變物理量呢?
控制器輸出如何連接物理世界?
正如我們所想,幾個數字不應該,也不能夠直接改變物理量,真正能改變物理量的是執行器。
所以更真實的控制圖應該是這樣的。
我們應該感謝現在的執行器做的足夠好,他們通常都有自己的驅動器,我們只需要通過輸出一些簡單的電平信號,驅動器就會幫助我們控制執行器。
典型的執行器就是電機,電機的驅動器,例如電調,通常都是用PWM信號就可以控制。
我們現在用的算法,最終都是寫在一個單片機里的,所以嚴格來說我們使用的是數字PID算法,算法本身的確只能輸出一些數字,但是單片機對于產生電平信號,卻是非常擅長,簡單的設置一下寄存器,真的只需要一個數字就可以產生你想要的PWM信號了。
舉個例子:有一個電機,他的手冊上寫著,400HZ頻率的PWM信號下,100%占空比為1000轉每分鐘,0%占空比為0轉每分鐘。
這時候你根據你設計好的控制器框圖,用你的期望轉速,例如500,與實際轉速,例如0,做差,誤差500通過PID后可以得到一個控制器輸出,例如90,然后把90給單片機的寄存器,它自動的就產生了一個占空比為90%的PWM信號。這個信號傳遞給驅動器的時候,電機颼~的一聲轉了起來,物理世界真的因為你發生了一些改變。
控制器如何利用誤差
那在這個過程中PID的作用是什么呢?為什么不能直接用誤差作為輸出,產生PWM呢?
最簡單的思路其實就是只用誤差來產生PWM,也就是利用當前的誤差(比例),這個很容易理解,如果當前我們誤差很大,我們自然就希望執行器能輸出最大值盡快縮小這個誤差。
但是誤差還有其他信息我們可以用,例如過去的誤差(積分),如果如果過去我們的誤差一直很大,是不是代表我們一直都處于離目標很遠的地方,那我們在輸出的時候也可以考慮這一點。
而且我們還能利用將來的誤差(微分),如果誤差的改變越來越快,代表我們正在加速變化,很有可能導致我們,超過期望位置,所以我們也要把將來的誤差考慮進去。
「所以PID把誤差的全部信息的加權組合」,是綜合考慮你能掌握所有跟誤差有關想信息,這樣高級誤差才能更加快準穩的消除誤差,但是,「誤差的組合依然就是個誤差」,單次看他就是個數字,連續起來看他是個跟隨誤差變化的曲線,沒有實際的物理意義。
如果你能理解上面兩點,我們再結合實際講一講。
通常你會發現,最后會把控制器輸出限制成[-1,1]或者[0,1],其實這只是個工程技巧,是為了方便映射成PWM的占空比。
在單片機中你需要輸出某個固定頻率的PWM,使他從占空比從0到100變化,但根據你的設置不同,要產生這個效果,你需要的寄存器配置也許需要從1000到2000。
如果你把PID的輸出限制在[-1,1],后續通過簡單的映射就可以變化到[1000,2000],這就意味著你的PID調節只需要選擇合適的參數讓PID的輸出隨著誤差變化在[-1,1]之間變化即可。
相反如果你將控制輸出直接對應到占空比,那你需要你的PID做處理,而且要調節參數,才能使PID輸出隨著誤差變化在[1000,2000]之間變化。
所以你看見的處理其實都是工程技巧,是為了讓你能更好的理解。
控制器的期望有物理意義嗎?
PID是輸出沒有物理意義,那它的輸入呢?
讓我們找來一幅非常“合理”的控制框圖。通常大家接受的邏輯是,我想控制加速度,所以我要反饋加速度,通過誤差讓執行器改變加速度。
好像這里的期望天生就該是加速度一樣。
真的是這樣嗎?
那我們把這套框圖重新換一下。
這里的期望還應該是加速度嗎?
顯然這里是期望代表的物理量應該是速度,這就有點奇怪了,整個控制結構沒有任何變化,怎么期望說變就變了?
那是因為你把需要控制的物理對象改變了,所以期望值的物理量也變化了。
這就說明,「期望值是什么,與控制器沒有關系」,而是與物理對象有關。更直接的原因是因為你使用了這個物理量做反饋而,期望值需要與反饋做差,所以期望值才有了物理意義。「期望值是什么取決于反饋值是什么。」
假設圖1圖2的期望都是數字3。
如果我不告訴你我的反饋是什么物理量,你能知道這個3代表什么物理意義嗎?它沒有任何意義,就是數字3而已。
一旦我告訴你圖1,反饋的是加速度,這時候你才知道,3代表的是我的期望加速度,但是這還不夠,單位還沒確定,這時候我再告訴你我反饋的加速單位是cm/s/s,這時候期望的才具有了真正的物理意義,就是我的期望是3cm/s/s。
所以真正讓期望有物理意義的原因是因為你反饋了一個物理量,而不是因為PID算法。
真正的邏輯是,
1.我的執行器能改變加速度這個物理量,
2.我把加速度作為反饋,用誤差消除誤差。
3.設定期望值,這個值的物理意義需要與反饋一致。
所以,你的期望值是什么其實完全取決于你的反饋值,如果不表明反饋值,那期望值就是一個數字,或者一條曲線而已。
為什么要用串級PID呢
看上去PID不是已經夠完美了嗎?只要我能給出反饋,我就能控制所以的物理量不是嗎?
為什么還要雙閉環PID呢?那為什么說外環輸入是內環期望呢?為什么位置誤差經過PID就變成速度期望了呢?
那我們就來設計一個位置控制器吧!
感覺好像沒什么問題,但是跟之前有些許不一樣,之前我們的「執行器能直接改變反饋值」,但是在這個控制器里,執行器依然只能改變升力,只不過,因為升力改變,會有加速度,從而導致速度變化,最終導致位置變化。
如果你按照圖中的思路設計控制器,那就說明「你只對位置有期望」,這意味著你對升力,速度沒有期望,也就意味著加速度,速度是什么都無所謂。
所以實際效果變成什么呢?「你會以一個你無所謂的加速度,和速度,到達你的期望位置。」
這時候奇怪的事情發生了,到達你的期望位置時有加速度和速度,那這個就不是「到達期望位置」了,這叫「經過期望位置」。你會發現你的對象在期望位置附近“反復橫跳”,超過后,又退回去,退過了,又超過去。
這時候你才想起來,原來「你期望的是停在期望位置上」。「什么叫停在期望位置上?就是到達期望位置的同時加速度與速度都為0。」
這個問題是如何產生的,為什么之前沒有這個問題。
之前在單級PID時我們舉的例子中,期望被控制的物理量,都是可以直接被執行器改變的。
但是在這個例子中,「期望被控制的物理量,不能被執行器直接改變,但是可以被間接改變,并且你知道間接改變的過程。」
之前我們想控制位置,類似于控制機器人,給出命令,它直接走到對應的位置。
現在我們想控制位置,類似于控制車,你只能踩油門加速,或者剎車進行減速,你只能通過速度控制間接控制位置。
但是你肯定知道,車我們也是可以控制位置的,還記得駕校里的倒車入庫嗎?不就是讓你精準的控制位置嗎?
開車的時候是怎么控制位置的呢?你想停在指定位置的時候,你先以一定的速度前往指定位置,快到的時候,通過剎車不斷減速,直到速度為0,停到期望的位置。
這個過程告訴了我們什么?我們只通過控制速度就可以間接控制位置,也就是說「我們可以通過控制某個物理量的變化快慢,從而間接控制這個物理量。」
所以我們只需要選擇「合適的速度變化曲線」就可以停在我們想要的位置。那我們就可以把控制器設置成下面的結構。
什么是「合適的速度變化曲線」呢,
首先當到達期望位置的時候,速度應該為0。
其次當沒有到達期望位置的時候,期望速度是可以減小位置誤差的。
總結一下:「期望速度必須能減小位置誤差,且位置誤差為0時,期望速度為0。」
什么意思呢?如果前方為正方向,當期望位置在我們前方時,即target-current>0,那我們就希望能有個向前的正速度,去縮小這個誤差,當誤差為0時,我們希望速度為0。滿足這樣的過程的速度變化曲線,就是「合適的速度變化曲線」。
想想開車的時候,快到終點的時候會出現什么操作?
新手在沒達位置的時候,希望有一個比較快的速度,快到了直接一腳剎車踩到底。
高手可以提前預判,勻速降低速度。
更高階的可以變化的減速讓整個速度變化如絲般順滑。
就有了下面的曲線。
(第一個曲線是實際中是做不到的,因為速度減小需要過程,不能突變)
因為我們對期望速度的要求「期望速度必須能減小位置誤差,且位置誤差為0時,期望速度為0。「所以我們發現這些期望速度都是」與位置誤差相關的且經過0點的曲線」。
位置誤差與期望速度在這時候才建立起的關系,注意,強調一遍,是我們主動把位置誤差與期望速度聯系起來的,起因是我們希望控制速度達到控制位置的效果。
而這種控制能夠被實現的本質是,「速度與位置存在我們已知的簡單變化關系,即速度的積分是位置」,所以改變期望速度才能改變位置,才能減小誤差。
所以合理的控制過程應該就可以設計成這樣。
只要找個合適的函數,根據誤差生成合適的期望速度曲線就可以了。
我們最常使用的是什么樣的曲線呢?
是不是非常熟悉。
因為這兩個曲線滿足「合適的期望速度」的要求,同時也非常的簡單。
只要是滿足「合適的期望速度」的曲線都可以作為期望速度,顯然如果在外環使用PID也是可以的,但是為什么實際中不這么用呢?因為添加積分(I)后,導致響應變慢,添加微分(D)容易引入噪聲,只用P又簡單又有效,何樂而不為呢?
到這里外環的輸出終于理所應當的變成了內環的期望,但是這并不是因為這件事本就應該成立,而是通過你的設計,和真實存在的物理關系,才設計出來的合情合理的雙閉環控制器。
我們再回憶一下這個控制器的設計過程
「1.執行器輸出無法直接控制目標物理量。」
「2.發現控制器能控制物理量的變化量(微分)。」
「3.你想了個辦法,可以通過控制物理量的微分,按照某種曲線變化,從而達到間接控制目標物理量。」
「4.這個曲線必須滿足兩點,存在目標物理量誤差的時候,應該產生一個能減小這個誤差的變化,且當沒有誤差的時候,變化量也應該為0。」
「5.選擇最簡單實用的曲線即可,所以外環選擇KP。」
「6.這個控制能成功的本質是因為,間接控制能成功,間接控制能成功的原因是因為,執行器能改變的量,與目標物理量之間有簡單的物理關系。」
所以為什么外環的輸入是內環的期望呢?因為你在設計控制器的時候,內環的目的就是實現用執行器控制直接能改變的變化量,外環的目的就是找到合適的曲線,來引導目標的微分變化,從而達到間接控制的效果。
你現在能不能理解,「內環是外環的微分」?
如果你對這些還是意猶未盡,下次我們可以講講為什么要選擇不同的外環曲線,大誤差,大增益,小誤差,小增益的KP曲線,與大誤差,小增益,小誤差,大增益,sqrt曲線誰更有優勢。
ok,今天就講這么多,我是如果沒有更新就是在出差的zing,一個有趣的飛控算法工程師,我們下期見。
zinghd
一個有趣的飛控算法工程師
個人公眾號:無人機干貨鋪
長按識別二維碼關注
原創不易,如果覺得不錯可以動動手指,點贊,轉發分享給更多的人
工程師必備
- 項目客服
- 培訓客服
- 平臺客服
TOP




















