自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

到底什么是串級PID?

開發(fā) 前端
本文簡單介紹了串級PID的相關(guān)概念,以四軸飛行器為例,對比了簡單PID和串級PID的優(yōu)劣。

[[382574]]

本文轉(zhuǎn)載自微信公眾號「小麥大叔」,作者菜刀和小麥。轉(zhuǎn)載本文請聯(lián)系小麥大叔公眾號。   

什么是串級PID?

什么是串級PID?顧名思義就是兩個串起來的PID,下面是一個雙閉環(huán)的例子,外環(huán)是位置環(huán),內(nèi)環(huán)是速度環(huán),最終的執(zhí)行器是電機,電機輸出產(chǎn)生了速度和位置;具體框圖如下圖所示;

當(dāng)然執(zhí)行器也可以是四軸飛行器,整體過程如下:

  • 我們在外環(huán)給定相應(yīng)的位置高度,外環(huán)PID的輸出就是內(nèi)環(huán)PID的期望值;
  • 內(nèi)環(huán)PID的輸出將產(chǎn)生相應(yīng)的油門大小,最終飛行器會產(chǎn)生上升的速度;
  • 內(nèi)環(huán)反饋值為速度,控制相應(yīng)的速度達到外環(huán)所需的速度期望值;
  • 最終外環(huán)達到期望的位置;

可能這里比較抽象,好吧,下面繼續(xù)細化一下硬件的細節(jié);

PID的算法控制其實是一種無系統(tǒng)模型的控制,可以根據(jù)參數(shù)經(jīng)驗經(jīng)驗去調(diào)試系統(tǒng);

但是實際的物理對象的模型其實早就確定好了,PID的輸入量和輸出量的物理意義也會因為實際的被控對象而改變;

換句話說,PID的輸入基本上和系統(tǒng)的反饋量相關(guān),而實際的反饋量是什么,從一開始就因為系統(tǒng)而確定下來了;

內(nèi)環(huán)和外環(huán)

如果外環(huán)是因,那內(nèi)環(huán)就是果。萬物皆有因果。

比如伺服控制器的三環(huán):

  • 位置環(huán)
  • 速度環(huán)
  • 電流環(huán)

外環(huán)的變化會直接導(dǎo)致內(nèi)環(huán)的變化,而內(nèi)環(huán)是直接導(dǎo)致執(zhí)行器變化的關(guān)鍵,如果這里依然使用飛行器作為例子,對于整個四軸飛行系統(tǒng)而言;

  1. 我們通過控制電機的電流,從而決定電機的輸出扭矩;
  2. 扭矩和負載一起決定電機轉(zhuǎn)速;
  3. 螺旋槳快速旋轉(zhuǎn)從而產(chǎn)生了飛行器的升力,于是也決定了上升的速度;
  4. 最終也導(dǎo)致了飛行器的位置變化;

這是整個的控制過程。

如果只用單環(huán)的PID去控制系統(tǒng),可以在給定系統(tǒng)期望的情況下達到所需要的位置嗎?

答案是可以。

那這樣串級PID還有什么意義嗎?

答案是有。

我們試想一下,如果單純使用單環(huán)PID去控制系統(tǒng)。

那我們看一下單環(huán)的PID系統(tǒng)框圖;

我們設(shè)定了一個高度,并且希望飛行器達到預(yù)期位置高度,那么這時候系統(tǒng)的反饋值只有位置量;

那么飛行器是以什么樣的速度去飛行?以什么樣的加速度去啟動?我們就無法去有效地控制飛行器的速度,讓它去快速地到達期望的位置,具體位置曲線如下圖所示;

其實不難理解,因為一開始的高度差很大,所以PID計算輸出的值就很大,因此初始速度會非常大,隨著飛行器越來越接近期望位置,偏差越來越小,PID輸出量逐漸減小,因此速度逐漸減小。

