L.anrist 发表于 2012-7-19 17:47:16

四轴飞行器入门

本帖最后由 L.anrist 于 2012-7-22 22:23 编辑

四轴飞行器简介

四轴飞行平台是一个模块化、具有较高硬件灵活性和较好操控性的平台装置,这个平台装置能够为科学实验、工程监控、气象监测、灾害预警等提供很好的应用平台。
第一章        硬件设计
四轴飞行器平台硬件设计包括硬件的基本模块主要包括:控制模块、传感器模块、通讯模块、电机驱动模块

1.1电机调速电路设计
四轴飞行器采用四个三相无刷无传感器电机作为动力源,通过调节四个三相无刷电机的转速就可以达到改变飞行器空间姿态的目的,而制作一个性能良好的电机调速装置是制作一台性能稳定的飞行器的前提。我想先从电机调速电路入手,在经过一段时间的搜集资料之后,形成了一个电机调速驱动电路方案。
        三相无刷无传感器电机驱动电路原理图如下:

图1.1 三相无刷无传感器电机驱动电路原理图

        驱动三相电机需要按照一定的顺序给ABC三相通电,从而达到转子流畅转动的目的,基本的通电顺序为AB、AC、BC、BA、CA、CB,对应的场效应管打开顺序为Q1Q4、Q1Q2、Q3Q2、Q3Q6、Q5Q6、Q5Q4。换向时刻的确定方法如下:某相开始换时刻为T1,检测到未通电的那一相的过零点时刻为T2,则换向时刻为T1+2*(T2-T1),过零点检测电路如下:

图1.2 过零点检测电路

        换向过程的控制芯片原版选的为MEGA 8,我在实验阶段换成MEGA 16。
第二章        机械的搭建
四轴飞行器较其余飞行器的优势在于机械比较简单,拆卸组装比较容易,机械硬件搭建仅仅需要用来固定四个电机的电机座和连接电机座的碳纤维杆。我在淘宝上面发现了一款四轴飞行器整体机架,包括:
CNC电机固定座      4个
CNC碳管固定座               4个
3k 12MM 全碳碳管      4根
铝合金机身板         2块
塑料脚架                        1对


第三章        模块
硬件的基本模块主要包括:控制模块、传感器模块、通讯模块、电机驱动模块这四大模块。
        4.1 控制模块
        控制模块这部分需要处理数据,并作出控制决策。控制器只用过单片机,由于缺乏经验,要参考老师的意见。
        4.2 传感器模块
        传感器模块包括:陀螺仪、加速度传感器
        陀螺仪
        主要作用是飞行器的角速度
        加速度传感器
        主要作用是感应飞行器三个轴的线加速度
        通过查找资料,了解到了各自的优缺点:
        加速度传感器        陀螺仪
优点        无累积误差,长时间稳定        数据噪声小,短时间内误差小
缺点        1、        对振动非常敏感,电机的转动和位置的转换会使加速度传感器产生很大的噪声
2、        加速度计运动时,输出量为运动加速度和重力加速度的混合数据        1、        陀螺仪及放大电路有温漂
2、        为了得到角度,必然会对角速度进行积分,而积分会产生累计误差,随着时间的推移,这种误差会越来越大
        因此,就需要将两者数据进行融合处理,通过取寸之所长来补尺之所短,从而获得比较合适的角度信息,这是进行控制算法的前提。
        我在网上查了一下,比较常用而有效的滤波算法是卡尔曼滤波算法。
        4.3通讯模块
        通讯模块主要负责数据和控制信号的传送,具体选用哪种模块还没有定下来。

第四章        融合算法
由于加速度传感器和陀螺仪有着各自互补的优缺点,因此就必须用一种算法将两种传感器的数据进行融合,从而得到相对精确的角度,网上找了一下资料,主要有以下几种融合算法:
1、        偏差修正法。(自己起的名字,文章里面也没有给出名字)

图4.1 偏差修正法算法框图

框图中rate sensor即为某时刻陀螺仪测量的角速度,乘以采样周期T,即得到这段时间内旋转的角度,与上次得到的稳定角度相加,得到还需要处理的“原料角度”,框图下方的加速度传感器采集的数据经过低通滤波器滤波之后,得到重力角度,重力角度与原料角度做差,得到角度偏差信号,偏差信号乘以偏差增益,并与“原料角度”相加,得到本次的稳定角度值。
分析了一下这种算法,觉得本算法的优点有:假设系统初始状态稳定,系统动作,角度变化,此时陀螺仪(rate sensor)积分得到的角度值占据主导左右,因为加速度传感器的数据仅仅通过与偏差的增益值来影响稳定角度,而偏差的增益值应该是个小分量(如果是个大分量的话应该会引起震荡)所以稳定角度值以陀螺仪积分得到的角度值为准,这就利用了陀螺仪在短时间内比较稳定的特点,。较长时间内,系统会不断累积这个小分量的偏差增益值,从而这个小分量在时间的作用下变成一个影响稳定角度值的大分量,也就是稳定角度值会依据加速度传感器的数值来修正稳定角度值,这就利用了加速度传感器在较长时间内稳定的优势,我觉得有一定的可行性。

