久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 3904|回復(fù): 0
打印 上一主題 下一主題
收起左側(cè)

四軸飛行器算法調(diào)試心得

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:148322 發(fā)表于 2016-11-16 19:01 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
PID調(diào)試心得
本人不是自動(dòng)化出身,也沒有受過專業(yè)訓(xùn)練,都是自己摸索,在這里淺述一下自己的PID參數(shù)整定心得。所言之物皆由實(shí)踐及自己的理解得出,如有不當(dāng)之處還請(qǐng)指正。

首先例舉第一個(gè)例子,我調(diào)的第一臺(tái)四軸飛行器,十字型四軸飛行器,講下配置:
網(wǎng)上一百多的650機(jī)架,好贏20A電調(diào),新西達(dá)2212 1000kV,1045的槳,2200mah電池。
主控是STM32F103
這是第一個(gè)四軸的帖子
www點(diǎn)amobbs點(diǎn)com/thread-5539270-1-1.html

采用位置式PID控制,位置式PID公式如下


PID的基本意義我在次就不作闡述了,我只講我的設(shè)計(jì),我以姿態(tài)角作為被控制對(duì)象,所以
e(k) = 期望-測(cè)量 = 給定值-測(cè)量姿態(tài)角

對(duì)于微分項(xiàng)D,我做了一點(diǎn)改變,標(biāo)準(zhǔn)PID的微分項(xiàng)D=kd*(e(k)-e(k-1)),我在實(shí)踐過程中因?yàn)榻嵌鹊奈⒎志褪墙撬俣龋勇輧x可以直接測(cè)出角速度,
所以我沒有將微分項(xiàng)作為偏差的差而是直接用D=kd*Gyro

實(shí)現(xiàn)代碼如下
float pidUpdate(pidsuite* pid, const float measured,float expect,float gyro)
{
  float output;
  static float lastoutput=0;

  pid->desired=expect;                                                         //獲取期望角度

  pid->error = pid->desired - measured;                   //偏差:期望-測(cè)量值

  pid->integ += pid->error * IMU_UPDATE_DT;          //偏差積分

  if (pid->integ > pid->iLimit)                                  //作積分限制
  {
    pid->integ = pid->iLimit;
  }
  else if (pid->integ < -pid->iLimit)
  {
    pid->integ = -pid->iLimit;
  }                                 

// pid->deriv = (pid->error - pid->prevError) / IMU_UPDATE_DT;                //微分         應(yīng)該可用陀螺儀角速度代替
  pid->deriv = -gyro;
  if(fabs(pid->error)>Piddeadband)                                                                        //pid死區(qū)
  {
                  pid->outP = pid->kp * pid->error;                                                                 //方便獨(dú)立觀察
                  pid->outI = pid->ki * pid->integ;
                  pid->outD = pid->kd * pid->deriv;

                  output = (pid->kp * pid->error) +
                           (pid->ki * pid->integ) +
                           (pid->kd * pid->deriv);
  }
  else
  {
                    output=lastoutput;
  }

  pid->prevError = pid->error;                                                                         //更新前一次偏差
  lastoutput=output;

  return output;
}

我這么做的原因是因?yàn)椋绻褂脗鹘y(tǒng)的D的形式,在我快速打舵時(shí)會(huì)產(chǎn)生輸入的設(shè)定值變化頻繁且幅度較大,四軸飛行器會(huì)迅速回到新的期望點(diǎn),說(shuō)白了就是非常靈活,四軸回復(fù)很猛,也許造成系統(tǒng)的振蕩,對(duì)PID參數(shù)要求較高。如果用角速度代替的話,那怕你打舵非常快,四軸會(huì)較平穩(wěn)的回到新位置,運(yùn)動(dòng)較柔和。對(duì)于我這種操作菜鳥來(lái)說(shuō)無(wú)疑后面一種會(huì)更合適,所以我選擇了D=kd*Gyro的方式。



PID控制器我大概就是這么實(shí)現(xiàn)的,下面講講我在調(diào)試過程中具體遇到的問題。首先我將四軸固定在單軸平衡平臺(tái)上,讓飛行器完成單軸平衡,主要觀察姿態(tài)角的
(1)穩(wěn)定性,能否平衡在期望角度;
(2)響應(yīng)性,當(dāng)操縱命令改變時(shí),四軸能否即時(shí)的響應(yīng)期望的變化;
(3)操縱性,由操縱員感受四軸的姿態(tài)是否已與操縱,會(huì)不會(huì)產(chǎn)生響應(yīng)過沖。


