周小瑩 劉向東 周湘淇

【摘 要】本文設計的多旋翼式飛行器是基于單片機控制下,具有一定功能的自主飛行器。重點討論多旋翼飛行器的定高實現過程。通過的對機身高度的數據采集處理分析,及多旋翼式飛行器的定高算法的設計,結合實際,進行研究。
【關鍵詞】定高;PID控制;數據處理;多旋翼飛行器
0 引言
多旋翼飛行器是一種有多個螺旋槳的飛行器。四旋翼飛行器是其中最常見的一種。主要用于航拍、橋梁和電力線路檢測、定點巡航、娛樂等。在大學生電子設計競賽中出現了三次關于自主飛行器的命題,本文就簡要圍繞自主飛行中的定高飛行展開研究。
由于前人[1]的研究我們也將飛行器分析為一個非線性高耦合欠控制的系統,在建模時常常忽略外界不穩定因素。飛行器的多個直流無刷電機提供機身的整體升力,由于忽略了多個旋翼之間的耦合,認為整體的升力可以表示為每個旋翼提供升力之和。并提出了下列模型(圖1):
1 濾波算法
在研究定高技術時,對高度的采集尤為重要。理論上講單片機從A/D芯片上采集的信號就是需要的量化信號,但是由于存在電路的干擾、電源噪聲干擾和電磁干擾,在A/D芯片的模擬輸入信號上會疊加干擾信號,為了避免干擾,我們采用軟件濾波的方法,對超聲波采集的數據進行處理。
每50毫秒超聲波模塊采集到的數據為inputHig,設定一個長度為10的數組highall。把每次測得的數據存入數組,最后輸出的數值是前十次的測量值的平均值。主要的濾波算法簡單易懂,且實用,滿足我們控制需求。
ms = millis();
if (ms > t1) {
t1 = ms + 50; //service period 50ms
if (pt.cnt[HIGH]) {
inputHigh = pt.dt_us[HIGH] * 17e-3;
hsum=0;
for(i=0;i<9;i++)
{ hsum+=highall[i+1];
highall[i]=highall[i+1];
}
highall[9]= inputHigh;
hsum+=inputHigh;
inputHigh=hsum/10;
}
}
2 定高PI算法
采用增量式pid算法,具有①算式中不需要累加。控制增量Δu(k)的確定僅與最近3次的采樣值有關,容易通過加權處理獲得比較好的控制效果;②計算機每次只輸出控制增量,即對應執行機構位置的變化量,故機器發生故障時影響范圍小、不會嚴重影響生產過程的優點。p項是的公式是前一次的誤差減去這一次的誤差,由于測量高度是具有相同的時間間隔,根據速度公式v=s/t,可以得出機體在豎直位置的移動速度,我們I項是誤差項,重點矯正機體豎直位置。建立的這樣的數學模型,有較好的控制性能。
herror =SetHigh - inputHigh;
hvelocity = herror - last1herror;
last1herror = herror;
hpidoutput += hp * hvelocity + hi * herror;
3 定高PID算法
該算法與上述算法相似,對微分環節做了極大的改進,具有很強的穩定性。算法中BaroAlt是測得實際的高度,建立一個長度為40的數組,對比計算前20組的高度和后20組的高度的差,反應了系統的變化率,能預見偏差的變化趨勢,因此能超前控制在偏差未形成前進行消除。而且算法中設定了死區,使機體更趨于平穩。
#define UPDATE_INTERVAL 25000 // 40hz update rate (20hz LPF on acc)
#define INIT_DELAY 4000000 // 4 sec initialization delay
#define BARO_TAB_SIZE 40
if (currentTime < deadLine) return;
deadLine = currentTime + UPDATE_INTERVAL;
last = BaroHistTab[BaroHistIdx];
BaroHistTab[BaroHistIdx] = BaroAlt/10;
BaroHigh += BaroHistTab[BaroHistIdx];
index=(BaroHistIdx + (BARO_TAB_SIZE/2))%BARO_TAB_SIZE;
BaroHigh -= BaroHistTab[index];
BaroLow += BaroHistTab[index];
BaroLow -= last;
BaroHistIdx++;
if (BaroHistIdx == BARO_TAB_SIZE) BaroHistIdx = 0;
BaroPID = 0;
//D
temp32 = hd*(BaroHigh - BaroLow) / 40;
BaroPID-=temp32;
EstAlt = BaroHigh*10/(BARO_TAB_SIZE/2);
temp32 = AltHold - EstAlt;
if (abs(temp32) < 10 && abs(BaroPID) < 10) BaroPID = 0;
//P
BaroPID += hp*constrain(temp32,(-2)*hp,2*hp)/100;
BaroPID = constrain(BaroPID,-150,+150); //sum of P and D should be in range 150
//I
errorAltitudeI += temp32*hi/50;
errorAltitudeI = constrain(errorAltitudeI,-30000,30000);
temp32 = errorAltitudeI / 500; //I in range +/-60
BaroPID+=temp32;
4 總結
本文主要研究了多旋翼飛行器的定高控制的方法,建立模型,設計算法,結合前人經驗,對其方法進行改進,完善了多旋翼飛行器的設計,實現了定高飛行。
【參考文獻】
[1]周湘淇,劉向東.四旋翼飛行器懸停控制的研究[J].科技視界,2015-6-15.
[2]李飛.四旋翼飛行器姿態自平衡控制系統的研究[J].2013.
[3]劉麗麗.四旋翼飛行仿真器的建模及控制方法的研究[D].長沙:中南大學,2009.
[4]吳中杰.四旋翼飛行器設計及其姿態控制[J].2012.
[責任編輯:楊玉潔]