周小瑩 劉向東 周湘淇
【摘 要】本文設(shè)計(jì)的多旋翼式飛行器是基于單片機(jī)控制下,具有一定功能的自主飛行器。重點(diǎn)討論多旋翼飛行器的定高實(shí)現(xiàn)過程。通過的對機(jī)身高度的數(shù)據(jù)采集處理分析,及多旋翼式飛行器的定高算法的設(shè)計(jì),結(jié)合實(shí)際,進(jìn)行研究。
【關(guān)鍵詞】定高;PID控制;數(shù)據(jù)處理;多旋翼飛行器
0 引言
多旋翼飛行器是一種有多個(gè)螺旋槳的飛行器。四旋翼飛行器是其中最常見的一種。主要用于航拍、橋梁和電力線路檢測、定點(diǎn)巡航、娛樂等。在大學(xué)生電子設(shè)計(jì)競賽中出現(xiàn)了三次關(guān)于自主飛行器的命題,本文就簡要圍繞自主飛行中的定高飛行展開研究。
由于前人[1]的研究我們也將飛行器分析為一個(gè)非線性高耦合欠控制的系統(tǒng),在建模時(shí)常常忽略外界不穩(wěn)定因素。飛行器的多個(gè)直流無刷電機(jī)提供機(jī)身的整體升力,由于忽略了多個(gè)旋翼之間的耦合,認(rèn)為整體的升力可以表示為每個(gè)旋翼提供升力之和。并提出了下列模型(圖1):
1 濾波算法
在研究定高技術(shù)時(shí),對高度的采集尤為重要。理論上講單片機(jī)從A/D芯片上采集的信號就是需要的量化信號,但是由于存在電路的干擾、電源噪聲干擾和電磁干擾,在A/D芯片的模擬輸入信號上會疊加干擾信號,為了避免干擾,我們采用軟件濾波的方法,對超聲波采集的數(shù)據(jù)進(jìn)行處理。
每50毫秒超聲波模塊采集到的數(shù)據(jù)為inputHig,設(shè)定一個(gè)長度為10的數(shù)組highall。把每次測得的數(shù)據(jù)存入數(shù)組,最后輸出的數(shù)值是前十次的測量值的平均值。主要的濾波算法簡單易懂,且實(shí)用,滿足我們控制需求。
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次的采樣值有關(guān),容易通過加權(quán)處理獲得比較好的控制效果;②計(jì)算機(jī)每次只輸出控制增量,即對應(yīng)執(zhí)行機(jī)構(gòu)位置的變化量,故機(jī)器發(fā)生故障時(shí)影響范圍小、不會嚴(yán)重影響生產(chǎn)過程的優(yōu)點(diǎn)。p項(xiàng)是的公式是前一次的誤差減去這一次的誤差,由于測量高度是具有相同的時(shí)間間隔,根據(jù)速度公式v=s/t,可以得出機(jī)體在豎直位置的移動(dòng)速度,我們I項(xiàng)是誤差項(xiàng),重點(diǎn)矯正機(jī)體豎直位置。建立的這樣的數(shù)學(xué)模型,有較好的控制性能。
herror =SetHigh - inputHigh;
hvelocity = herror - last1herror;
last1herror = herror;
hpidoutput += hp * hvelocity + hi * herror;
3 定高PID算法
該算法與上述算法相似,對微分環(huán)節(jié)做了極大的改進(jìn),具有很強(qiáng)的穩(wěn)定性。算法中BaroAlt是測得實(shí)際的高度,建立一個(gè)長度為40的數(shù)組,對比計(jì)算前20組的高度和后20組的高度的差,反應(yīng)了系統(tǒng)的變化率,能預(yù)見偏差的變化趨勢,因此能超前控制在偏差未形成前進(jìn)行消除。而且算法中設(shè)定了死區(qū),使機(jī)體更趨于平穩(wěn)。
#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 總結(jié)
本文主要研究了多旋翼飛行器的定高控制的方法,建立模型,設(shè)計(jì)算法,結(jié)合前人經(jīng)驗(yàn),對其方法進(jìn)行改進(jìn),完善了多旋翼飛行器的設(shè)計(jì),實(shí)現(xiàn)了定高飛行。
【參考文獻(xiàn)】
[1]周湘淇,劉向東.四旋翼飛行器懸??刂频难芯縖J].科技視界,2015-6-15.
[2]李飛.四旋翼飛行器姿態(tài)自平衡控制系統(tǒng)的研究[J].2013.
[3]劉麗麗.四旋翼飛行仿真器的建模及控制方法的研究[D].長沙:中南大學(xué),2009.
[4]吳中杰.四旋翼飛行器設(shè)計(jì)及其姿態(tài)控制[J].2012.
[責(zé)任編輯:楊玉潔]