我先調(diào)一個(gè)軸的平衡再調(diào)另外一個(gè)軸,最后調(diào)YAW軸。
A:開始只調(diào)P,將I,D置0。由于不知道PID的大致范圍我就隨便給了一組值
:P=1,I=0,D=0觀察現(xiàn)象。一開電機(jī)四軸就開始劇烈左右搖擺,很明顯P給大了。然后P從小了往上加。從P=0.1開始試。調(diào)試的時(shí)候我就發(fā)現(xiàn)了一個(gè)現(xiàn)象就是我的四軸往一邊歪,離平衡的0度差了那么一個(gè)角度A,P=0.1時(shí)A較大,除非油門推到很大否則四周根本起不來(lái),這是P說(shuō)明給小了,我再將P=0.2這時(shí)四軸狀況無(wú)明顯改善。于是我直接將P加大一點(diǎn)P=0.8,P=0.8時(shí)已經(jīng)可以看出在等幅震蕩了,但是不是在0度的平衡位置,也是偏離的一個(gè)角度B,此時(shí)B較小了。之后我再加大P到1四軸震蕩又變大了,但是到震蕩中心到零度的靜差還是存在。由于此時(shí)I=0,所以我決定不管這個(gè)靜差,先把P的臨界震蕩點(diǎn)找到。P=0.8時(shí)可以觀察到比較明顯的等幅震蕩了,P=0.2時(shí)四軸又顯得的無(wú)力,所以P應(yīng)該在0.2~0.8之間。臨界震蕩點(diǎn)就是P從為震蕩到,剛開始震蕩的點(diǎn)。

在這里還應(yīng)注意一點(diǎn),當(dāng)P太小時(shí),四軸在很大傾斜的地方,在重力與P的作用下也會(huì)震蕩,這種震蕩不是等幅的,也不是對(duì)稱的,震蕩波谷的絕對(duì)值明顯要比波峰絕對(duì)值大而且距離0度會(huì)很遠(yuǎn)。這種情況要加以區(qū)分。

我把P從0.2到0.8開始嘗試,找到一個(gè)適合的點(diǎn),即剛開是出現(xiàn)震蕩的P值最后我定為0.5。注:此時(shí)還是有靜差。
在以上過程中在一開始我一直想通過P來(lái)消除靜差,但是我發(fā)現(xiàn)我把P加到很大,已經(jīng)震蕩的很劇烈了,四軸的震蕩中心都不是在0度位置。所以我只能選擇先選好P,D最后加入I來(lái)解決這個(gè)問題。

P=0.5時(shí)四軸在他的穩(wěn)定位置震蕩比較小了,但是在外力干擾下很難在穩(wěn)定下來(lái),抗干擾能力較差。然后我開始調(diào)D。
在平衡過程中P相當(dāng)于四軸的回復(fù)力,它要努力時(shí)四軸在一個(gè)穩(wěn)定的平衡位置,但這個(gè)位置不一定是你的期望點(diǎn)。個(gè)人認(rèn)為就是當(dāng)偏差不在變化時(shí),pid的輸出也沒有變化了,所以有可能光用P時(shí)穩(wěn)定的位置不一定是平衡的期望的位置。而D是阻尼力,他在四軸有速度的情況下才發(fā)揮作用,它與速度方向相反始終是抑制運(yùn)動(dòng)。所以他可以抑制震蕩,但是他同樣也可以抑制P的作用,當(dāng)震動(dòng)產(chǎn)生時(shí),在震動(dòng)的中心點(diǎn)四軸震動(dòng)速度最大,也是D作用最強(qiáng)的時(shí)刻。

