0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

飛行控制PID算法的作用解析

STM32嵌入式開發(fā) ? 來源:STM32嵌入式開發(fā) ? 2023-11-27 10:57 ? 次閱讀

PID控制器是一種線性控制器,它主要根據(jù)給定值和實際輸出值構(gòu)成控制偏差,然后利用偏差給出合理的控制量,目前,人們通過科學(xué)研究獲得了諸多具有優(yōu)異控制效果的算法和理論,但在工程應(yīng)用領(lǐng)域,基于經(jīng)典PID的控制算法仍然是最簡單、最有效的控制方案。目前主流的幾款開源飛控中,無一例外地都是采用PID控制算法來實現(xiàn)無人機的姿態(tài)和軌跡控制。

那么PID控制器算法能解決什么問題呢?以多旋翼為例,在沒有控制系統(tǒng)的情況下,直接用信號驅(qū)動電機帶動螺旋槳旋轉(zhuǎn)產(chǎn)生控制力,會出現(xiàn)動態(tài)響應(yīng)太快,或者太慢,或者控制過沖或者不足的現(xiàn)象,多旋翼根本無法順利完成起飛和懸停動作。為了解決這些問題,就需要在控制系統(tǒng)回路中加入PID控制器算法。在姿態(tài)信息和螺旋槳轉(zhuǎn)速之間建立比例、積分和微分的關(guān)系,通過調(diào)節(jié)各個環(huán)節(jié)的參數(shù)大小,使多旋翼系統(tǒng)控制達(dá)到動態(tài)響應(yīng)迅速、既不過沖、也不欠缺的現(xiàn)象。

wKgaomVkBZmAb8fYAAFX7UnEbaM637.png

下面我們簡單的舉個例子讓大家了解一下PID的作用,我們先以一個自動駕駛的小車來舉例子,為什么用小車呢而不用多旋翼來舉例子呢?因為用小車舉例,可以看到小車的行進(jìn)軌跡,根據(jù)軌跡我們可以很直觀的看到PID對控制的影響,便于理解PID的作用。

我們先講P,比例控制?,F(xiàn)在我們想讓這個小車沿著綠線向前走,我們給P設(shè)置一個固定的值,這個值可以讓離開綠線的小車向綠線的方向行駛,離的越遠(yuǎn),方向盤打的角度越大,離的越近,方向盤打的角度越小。橙色的箭頭表示小車行進(jìn)的方向

wKgZomVkBZmAcdxrAAHT-yvluR8305.gif

比如這個小車在這個位置,我們設(shè)置了一個中等大小的P值,想要沿著綠線走,在比例控制下路徑是這樣的,因為小車有一定的速度,到達(dá)綠線時因為慣性的原因又向前運動了,然后再根據(jù)中等P值向回打方向盤,當(dāng)?shù)竭_(dá)綠線時,同樣因為慣性的原因沖過了頭,因為小車越接近綠線,方向盤打的越小,所以小車每經(jīng)過一次綠線,它的偏差就越來越小,所以隨著小車多次的往復(fù)運動,就能離綠線越來越近,理論上最終能夠行駛在綠線上面。

wKgaomVkBZmARtZVAAJF4NGlnhQ492.gif

如果我們把P值設(shè)置的比較大,它的路徑是這樣的,因為方向盤打的角度比較大,所以小車比中等P值的時候較早的到達(dá)綠線,但同樣因為慣性的原因會多次往返綠線的兩側(cè),也是一次比一次接近綠線,因為它方向盤角度打的比較大,所以會比中等P值往返的次數(shù)要多,最終經(jīng)過多次往返,理論上它會離綠線越來越近,最終到達(dá)綠線上方。

wKgaomVkBZmAckBgAAHBWx-BzSI348.gif

如果我們把P值設(shè)置的比較小,也就是方向盤打的角度比較小,它的路徑是這樣的,小車會較晚到達(dá)綠線,因為慣性會往返綠線兩側(cè),但是因為方向盤角度小,小車可以在較少的往復(fù)次數(shù)下接近綠線。

所以我們對比一下設(shè)置這三種P值的結(jié)果,在小車與綠線相同距離的情況下,P值越大,小車的反應(yīng)越快,P值越小,小車的反應(yīng)越慢,所以這三個小車第一次到達(dá)綠線的時間是不一樣的。雖然P值大能夠較快的到達(dá)綠線,但是反應(yīng)比較劇烈,總是因為過快沖過了頭。相反P值小的反應(yīng)比較平緩,但是它反應(yīng)太慢,我們有時候接受不了。

