APM飞控系统详细介绍
2013-04-05 12:28:24 来源: 评论:2 点击:10303APM飞控系统是国外的一个开源飞控系统,能够支持固定翼,直升机,3轴,4轴,6轴飞行器。在此我只介绍固定翼飞控系统。 APM飞控系统主要结先上一个购买链接,看了下,板子质量还不错,全原装进口元器件 紫色PCB 沉金工艺,商家也挺用心。
新品APM 2.5.2 多旋 固定翼 飞控 ARDUPILOT MEGA 2.5.2 最新版
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飞控系统进行阐述。
(1),使用空速计情况
在使用空速计的情况下,升降舵是由空速控制。update_current_flight_mode( )调用calc_nav_pitch( )调用nav_pitch = -g.pidNavPitchAirspeed.get_pid(airspeed_error, dTnav)。nav_pitch就是导航俯仰角,也就是说,使用空速计时,APM系统对利用空速偏差airspeed_error作为输入量进行导航级的俯仰角控制。
在使用空速计的情况下,油门是由飞机机械能偏差控制,也就是空速误差和高度误差共同决定。update_current_flight_mode( )调用calc_throttle( )调用g.channel_throttle.servo_out = g.throttle_cruise + g.pidTeThrottle.get_pid(energy_error, dTnav);
g.channel_throttle.servo_out += (g.channel_pitch.servo_out * g.kff_pitch_to_throttle);
式中energy_error = airspeed_energy_error + (float)altitude_error * 0.098f,是空速动能偏差,加上飞机重力势能偏差。可以看出,油门是由设定的巡航油门g.throttle_cruise、机械能偏差PID调节量和升降舵通道补偿共同决定,但是巡航油门是设定值,是固定的。g.kff_pitch_to_throttle默认是0,所以,实际上油门的增减是由机械能偏差控制的。
所以,使用空速计时,APM飞控系统的油门升降舵控制属于空速控制升降,机械能控制油门方案,类似于第一种控制方案,但是又有点区别。
(2),不使用空速计情况
不使用空速计时,升降舵是由高度偏差控制。update_current_flight_mode( )中调用calc_nav_pitch( )调用nav_pitch = g.pidNavPitchAltitude.get_pid(altitude_error, dTnav)。所以升降舵的控制,是由高度误差altitude_error作为PID调节的输入量。
不使用空速计时,油门是由导航俯仰角控制。update_current_flight_mode( )调用calc_throttle( )调用
if (nav_pitch >= 0)
{
g.channel_throttle.servo_out = throttle_target + (g.throttle_max - throttle_target) * nav_pitch / g.pitch_limit_max;
}
else
{
g.channel_throttle.servo_out = throttle_target - (throttle_target - g.throttle_min) * nav_pitch / g.pitch_limit_min;
}
可以看出此时的油门控制是利用的是比例调节,依据的比例关系是
新品APM 2.5.2 多旋 固定翼 飞控 ARDUPILOT MEGA 2.5.2 最新版
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飞控系统进行阐述。
(1),使用空速计情况
在使用空速计的情况下,升降舵是由空速控制。update_current_flight_mode( )调用calc_nav_pitch( )调用nav_pitch = -g.pidNavPitchAirspeed.get_pid(airspeed_error, dTnav)。nav_pitch就是导航俯仰角,也就是说,使用空速计时,APM系统对利用空速偏差airspeed_error作为输入量进行导航级的俯仰角控制。
在使用空速计的情况下,油门是由飞机机械能偏差控制,也就是空速误差和高度误差共同决定。update_current_flight_mode( )调用calc_throttle( )调用g.channel_throttle.servo_out = g.throttle_cruise + g.pidTeThrottle.get_pid(energy_error, dTnav);
g.channel_throttle.servo_out += (g.channel_pitch.servo_out * g.kff_pitch_to_throttle);
式中energy_error = airspeed_energy_error + (float)altitude_error * 0.098f,是空速动能偏差,加上飞机重力势能偏差。可以看出,油门是由设定的巡航油门g.throttle_cruise、机械能偏差PID调节量和升降舵通道补偿共同决定,但是巡航油门是设定值,是固定的。g.kff_pitch_to_throttle默认是0,所以,实际上油门的增减是由机械能偏差控制的。
所以,使用空速计时,APM飞控系统的油门升降舵控制属于空速控制升降,机械能控制油门方案,类似于第一种控制方案,但是又有点区别。
(2),不使用空速计情况
不使用空速计时,升降舵是由高度偏差控制。update_current_flight_mode( )中调用calc_nav_pitch( )调用nav_pitch = g.pidNavPitchAltitude.get_pid(altitude_error, dTnav)。所以升降舵的控制,是由高度误差altitude_error作为PID调节的输入量。
不使用空速计时,油门是由导航俯仰角控制。update_current_flight_mode( )调用calc_throttle( )调用
if (nav_pitch >= 0)
{
g.channel_throttle.servo_out = throttle_target + (g.throttle_max - throttle_target) * nav_pitch / g.pitch_limit_max;
}
else
{
g.channel_throttle.servo_out = throttle_target - (throttle_target - g.throttle_min) * nav_pitch / g.pitch_limit_min;
}
可以看出此时的油门控制是利用的是比例调节,依据的比例关系是