剛開始調(diào)D的時(shí)我就范了一個(gè)錯(cuò)誤。因?yàn)槲腋牧薉的標(biāo)準(zhǔn)型,而D應(yīng)該是抑制運(yùn)動(dòng)的,但是陀螺儀輸出的數(shù)據(jù)符號(hào)導(dǎo)致我這里D變成了增加運(yùn)動(dòng),所以一開始無(wú)論我怎么調(diào)整D,都會(huì)激發(fā)震蕩。后來(lái)我在參數(shù)前加了個(gè)符號(hào)就好了。在這里我提醒要始終注意D是阻尼力,是其抑制震蕩也就是運(yùn)動(dòng)的作用的,它始終期望的是它所作用的對(duì)象沒有運(yùn)動(dòng),至于停在什么位置不是D所關(guān)心的,那是P,I所關(guān)心的。所以直接用陀螺儀數(shù)據(jù)代替偏差的差得話就得注意下。修正這個(gè)問題后加了D效果就比較明顯了,四軸在外力的干擾先能明顯的有回復(fù)力且,能快速穩(wěn)定在平衡點(diǎn)了,調(diào)D就是試,當(dāng)然D大了也會(huì)產(chǎn)生震蕩,但是此時(shí)不加D時(shí)光P作用時(shí)的震蕩就很小,很明顯就可以看出隨著D的增大,震蕩減小又增大的過程。最后P=0.4,D=0.15。

最后定好了P,D后我的四軸還是有靜差,不能穩(wěn)定在期望的0點(diǎn)。網(wǎng)上有很多四軸只用PD,在這里我決定根據(jù)我的實(shí)際情況加入I。調(diào)I的時(shí)候我先把積分限幅去掉。然后從小往大加,當(dāng)調(diào)平衡時(shí),隨著油門的變大,靜差應(yīng)該是越來(lái)小的。我將油門推到差不多快要將四軸推離地面的位置,看I能不能消除靜差。因?yàn)槿绻烷T給小了,靜差較大,調(diào)出來(lái)的I雖然能消除靜差但是I比較大,在加油門時(shí)有可能也會(huì)產(chǎn)生超調(diào)震蕩。最后I要再能消除靜差又不產(chǎn)生震蕩,個(gè)人認(rèn)為要近可能小。最后加上合適的積分限幅。P:0.4,I:0.35,D:0.15。
別忘了以上調(diào)試過程中每次都需要給予平衡一個(gè)干擾,看看參數(shù)在外界干擾情況下做的如何,會(huì)不會(huì)產(chǎn)生超調(diào)震蕩,會(huì)不會(huì)長(zhǎng)時(shí)間才能穩(wěn)定。以上就是我第一臺(tái)四軸的PID調(diào)試。

下面我講講我在調(diào)第二個(gè)X四軸過程中遇到的問題。
第二架四軸是我做了用來(lái)參加愛板網(wǎng)的ARM-STM32校園比賽的,因?yàn)榈谝患軐儆趯W(xué)校了財(cái)產(chǎn)留在學(xué)校了,手里沒有,只好再搞一個(gè)。
第二架的配置采用的是飛越的650碳纖機(jī)架,電調(diào)用的是好贏的奔騰40A,電機(jī)同樣是新西達(dá)2212 1000kV。主控是STM32F407
其實(shí)這個(gè)機(jī)架和電調(diào)配這個(gè)電機(jī)是大才小用了,但是我的預(yù)算實(shí)在不夠了就只好買了個(gè)水一點(diǎn)的電機(jī),等以后再升級(jí)。
這次我采用X型四軸,主要是掛了云臺(tái)。PID的設(shè)計(jì)與之前講的一樣,就不多說(shuō)了直接說(shuō)調(diào)試中遇到的問題。

調(diào)試方法還是先調(diào)平衡桿,如圖:


剛開始調(diào)X的時(shí)候我以為跟十字的差不多,于是我只是簡(jiǎn)單的把原有PID參數(shù)按照新的程序里面的PWM值域縮放了一下倍數(shù),但是發(fā)現(xiàn)不行,PID完全沒有起作用。