什么樣的P值是合理的呢,就是設(shè)置后,小車的反應(yīng)不是很劇烈,反應(yīng)時間你也能夠接受,那這就是一個相對合理的P值。

那有沒有一種辦法讓它反應(yīng)再快一點,反應(yīng)又不那么劇烈呢,那就要用到接下來我們要講的微分控制了。

wKgaomVkBZmAc2rfAAFnl3w5pIU963.png

我們?yōu)榱瞬蛔屵@個小車沖過頭,我們再給它加一個力,這個力就是D,讓這個力來起一個作用,就是讓小車越接近綠線的時候,接近綠線的速度越慢,小車越遠(yuǎn)離綠線的時候,接近綠線的速度相對較快,這個接近綠線的速度不是小車前進(jìn)的速度,是小車與綠線平行線之間的相對速度。這個D大家可以理解為小車靠近綠線的一個阻力。

16382c38-8c12-11ee-939d-92fbcf53809c.gif

假設(shè)我們設(shè)置了一個相對合理的P值,在P值不變的情況下,微分控制中D值的變化會有怎樣的結(jié)果。比如我們設(shè)置了一個比較合適的D值,微分控制(D)讓小車在靠近綠線時,接近綠線的速度比較慢,這樣比例控制(P)就可以很輕松的讓小車到達(dá)綠線上方行駛。

164c5672-8c12-11ee-939d-92fbcf53809c.gif

如果D值過大,也就是小車靠近綠線的阻力過大,這樣會讓小車需要比較長的時間才能到達(dá)綠線上方。

wKgZomVkBZmALKUMAAGhsC2ysvs215.gif

如果D值設(shè)置的過小,也就是小車靠近綠線的阻力過小,那微分控制(D)就不會對比例控制產(chǎn)生大的影響,所以雖然小車能夠較快到達(dá)綠線,但小車需要多調(diào)整幾次,在綠線的兩側(cè)往復(fù)幾次后才能到達(dá)綠線上方行駛。

那這樣看來比例控制(P)和微分控制(D)的配合,貌似已經(jīng)很完美了。為什么還要有積分控制(I)呢?

wKgZomVkBZmAG8pPAAHZXqftsSg342.png

設(shè)置合適的P值和D值,可以讓小車很好的沿著綠線一直走,但路上不是很平坦,會有些坑坑包包,或者其他的一些干擾,路況不好就會讓小車的行進(jìn)路線發(fā)生偏移,比如小車在這里遇到了坑坑包包,它的行進(jìn)路線就會變成這樣,稍微偏離了綠線一點,因為微分控制(D)讓小車離綠線越近時,靠近綠線的速度越慢,比例控制(P)讓小車在接近綠線時,方向盤又打的比較小,所以小車要走一段路才回到綠線上面。

有沒有辦法讓它更快回到綠線上面呢,所以我們再給它加一個力,這個力就是I,積分控制。我們讓積分控制起這樣的作用:如果P和D的調(diào)節(jié)不是很理想的話,就讓I幫他倆一把,向P的方向上加一個力,這樣可以讓小車更快回到目的路徑。

設(shè)置了I以后,I會根據(jù)誤差和誤差經(jīng)歷的時間進(jìn)行積分,然后決定施加給目標(biāo)方向的力的大小,就能夠讓小車回到目標(biāo)軌跡上。

wKgaomVkBZmAAlrhAAEaTmBYmVA050.gif

一個合適的I值,可以讓小車偏離軌跡后,I可以在合適的時間給P一個合適的力,讓小車快速的回到綠線上面;

wKgaomVkBZmAGZCSAAGXolIH7k4147.gif

如果I值過大,積分控制(I)調(diào)整的力就會比較大,它在幫P的時候會用力過猛,會讓小車沖過綠線,下次幫忙的時候還是用力過猛,P表示很無奈,畢竟I也是好心,經(jīng)過幾次調(diào)整后,小車終于回到綠線上面,但我們看小車的軌跡線產(chǎn)生了一定的振蕩;

wKgZomVkBZmAB3kwAAFhLJNspdo187.gif

如果I值過小,積分控制(I)調(diào)整的力就會比較小,就像有一個手無縛雞之力的柔弱小鮮肉一樣,幫不上太大的忙,所以小車回到正確軌跡的時間就會比較長。

