APM飞控系统介绍
APM飞控系统是国外的一个开源飞控系统,能够支持固定翼,直升机,3轴,4轴,6轴飞行器。在此我只介绍固定翼飞控系统。
APM飞控系统主要结构和功能
|
组成
|
功能
|
飞控主芯片 |
Atmega1280/2560
|
主控芯片
|
PPM解码芯片 |
Atmega168/328
|
负责监视模式通道的pwm信号监测,以便在手动模式和其他模式之间进行切换。提高系统安全
|
惯性测量单元 |
双轴陀螺,单轴陀螺,三轴加速度计
|
测量三轴角速度,三轴加速度,配合三轴磁力计或gps测得方向数据进行校正,实现方向余弦算法,计算出飞机姿态。
|
GPS导航模块 |
Lea-5h或其他信号gps模块
|
测量飞机当前的经纬度,高度,航迹方向(track),地速等信息。
|
三轴磁力计模块 |
HMC5843/5883模块
|
测量飞机当前的航向(heading)
|
空速计 |
MPXV7002模块
|
测量飞机空速(误差较大,而且测得数据不稳定,会导致油门一阵一阵变化)
|
空压计 |
BMP085芯片
|
测量
空气压力,用以换算成高度
|
AD芯片 |
ADS7844芯片
|
将三轴陀螺仪、三轴加速度计、双轴陀螺仪输出温度、空速计输出的模拟电压转换成数字量,以供后续计算
|
其他模块 |
电源芯片,usb电平转换芯片等
|
|
飞控原理
在APM飞控系统中,采用的是两级PID控制方式,第一级是导航级,第二级是控制级,导航级的计算集中在medium_loop( ) 和fastloop( )的update_current_flight_mode()函数中,控制级集中在fastloop( )的stabilize( )函数中。导航级PID控制就是要解决飞机如何以预定空速飞行在预定高度的问题,以及如何转弯飞往目标问题,通过算法给出飞机需要的俯仰角、油门和横滚角,然后交给控制级进行控制解算。控制级的任务就是依据需要的俯仰角、油门、横滚角,结合飞机当前的姿态解算出合适的舵机控制量,使飞机保持预定的俯仰角,横滚角和方向角。最后通过舵机控制级set_servos_4( )将控制量转换成具体的pwm信号量输出给舵机。值得一提的是,油门的控制量是在导航级确定的。控制级中不对油门控制量进行解算,而直接交给舵机控制级。而对于方向舵的控制,导航级并不给出方向舵量的解算,而是由控制级直接解算方向舵控制量,然后再交给舵机控制级。
以下,我剔除了APM飞控系统的细枝末节,仅仅将飞控系统的重要语句展现,只浅显易懂地说明APM飞控系统的核心工作原理。
一,如何让飞机保持预定高度和空速飞行
要想让飞机在预定高度飞行,飞控必须控制好飞机的升降舵和油门,因此,首先介绍固定翼升降舵和油门的控制,固定翼的升降舵和油门控制方式主要有两种:
一种是高度控制油门,空速控制升降舵方式。实际飞行存在四种情况,第一种情况是飞机飞行过程中,如果高度低于目标高度,飞控就会控制油门加大,从而导致空速加大,然后才导致拉升降舵,飞机爬升;第二种情况与第一种情况相反;第三种情况是飞机在目标高度,但是空速高于目标空速,这种情况飞控会直接拉升降舵,使飞机爬升,降低空速,但是,高度增加了,飞控又会减小油门,导致空速降低,空速低于目标空速后,飞控推升降舵,导致飞机降低高度。这种控制方式的好处是,飞机始终以空速为第一因素来进行控制,因此保证了飞行的安全,特别是当发动机熄火等异常情况发生时,使飞机能继续保持安全,直到高度降低到地面。这种方式的缺点在于对高度的控制是间接控制,因此高度控制可能会有一定的滞后或者波动。
另一种是高度控制升降舵,空速控制油门的方式。这种控制方式的原理是设定好飞机平飞时的迎角,当飞行高度高于或低于目标高度时,在平飞迎角的基础上根据高度与目标高度的差设定一个经过PID控制器输出的限制幅度的爬升角,由飞机当前的俯仰角和爬升角的偏差来控制升降舵面,使飞机迅速达到这个爬升角,而尽快完成高度偏差的消除。但飞机的高度升高或降低后,必然造成空速的变化,因此采用油门来控制飞机的空速,即当空速低于目标空速后,在当前油门的基础上增加油门,当前空速高于目标空速后,在当前油门的基础上减小油门。这种控制方式的好处是能对高度的变化进行第一时间的反应,因此高度控制较好,缺点是当油门失效时,比如发动机熄火发生时,由于高度降低飞控将使飞机保持经过限幅的最大仰角,最终由于动力的缺乏导致失速。
但是以上仅仅是控制理论。在实际控制系统中,由于有些参量并不能较准确地测得,或者测量时数据不稳定,所以并不能完全按照上述的控制理论控制。例如空速的测量时相当不准确的,而且数据波动较严重,这样,就无法完全按照上述理论进行控制,必须在其基础上进行适当修改。以下以使用空速计情况和不使用空速计情况对APM飞控系统进行阐述。
二,如何让飞机飞往目标
要使飞机飞往目标,那就必须知道飞机当前位置、目标位置和当前航向等问题。在APM飞控系统中,GPS模块能够提供飞机当前经纬度信息,航迹方向和地速信息。根据这些信息,再用程序解算飞机当前位置和目标位置的关系,就能知道目标航向角target_bearing,知道了目标航向角target_bearing后就可以用于引导飞机飞向目标。但是仅用目标航向角进行导航,不能压航线飞行,为了解决这个问题,APM飞控系统中又增加了偏航距crosstrack_error的计算,并且根据偏航距,计算出需要的偏航修正量crosstrack_error *g.crosstrack_gain。使飞机能尽快飞到航线上。最后把目标航向角和偏航修正量组成导航航向角nav_bearing,提供给控制级PID。所以目标航向角的计算和偏航修正量的计算是构成如何让飞机飞往目标的核心。下面具体介绍APM中关于这部分的程序。
APM飞控系统中的GPS信息只能每秒更新4-10次。所以,计算目标航向角和偏航修正量的程序都在每秒大约执行10次的medium_loop( )中。
三、如何让飞机按照导航级控制信息飞行
在导航级,我们已经解算出了让飞机保持高度和空速飞行所需要的俯仰角和油门,以及按航线飞向目标所需要的导航航向。这就解决了如何引导飞机进行飞行的问题。也就是说,飞控已经知道该怎么让飞机飞行了,现在就要解决飞控如何具体控制飞机的问题,也就是说如何控制各个舵机或者油门。
(1)油门的控制
油门的控制,前面已经提到,其实油门的控制量是在导航级完成的。并不传给控制级程序解算,直接就交给舵机控制级去控制舵机。
(2)升降舵的控制
对于升降舵的控制,在导航级已经给出了需要的俯仰角nav_pitch,此时,控制级的任务就是通过控制舵机让飞机保持规定的俯仰角nav_pitch。飞控通过惯性测量单元的DCM 算法能测量出飞机当前的俯仰角dcm.pitch_sensor,然后利用目标俯仰角与当前俯仰角的差值作为控制级升降PID调节的输入,进行PID控制运算
关于x-plane模拟
关于APM飞控使用x-plane进行模拟飞行的原理,其实是利用x-plane的网络对战功能。因为只有网络对战的时候,x-plane才会向外界输出飞机当前经纬度、飞机姿态、空速等数据信息。APM飞控进行x-plane模拟时需要设置网络端口和进行输出数据设定也证实了这点。X-plane可以模拟飞机型号、飞机参数,飞行环境等对飞机飞行的影响。从飞机型号就可以选择从战斗机、民航机到航模等各种不同飞机的选择。可以模拟飞机燃油、重心、重量的变化。最重要的,它可以模拟外界环境施对飞行的影响。可以设定高空、中空、低空的风速和风向。可以设定海平面气压和温度。此外x-plane还可录下飞行时的数据,可以供以后从各个角度观察飞行情况,察看飞行数据。
在x-plane上模拟其实就是让APM系统通过网络端口接收飞行数据,飞控根据飞行数据解算出需要的控制操作,再输入x-plane控制飞机。由于x-plane提供了非常接近真实飞机的模拟,所以x-plane模拟飞行用于飞控系统的调试时非常省时省力。