具體表現(xiàn)為四軸開機(jī)后直往一邊倒到底。只好重新開始調(diào)。
還是P=1,I=0,D=0開始,這組參數(shù)我發(fā)現(xiàn),開機(jī)后四軸往一邊倒,但是沒有倒下就起不來(lái)了,而是在倒到一個(gè)很大的角度,大概70度左右,電機(jī)力量像是突然加大,四軸起來(lái),反向,接著倒向另外一邊。進(jìn)入失控的大幅震蕩。
因?yàn)橐婚_始就倒,所以是P太小。于是我開始加大P,但是當(dāng)我把P加到很大時(shí),四軸還是一開始往一邊倒,然后電機(jī)力量增大,四軸翻倒向另外一邊,開始發(fā)散性的震蕩。此時(shí)我覺得開始P比較小的時(shí)候是P不足,電機(jī)的慣性的作用下開始震蕩。到后來(lái)是P太大了,直接進(jìn)入震蕩。我始終沒有觀察到一個(gè)等幅震蕩或者說(shuō)接近小幅震蕩的點(diǎn)。無(wú)論P(yáng)大P小我的四軸都會(huì)進(jìn)入失控的發(fā)散震蕩。換而言之這個(gè)X四軸光靠P根本進(jìn)入不不了一個(gè)比較穩(wěn)定的狀態(tài)或者接近穩(wěn)定的狀態(tài)。連相對(duì)穩(wěn)定的等幅震蕩都觀察不到就直接進(jìn)入發(fā)散的震蕩。此時(shí)我開始困惑了。這個(gè)情況跟十字的很不一樣。我沒有明顯觀察到網(wǎng)上流傳最通俗的調(diào)節(jié)PID說(shuō)法的那種情況,即:逐漸加大P直到開始發(fā)生等幅震蕩,然后P不變,加入D抑制震蕩。。。
我觀察到的是P無(wú)論怎么給,我的四軸都倒向一邊然后開始進(jìn)入發(fā)散的震蕩,唯一的區(qū)別就是P小一開始倒下的角度大,P越大一開始倒下得角度越小,進(jìn)入震蕩的越快。此種情況與前一個(gè)四軸的情況截然不同。

當(dāng)我潛入困境時(shí),以為名叫螃蟹的網(wǎng)友幫助了我。他告訴我定P要定在把手放開,開始震蕩,只要左右晃二三次就達(dá)到大晃動(dòng)幅度,大晃動(dòng)幅度大概是45度左右。定下這個(gè)P值后然后加入D,而且D有可能比P大。在這個(gè)基礎(chǔ)上我又開始了調(diào)試。

從頭來(lái)調(diào)P,這次我觀察到新現(xiàn)象。我把四軸稍微傾向一邊幾度,比如說(shuō)左邊,當(dāng)P小時(shí),啟動(dòng)電機(jī)松手后,四軸向左倒,如果P大了,四軸回向右倒。前者是補(bǔ)償不足,后者是補(bǔ)償過度。在這個(gè)兩個(gè)P值得區(qū)間就有我們要找的P,合適的P就是能在平衡位置掙扎左右晃幾下的值。此時(shí)我的P=3.0但是光靠P四軸還是站不住,只能在平衡位置堅(jiān)持個(gè)1,2s。所以得加入D,嘗試D=1,2,3時(shí)沒什么明顯的效果只能觀察到起初的短時(shí)平衡跟穩(wěn)定了點(diǎn)。D=10時(shí)可明顯觀察到平衡的時(shí)間跟長(zhǎng)了,但還是會(huì)倒。當(dāng)D=20,可明顯觀察到四軸可以基本平衡了,但還是有有小幅震蕩,一但有干擾還是不能很快恢復(fù)穩(wěn)定了,D=30時(shí)四軸已經(jīng)開始比之前大的等幅震蕩了,而且當(dāng)有外力干擾時(shí)四軸也能抵抗住外力維持自身在平衡位置的震蕩狀態(tài),說(shuō)明D有起作用但是D大了。在這種情況下還說(shuō)明P還是給小了,回復(fù)力不足。我把D定在25,再開始調(diào)節(jié)P,把P加大。增強(qiáng)恢復(fù)力。后面得的調(diào)節(jié)過程中我就是感覺,P會(huì)產(chǎn)生一種震蕩A,這種A震蕩是會(huì)發(fā)散的,頻率較低。D也會(huì)產(chǎn)生一種震蕩B,B是等幅的,頻率較高的。然后P會(huì)抑制震蕩B,但會(huì)激發(fā)A,D會(huì)抑制震蕩A,但會(huì)激發(fā)B。后面的調(diào)節(jié)參數(shù)就是要調(diào)好P后再調(diào)D,定好D再調(diào)節(jié)P,兩個(gè)參數(shù)互相扶持的趨近一個(gè)最佳點(diǎn),想單靠一個(gè)參數(shù)一次就接近理想值是辦不到的。當(dāng)然機(jī)體表現(xiàn)出的等幅震蕩時(shí)也不一定是D大了,P不合適同樣也會(huì)產(chǎn)生此種情況。還有調(diào)節(jié)參數(shù)時(shí)不要一味只加不減。當(dāng)我P=4,D=50時(shí)我就是將P往回減了點(diǎn)才取得了更好的效果。最后離開平衡桿時(shí)P=3.5,D=50。這次沒有靜差,所以沒有I項(xiàng)。