2.卡尔曼滤波算法
卡尔曼滤波的具体是怎么推论出来的我没有了解,就了解了一下卡尔曼滤波器的使用方法。
算法的具体实现方法如下:
X(K)=A*X(K-1)+B*U(K)+W(K)
Z(K)=H*X(K)+V(K)
其中A、B、H为系统参数,Z(K)为测量值,X(K)为状态值,U(K)为控制量,W(K)、V(K)为过程噪声和测量噪声,下面公式出现的Q、R分别为二者的协方差。
        算法的实现依靠5个公式,算法流程依据这5个公式大体分为5个步骤:
第一步:
        根据K-1时刻的最优结果计算出K时刻的估计值:
X(K|K-1)=A*X(K-1|K-1)+B*U(K)
        其中U为控制量,X(K-1|K-1)为K-1时刻的最优值。
第二步:
        更新X(K|K-1)的协方差:
P(K|K-1)=A*P(K|K-1)* +Q
        Q为系统过程中的协方差
        至此,已经有了现在状态的预测结果,接下来收集现在状态的测量值,结合预测值和测量值最后得出现在K时刻的最优估计值X(K|K)
第三步:
        得到最优估计值之前需要将卡尔曼增益求出来:

第四步:
        求出K时刻的最优估计值X(K|K):
X(K|K)= X(K|K-1)+*
第五步:
        计算最优估计值的协方差P(K|K):
P(K|K)=* P(K|K-1)

试着编了一下程序:其中输入参数为经过处理转化后的加速度的角度,陀螺仪的角速度
KalmanInit();/////参数初始化
float KalmanFileter(float angle_m,float gyro_m )
{
        //////第一步:计算预测的现在状态X_estimate//////////
        for(i=0;i<2;i++)
                for(j=0;j<2;j++)
                        {
                                temp1+=A*X_optimal;
}
        for(i=0;i<2;i++)        temp2=B*gyro_m;
        X_estimate=temp1+temp2;
        X_estimate=temp1+temp2;
        /////第二步:计算X_estimate的协方差//////
        for(i=0;i<2;i++)
                for(j=0;j<2;j++)
                        {
                                for(k=0;k<2;k++)
                                temp3+=A*P_optimal;
}
       
        for(i=0;i<2;i++)
                for(j=0;j<2;j++)
                        {
                                for(k=0;k<2;k++)
                                temp4+=temp3*A;
}
        for(i=0;i<2;i++)
                for(j=0;j<2;j++)
                        P_estimate=temp4+Q;
/////////////第三步:计算得出卡尔曼增益///////////////
        for(i=0;i<2;i++)
                for(j=0;j<2;j++)
                        temp5+=H*P_estimate;
        temp6=temp5*H +temp5*H+R;
        for(i=0;i<2;i++)
                for(j=0;j<2;j++)
                        temp7+= P_estimate *H;
Kg= temp7/temp6;
Kg= temp7/temp6;
/////////////第四步:计算最优状态值X_optimal/////////

        temp8=angle_m-(H*X_estimate+ H*X_estimate);
        temp9=temp8*Kg;
temp9=temp8*Kg;
X_optimal=X_estimate+temp9;
X_optimal=X_estimate+temp9;
//////////第五步:最优值的协方差////////////
        for(i=0;i<2;i++)
                for(j=0;j<2;j++)
                        temp10=Kg*H;
        for(i=0;i<2;i++)
                for(j=0;j<2;j++)
                        temp11=1- temp10;

        for(i=0;i<2;i++)
                for(j=0;j<2;j++)
                        {
                                for(k=0;k<2;k++)
                                P_optimal+=temp11*P_estimate;
}
////////////////完成///////////////////////////////
}
Void KalmanInit(void)
{
        Float T=0.02;
        Float A={ { 1, -0.02},
                         { 0,   1} };
        Float B={ 10.2,
0};
        Float Q={ { 0.01,    0 },
                         {   0, 0.005 } };
        Float R=0.056;
        Float X_optimal={ 0,
                        0 }
        Float P_optimal={ { 0.005, 0.005 },
                           { 0.005, 0.005 } }
}

第五章        姿态控制算法
四轴飞行器的结构图如上图所示,四个旋翼电机分别安装在十字架的四个端点上,并且将相对的旋翼分为前后组和左右组,两组旋翼旋转方向相反,以抵消反扭力矩。
        四轴飞行器的基本飞行姿态为:悬停、上升/下降、前进/后退、旋转(偏航),如下图所示:

图5.1 四轴飞行器基本姿态示意图