wKgZomVkBZmAWplFAAB-EROIn6w588.gif

說完了PID控制對小車的影響,下面我們再說說PID控制對多旋翼的影響。比如這架多旋翼想要作的是保持機身的水平平穩(wěn)。

我們先從P開始,如果P值設(shè)置的過大,哪怕機身有那么一丁點傾斜,飛行器都會用稍大一些的力去調(diào)整,結(jié)果用力過猛,又繼續(xù)向回調(diào)整,這樣飛行器就會頻繁的調(diào)整自己的水平狀態(tài),導(dǎo)至機身產(chǎn)生振動。

wKgZomVkBZmAAhiBAADsOFiRH3E153.gif

如果P值設(shè)置的過小,飛行器的水平調(diào)整就會顯得力不從心,比如空氣中的微風(fēng)讓飛行器發(fā)生了傾斜,飛行器向回調(diào)整的力比較小,所以需要長一點的時間才能調(diào)平,這樣讓我們覺得它反應(yīng)有點慢。

wKgaomVkBZmAQB02AAD-4EtDwJ4346.gif

比如我們經(jīng)過多次測試設(shè)置了一個比較合適的P值,可以讓飛行器有一個我們能接受的反應(yīng)時間,但稍有一點過沖,會有一些震蕩,接下來再設(shè)置D值,讓D值消除震蕩,如果D值設(shè)置過大,會讓飛行器恢復(fù)平衡時間過長,反應(yīng)變慢,

wKgZomVkBZmAXITyAADBaiwp3pA206.gif

如果設(shè)置了一個過小的D值,會導(dǎo)致效果不明顯,飛行器還是會有震蕩。

wKgaomVkBZmAMSUNAAB0pmOlrSk662.gif

比如我們又設(shè)置了一個合適的D值,可以讓飛行器反應(yīng)不是很慢,也不會有明顯的震蕩。接下來我們再設(shè)置一下I值。這里的I我們可以這么理解,I根據(jù)飛行器的反應(yīng)時間,適當(dāng)?shù)膸兔?,如果飛行器反應(yīng)慢了,他就會幫一下,能讓它的反應(yīng)快一點。但是如果值設(shè)置的過大,這個幫忙可能會用力過猛,導(dǎo)致過沖。

wKgZomVkBZmAS45tAADsmYs_N0E354.gif

如果I值設(shè)置過小,它的幫忙就沒有太大的作用,還是不會讓飛行器反應(yīng)更快。所以設(shè)置一個合適的I值需要多次的測試,讓它的幫忙起作用,又不會用力過猛。有些人怕麻煩就不設(shè)置I值了,其實也沒有太大的影響,只不過離完美還差那么一點。

PID的設(shè)置是一個非常復(fù)雜的過程,對于一般的使用者來說是非常難的。所以有些廠商也想出了一些辦法。

wKgaomVkBZmAHr6vAAJw2R_YgYY918.png

比如3DR的開源飛控APM和PIXHWAK,咱們看它的調(diào)參軟件中,PID部分有這么多要調(diào)的地方,對于一般的用戶來說是比較有難度的,所以它加了一個自動調(diào)參的功能,就是這個AutoTune,可以把遙控器上的一個開關(guān)設(shè)置成自動調(diào)參,找一片開闊地讓飛行器起飛,然后把遙控器上的自動調(diào)參開關(guān)打開,飛控就開始自己控制飛行器進(jìn)行飛行測試,然后根據(jù)測試情況自動設(shè)置一個比較合適的PID參數(shù)。

wKgZomVkBZmATe9dAAKlTuZmbnw517.png

有些廠商作的就更簡單了,直接在調(diào)參軟件里加了一個感度的配置,這個感度大家可以理解為敏感度 ,數(shù)值越大,敏感度越高,不同的軸距都有不同的推薦感度設(shè)置。

左面的這個是大疆NAZA飛控的調(diào)參軟件,調(diào)參軟件說明書里就有一個不同軸距的推薦感度值,右面的拓攻更簡單,直接選擇軸距,就能自動設(shè)置推薦的感度值。

這些廠商的調(diào)參軟件里一般都會有姿態(tài)感度和基本感度,或者叫穩(wěn)定感度。姿態(tài)感度是指飛行器對遙控指令的敏感程度,基本感度或穩(wěn)定感度是指飛行器對于外界干擾反應(yīng)的敏感程度。這樣就比PID理解起來要簡單的多了。