最后來(lái)總結(jié)幾點(diǎn):
1.我覺得調(diào)節(jié)PID首先要明白最基本PID三項(xiàng)的意義P是回復(fù)力是系統(tǒng)平衡的主力,D是阻尼力,始終是抑制作用,I雖然能使系統(tǒng)回復(fù)但是I大了容易激發(fā)震蕩,所以I只能是輔助P
2.一般從P開始調(diào)節(jié)時(shí)候首先要找到臨界震蕩點(diǎn),要學(xué)會(huì)辨識(shí)系統(tǒng)臨界震蕩點(diǎn)的特點(diǎn),不同系統(tǒng)臨界狀態(tài)可能不同,在這一點(diǎn)上用曲線代替肉眼直接觀察效果好的多。
3.P不一定就比D大,切不可經(jīng)驗(yàn)主義,一切遵循實(shí)際,多嘗試可能性
4.調(diào)節(jié)PID最麻煩的就是會(huì)產(chǎn)生震蕩,只要參數(shù)不合適都會(huì)產(chǎn)生震蕩,初學(xué)者往往心急不知如何下手,其實(shí)是不同參數(shù)不合適而產(chǎn)生的震蕩都有所區(qū)別,要細(xì)心觀察,最好是能看PID輸出,被調(diào)量,設(shè)定值三者的曲線圖,通過圖來(lái)對(duì)比特征曲線得出震蕩產(chǎn)生的原因,關(guān)于曲線特征判別我推薦下面附件中的篇文獻(xiàn)。
5.調(diào)節(jié)參數(shù)是個(gè)令人蛋疼的活,一定要心平氣和,切莫急躁,多多嘗試,我覺得一個(gè)平靜的心態(tài)是在調(diào)PID時(shí)很重要,能讓你腦子清醒的看清問題。調(diào)參數(shù)很枯燥,如果 你很煩或者很著急,調(diào)不出來(lái)只會(huì)讓你更加煩躁,更迷糊。還有就是耐心,多試。參數(shù)選擇剛開始不知道大致范圍時(shí)參數(shù)嘗試變化范圍可以大一點(diǎn)。確定范圍后就要耐心的一點(diǎn)點(diǎn)的加。
6.以上所言都是針對(duì)位置式PID,增量式PID三組參數(shù)所起作用與位置式大相徑庭,不可套用。
7.多與人交流,在這里再次感謝指導(dǎo)我的諸多網(wǎng)友
8.調(diào)節(jié)PID最好能看曲線圖,判別特征曲線,又曲線來(lái)看特征比直接看物體表現(xiàn)好得多

然后貼上我認(rèn)為對(duì)我?guī)椭容^大的兩個(gè)PID資料,一個(gè)講PID基本定義,一個(gè)講PID參數(shù)整

評(píng)分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎(jiǎng)勵(lì)!

查看全部評(píng)分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏4 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 免费的一级视频 | 久久综合国产精品 | 黄色一级大片在线免费看产 | 欧美在线国产精品 | 亚洲品质自拍视频 | 国产精品一卡二卡三卡 | 久久亚洲欧美日韩精品专区 | 国产中文字幕网 | 在线看无码的免费网站 | 精品一区二区不卡 | 亚洲精品福利视频 | 久久影院一区 | 91精品国产综合久久婷婷香蕉 | 国产伦精品一区二区三区视频金莲 | 亚洲97| 在线一区视频 | 一区二区三区在线播放 | 亚洲精品久久 | 中文字幕中文字幕 | 欧美精品成人 | 欧美一级二级视频 | 天堂素人约啪 | 日日夜夜天天 | 国产精品揄拍一区二区久久国内亚洲精 | av性色全交蜜桃成熟时 | 亚洲欧美日本在线 | 天天操,夜夜爽 | 久久一区二区三区免费 | 浴室洗澡偷拍一区二区 | 午夜视频一区二区 | 久久久91精品国产一区二区精品 | 国产精品久久精品 | 久久久精品网站 | 国产在线精品一区二区三区 | 免费在线视频精品 | 日韩欧美国产一区二区三区 | 欧洲精品码一区二区三区免费看 | 高清国产一区二区 | 亚洲欧美在线观看 | 毛片.com| 91久久精品国产91久久性色tv |