关于多旋翼式飞行器系统的研究
2016-07-12周小莹刘向东周湘淇
周小莹 刘向东 周湘淇
【摘 要】本文设计的多旋翼式飞行器是基于单片机控制下,具有一定功能的自主飞行器。重点讨论多旋翼飞行器的定高实现过程。通过的对机身高度的数据采集处理分析,及多旋翼式飞行器的定高算法的设计,结合实际,进行研究。
【关键词】定高;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.
[责任编辑:杨玉洁]