在进行姿态控制之前需要先通过加速度传感器和陀螺仪确定比较准确的三个轴的位置,而处理陀螺仪和加速度传感器传回来的数据,进行融合,最后得出比较准确的四轴的姿态
悬停、上升、下降:
        悬停和上升/下降比较的简单,四个螺旋桨提供的升力等于自重时,即实现悬停,升力大于或小于自重时,即实现上升或下降。
前进、后退:
        前进时,前后组旋翼前方旋翼降低一定的速度,后方旋翼增大一定的速度,让四轴平面倾斜一定的角度,使升力在水平方向有一定的分量,后退则相反。
旋转(偏航):
        旋转是飞行器在水平面上有动作,通过控制反扭力矩即可实现飞行器的旋转动作,具体的实现方法是:同时改变同一组的两个旋翼的旋转速度,上图中,同时增大左右组的旋翼旋转速度并同时减小前后组旋翼旋转速度,便可以实现向左旋转。
        由于没有经验,我准备从最基本的经典PID算法入手来控制飞行器的姿态,PID控制器的传递函数为:

下图是四旋翼无人机姿态控制的结构图:



图5.2 四旋翼无人机姿态控制的结构图

上图中,前向通道(F)、后向通道(B)、左向通道(L)、右向通道(R)分别对应于电机1、电机3、电机2和电机4; ‘+’表示电压增大, ‘—’表示电压减小。
以滚转通道为例,滚转控制通道M0的执行器件是左向和右向两个直流电机。当
M0为正时,左向电机电压减少,右向电机电压增大,并且增加量等于减少量,这样
便在滚转通道上产生扭矩。同时因为电机2减小的扭矩等于电机4增加的扭矩,这就
可以避免滚转控制对航向通道的干扰。






第六章        应用前景分析
思考了一下应用前景,觉得四轴旋翼飞行器较其余的飞行器如直升飞机、固定翼飞机相比而言,优势主要有:机动性较强,平台性强,机械结构简单,维护方便。暂时我设想四轴飞行器应用与一下几方面:

1.为科学实验提供实验平台。
2.灾害立体网络监控与救援。
还记得08年的汶川地震,地震后,灾区通讯网络完全中断,灾区成为孤岛。造成这种局面的原因就是地震将地面通讯设施损坏,如果在灾害发生之后,利用四旋翼搭载特制通讯设备,在GPS的引导下,飞往灾区的各个角落,在灾区快速搭建高效应急通讯网络,还可以在飞行器上搭建语音广播设备,引导灾民正确自救,这样,就能将灾害对灾民的伤害程度降到比较低的水平。在飞行器上搭载摄像头,将受灾画面传送回指挥中心,方便指挥救灾。
3.环境空气质量监测
        利用四旋翼飞行器,采集大气中空气样本,监测城市环境空气质量。
另外,我在网上还看到MIT做的关于四轴飞行器的实验,他们利用很多四轴飞行器组成编队,然后合理组合队形完成搬运大物体的任务。
       

wetnt 发表于 2012-7-20 13:26:56

字体太难看了,有原文链接么?

Randy 发表于 2012-7-20 15:24:57

建议楼主把字体修改一下,看起来确实有点别扭!

boygirls84 发表于 2012-7-20 16:28:27

为什么我看不到图片呢?我浏览器问题?

PureGold 发表于 2012-7-22 19:12:14

楼主标题是一语双关吗?
四周 飞行器 入门
让我想起了 7天精通java{:soso_e103:}

我心的诗意 发表于 2012-9-30 17:10:08

hao~~:loveliness:

yzh19930401 发表于 2012-10-17 11:38:02

虽然看不太懂,但还是要顶!

飞鹰377 发表于 2012-11-2 11:24:38

楼主,我现在是一名学生,很早就想做一个四轴,也有一些基础,但不是很多,你能给点建议吗?或者能给点具体的资料吗?真的非常感谢。如果你方便可以发我邮箱里[email protected]。加我QQ好友也行574101900.

飞鹰377 发表于 2012-11-2 11:25:09

楼主,我现在是一名学生,很早就想做一个四轴,也有一些基础,但不是很多,你能给点建议吗?或者能给点具体的资料吗?真的非常感谢。如果你方便可以发我邮箱里[email protected]。加我QQ好友也行574101900.

dunjian2000 发表于 2013-1-12 10:11:50

灰常感谢楼主分享~

dunjian2000 发表于 2013-1-12 11:13:35

努力也做一个!力争飞天!~

dunjian2000 发表于 2013-1-13 09:41:40

经典的算法,入门必须~

wqian 发表于 2013-1-23 08:15:57

建议来个模型。

florgx 发表于 2013-2-28 12:43:19

科普没有落实啊,图片看不到,楼主是不是转载的还是DOC里粘贴的,有完整版的么?

一元 发表于 2013-7-25 14:50:19

图片呢{:soso_e100:}
页: [1] 2
查看完整版本: 四轴飞行器入门