其實很多時候,PID只是底層,稱之為內(nèi)環(huán)PID,通過它可以先穩(wěn)定某個系統(tǒng),優(yōu)化動態(tài)特性,然后在外層嵌套其他算法,當(dāng)然,外面有好幾層PID的控制系統(tǒng)是也很常見的。也就是我們介紹的串級PID的系統(tǒng),具體如下所示;

控制器的本質(zhì)是出入跟輸出的函數(shù)映射關(guān)系。

其實從這個角度來看,通常PID適用于低階的線性時不變系統(tǒng),在此基礎(chǔ)上限制到P,I,D三個系數(shù)。

整體還需要根據(jù)具體的系統(tǒng),有所變化,有的系統(tǒng)其實只需要兩個系數(shù)(比如PD或PI),甚至有的系統(tǒng)只需要一個就行(比如P)。因此上面系統(tǒng)中,外環(huán)只需要使用P環(huán)節(jié)就足夠了,另外可以對速度曲線進行規(guī)劃。

假設(shè)這里使用了速度曲線規(guī)劃,因為可以對飛行器的速度進行控制了;

所以我們期望它盡快達到最大速度,因此從最開始的階段進行勻加速,達到最大速度后開始勻速上升,即將到達期望位置的時候,進行勻減速,最終懸停到目標位置;

那么整體的位置變化曲線如下所示;

換句說話說,就是外環(huán)PID的輸出作為內(nèi)環(huán)PID的輸入;

下面是單環(huán)PID的偽算法;

  1. previous_error := 0  //上一次偏差 
  2. integral := 0   //積分和 
  3.  
  4. //循環(huán)  
  5. //采樣周期為dt 
  6. loop: 
  7.  //setpoint 設(shè)定值 
  8.  //measured_value 反饋值 
  9.     error := setpoint − measured_value //計算得到偏差 
  10.     integral := integral + error × dt //計算得到積分累加和 
  11.     derivative := (error − previous_error) / dt //計算得到微分 
  12.     output := Kp × error + Ki × integral + Kd × derivative //計算得到PID輸出 
  13.     previous_error := error //保存當(dāng)前偏差為下一次采樣時所需要的歷史偏差 
  14.     wait(dt) //等待下一次采用 
  15.     goto loop 

那么改成串級PID需要如何操作呢?

具體偽算法如下所示;

  1. previous_error := 0  //上一次偏差 
  2. integral := 0   //積分和 
  3.      
  4. previous_error_inner := 0  //內(nèi)環(huán)PID上一次偏差 
  5. integral_inner := 0   //內(nèi)環(huán)PID積分和 
  6.      
  7.      
  8. //循環(huán)  
  9. //采樣周期為dt 
  10. loop: 
  11.  
  12.  //外環(huán)計算 
  13.  //setpoint 外環(huán)設(shè)定值 
  14.  //measured_value 外環(huán)反饋值 
  15.     error := setpoint − measured_value //計算得到偏差 
  16.     integral := integral + error × dt //計算得到積分累加和 
  17.     derivative := (error − previous_error) / (n*dt) //計算得到微分 
  18.     output := Kp × error + Ki × integral + Kd × derivative //計算得到PID輸出 
  19.     previous_error := error //保存當(dāng)前偏差為下一次采樣時所需要的歷史偏差 
  20.  
  21.     setpoint_inner = output //外環(huán)的PID輸出賦值給內(nèi)環(huán)的PID輸入 
  22.          
  23.     wait(n*dt) //等待下一次采樣 
  24.  goto loop 
  25.  
  26. loop_inner:        
  27.  //setpoint_inner 內(nèi)環(huán)設(shè)定值 
  28.  //measured_value_inner 內(nèi)環(huán)反饋值 
  29.     error_inner := setpoint_inner − measured_value_inner //計算得到偏差 
  30.     integral_inner := integral_inner + error_inner × dt //計算得到積分累加和 
  31.     derivative_inner := (error_inner − previous_error_inner) / dt //計算得到微分 
  32.     //計算得到PID輸出 
  33.     output_inner := Kp_inner × error + Ki_inner × integral_inner + Kd_inner × derivative_inner  
  34.     previous_error_inner := error_inner //保存當(dāng)前偏差為下一次采樣時所需要的歷史偏差 
  35.     wait(dt) //等待下一次采樣 
  36.     goto loop_inner 