審核編輯:湯梓紅

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 控制器
    +關(guān)注

    關(guān)注

    112

    文章

    16367

    瀏覽量

    178112
  • PID
    PID
    +關(guān)注

    關(guān)注

    35

    文章

    1472

    瀏覽量

    85526
  • 無人機
    +關(guān)注

    關(guān)注

    230

    文章

    10437

    瀏覽量

    180479
  • 控制算法
    +關(guān)注

    關(guān)注

    4

    文章

    166

    瀏覽量

    21726
  • 自動駕駛
    +關(guān)注

    關(guān)注

    784

    文章

    13816

    瀏覽量

    166470

原文標(biāo)題:PID:飛控算法調(diào)試動圖

文章出處:【微信號:c-stm32,微信公眾號:STM32嵌入式開發(fā)】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    初步解析飛思卡爾控制電機PID算法代碼

    分享一篇在其他地方看的分享的飛思卡爾控制電機PID算法代碼解析的,寫得非常的好。PID實指“比例proportional”、“積分integ
    發(fā)表于 11-04 11:59

    PID控制算法【精】

    1.PID是閉環(huán)控制算法因此要實現(xiàn)PID算法,必須在硬件上具有閉環(huán)控制,就是得有反饋。比如
    發(fā)表于 12-28 23:01

    四軸飛行器的PID算法

    四軸飛行器的PID算法 四軸飛行器采用的是雙閉環(huán)PID控制 當(dāng)四軸
    發(fā)表于 01-15 17:03

    四軸飛行控制器的秘密——PID算法解析

    常用四軸的兩種PID算法  這里主要講解的PID算法屬于一種線性控制器,這種控制器被廣泛應(yīng)用于四
    發(fā)表于 05-30 10:08

    介紹一種基于四軸飛行器的雙閉環(huán)PID控制算法

    四軸飛行器的結(jié)構(gòu)是如何構(gòu)成的?四軸飛行器的基本飛行原理是什么?一種基于四軸飛行器的雙閉環(huán)PID控制
    發(fā)表于 05-19 06:20

    什么是PID控制算法?PID控制算法C語言是如何實現(xiàn)的?

    什么是PID控制算法PID控制算法C語言是如何實現(xiàn)的?特殊情況下的
    發(fā)表于 06-29 09:24

    PID算法有哪些應(yīng)用

    說到PID算法,想必大部人并不陌生,PID算法在很多方面都有重要應(yīng)用,比如電機的速度控制,恒溫槽的溫度
    發(fā)表于 07-15 09:44

    PID算法解析,絕對實用

    PID算法解析,絕對實用
    發(fā)表于 01-21 07:40

    什么是PID控制算法呢?PID控制算法有何作用

    什么是PID控制算法呢?PID控制算法有何作用
    發(fā)表于 02-25 07:36

    pid算法_什么是pid算法

    PID控制器是一種最優(yōu)控制。本文講述了增量式PID算法原理與數(shù)字PID
    發(fā)表于 01-01 11:58 ?1.1w次閱讀
    <b class='flag-5'>pid</b><b class='flag-5'>算法</b>_什么是<b class='flag-5'>pid</b><b class='flag-5'>算法</b>

    PID控制算法控制算法

    PID控制算法控制算法
    發(fā)表于 11-17 11:43 ?12次下載

    改進(jìn)PID的無人機飛行姿態(tài)角控制消顫算法_陸興華

    改進(jìn)PID的無人機飛行姿態(tài)角控制消顫算法_陸興華
    發(fā)表于 03-19 11:41 ?3次下載

    四軸PID控制算法詳解(單環(huán)PID、串級PID)

    四軸飛行器的PID控制算法介紹
    發(fā)表于 08-29 14:57 ?52次下載

    PID控制算法的C語言實現(xiàn)

    PID算法C實現(xiàn)1、PID算法簡介1.1、各個環(huán)節(jié)的作用2、位置型PID
    發(fā)表于 01-13 13:39 ?45次下載
    <b class='flag-5'>PID</b><b class='flag-5'>控制</b><b class='flag-5'>算法</b>的C語言實現(xiàn)

    什么是pid控制,其控制作用是什么

    PID控制(Proportional-Integral-Derivative control)是一種常見的自動控制算法,它被廣泛應(yīng)用于工業(yè)自動化、機器人
    的頭像 發(fā)表于 02-01 14:51 ?2443次閱讀