APP下载

关于多旋翼式飞行器系统的研究

2016-07-12周小莹刘向东周湘淇

科技视界 2016年6期
关键词:PID控制数据处理

周小莹 刘向东 周湘淇

【摘 要】本文设计的多旋翼式飞行器是基于单片机控制下,具有一定功能的自主飞行器。重点讨论多旋翼飞行器的定高实现过程。通过的对机身高度的数据采集处理分析,及多旋翼式飞行器的定高算法的设计,结合实际,进行研究。

【关键词】定高;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.

[责任编辑:杨玉洁]

猜你喜欢

PID控制数据处理
认知诊断缺失数据处理方法的比较:零替换、多重插补与极大似然估计法*
ILWT-EEMD数据处理的ELM滚动轴承故障诊断
内模控制在火电厂主汽温系统中的应用
常规PID控制和常规模糊控制的比较
MATLAB在化学工程与工艺实验数据处理中的应用
Matlab在密立根油滴实验数据处理中的应用
基于POS AV610与PPP的车辆导航数据处理
依托陆态网的GNSS远程数据处理软件开发