這里將內(nèi)環(huán)PID的相關(guān)變量加了后綴 _inner,loop是外環(huán)PID進行周期控制,loop_inner是內(nèi)環(huán)PID進行周期控制,兩者相互獨立,將外環(huán)PID的輸出賦值給內(nèi)環(huán)PID的輸入即可;

遇到干擾的時候,內(nèi)環(huán)控制器首先進行粗調(diào),外環(huán)控制器再進一步細調(diào)。

因此控制效果必然優(yōu)于單環(huán)的PID控制系統(tǒng)。

串級控制系統(tǒng)在結(jié)構(gòu)上僅僅比簡單控制系統(tǒng)多了一個內(nèi)環(huán)回路,可是實踐證明,對于相同的干擾,串級控制系統(tǒng)的控制質(zhì)量是簡單控制系統(tǒng)無法比擬的。

PID參數(shù)

串級PID的參數(shù)整定基本遵循從內(nèi)到外,先整定內(nèi)環(huán)PID的參數(shù),再整定外環(huán)PID的參數(shù);

根據(jù)經(jīng)驗法調(diào)試參數(shù),通常來說先整定內(nèi)環(huán)比例參數(shù)P,然后整定積分參數(shù)I,動態(tài)特性可以整理微分參數(shù)D,當(dāng)然還需要對飽和的情況進行處理;

總之可以觀察輸入輸出曲線;

那到底什么樣的響應(yīng)曲線算好的呢?

一般來說并不存在最優(yōu)的,比如有的對速度和加速度有限制,有的系統(tǒng)一定不能出現(xiàn)超調(diào)量等等,有的系統(tǒng)則是響應(yīng)越快越好。所以還是那句話,我不要你覺得,我要我覺得,合適才是最好的。

總結(jié)

本文簡單介紹了串級PID的相關(guān)概念,以四軸飛行器為例,對比了簡單PID和串級PID的優(yōu)劣;作者能力有限,難免存在錯誤和紕漏,請不吝賜教。

 

責(zé)任編輯:武曉燕 來源: 小麥大叔
相關(guān)推薦

2019-08-21 08:25:23

IaaS云計算數(shù)據(jù)中心

2022-06-16 07:04:12

RedCap5G技術(shù)

2024-08-27 08:16:01

2021-10-28 21:54:00

RedCap網(wǎng)絡(luò)

2023-09-26 00:01:48

DSP光模塊技術(shù)

2025-03-24 12:18:25

數(shù)據(jù)庫數(shù)據(jù)倉庫存儲

2024-07-25 15:00:38

2023-11-15 18:55:27

2020-12-22 06:00:12

CDN互聯(lián)網(wǎng)邊緣計算

2023-08-18 06:51:13

2021-09-03 07:23:59

哈希洪水攻擊黑客DDoS

2020-06-18 07:52:36

云網(wǎng)融合5G

2020-11-10 07:05:41

DockerK8S云計算

2020-09-04 06:34:25

5GTDDGNSS

2022-08-05 20:17:44

算力網(wǎng)絡(luò)計算與網(wǎng)絡(luò)

2022-03-17 21:30:31

BRAS寬帶服務(wù)器

2020-07-02 14:30:12

SDNSDON交換機

2022-04-15 06:47:54

敏捷開發(fā)代碼開發(fā)

2022-05-18 17:12:38

Wi-Fi 6網(wǎng)絡(luò)技術(shù)

2015-12-01 13:33:51

UnikernelLinux運維
點贊
收藏

51CTO技術(shù)棧公眾號