APM飞控介绍要点
apm飞控入门教程

Apm 飞控较为详细的入门教程最近发现很多模友在看了泡泡老师的视频有很多细节没有看懂在群上提问,为了能使刚用上apm的模友一步到位,再来一个文字教程帮助你们快速使用。
在此也感谢apm2.8交流群中的冷风群主提供的教程~废话不多说了硬件安装1、通过USB接口供电时,如果USB数据处于连接状态,APM会切断数传接口的通讯功能,所以请不要同时使用数传和USB线连接调试APM,USB接口的优先级高于数传接口,仅有供电功能的USB线不在此限;2、APM板载的加速度传感器受震动影响,会产生不必要的动差,直接影响飞控姿态的计算,条件允许请尽量使用一个减震平台来安装APM主板;3、APM板载的高精气压计对温度的变化非常敏感,所以请尽量在气压计上覆盖一块黑色海绵用来遮光,以避免阳光直射的室外飞行环境下,光照热辐射对气压计的影响。
另外覆盖海绵,也可以避免飞行器自身气流对气压计的干扰。
使用建议对于初次使用APM自驾仪的用户来说,建议你分步骤完成APM的入门使用:1、首先安装地面站控制软件及驱动,熟悉地面站界面的各个菜单功能;2、仅连接USB线学会固件的下载;3、连接接收机和USB线完成APM的遥控校准、加速度校准和罗盘校准;4、完成各类参数的设定;5、组装飞机,完成各类安全检查后试飞;6、PID参数调整;7、APM各类高阶应用地面站调试软件Mission Planner安装首先,MissionPlanner的安装运行需要微软的Net Framework 4.0组件,所以在安装Mission Planner之前请先下载Net Flamework 4.0并安装安装完NetFramework后开始下载Mission Planner安装程序包,最新版本的Mission Planner可以点击此处下载,下载页面中每个版本都提供了MSI版和ZIP版可供选择。
MSI 为应用程序安装包版,安装过程中会同时安装APM的USB驱动,安装后插上APM的USB 线即可使用。
APM飞控介绍

Ardupilot飞控示意图
地面站软件系统
Ardupilot系统的地面控制站是一个运行在地面上
电脑中的应用程序,通过无线通信模块与无人机通 信,显示无人机实时性能和位置,显示载机仪表面 盘,实时发送飞行过程控制指令,上传新的任务命 令和设定参数,显示航拍实时视频流。目前较成熟 的Ardupilot地面站软件包括:APM Mission Planner、HappyKillmore、QGroundControl。
机械部分(无人机/汽车/机械手臂) Microcontroller(Arduino)
Serial Port/有线/无线网络
Server
Database:Sqlserver/Oracle/DB2
1. Web services (c#/VB/java/python) 2. Form Application(c#/VB/java/python)
相关技术说明
Arduino:是一个开放源代码的单芯片微电脑,它
使用了Atmel AVR单片机,采用了基于开放源代码 的软硬件平台,构建于开放源代码 simple I/O 接 口板,并且具有使用类似Java、C 语言的 Processing/Wiring开发环境。 MAVLINK:Micro Air Vehicle Link是一个用于小 型无人机的通信协议. 它是一个只有头文件信息的 类型库列集,MAVlink最早以 LGPL协议在2009年发 布。MAVLINK主要被用于地面站和无人机间通信, 可以用来传递方向、GPS位置、速度等信息。
一种开源的航空电磁法运载工具: Ardupilot无人机系统
江苏大学 计算机科学与通信工程学院 通信工程系 朱轶
无人机简介
无人机(Unmanned Aerial Vehicle,UAV)指借助遥
详细的APM飞控调试资料

调整ArduCopter?参数如果你使用的机身不是官方 ArduCopter 套件,你可能需要改变一些 PID 设置(PID 是比例-积分- 微分的简称,是一个标准的控制方法。
更多的资料在这里)。
在此页底部的有一个PID的全面的指导。
你可以在任务规划器的配置选项卡中以交互方式调整 PID:基本性能故障排除我的多旋翼在稳定模式下缓慢震荡(大幅运动):?降低?STABILIZE_ROLL_P, STABILIZE_PITCH_P.?我的多旋翼在稳定模式下***震荡(小幅运动):?降低?RATE_ROLL_P, RATE_PITCH_P.?我的飞机过于迟钝:?降低?RATE_ROLL_P, RATE_PITCH_P,?和/或增加?STABILIZE_ROLL_P,? ???STABILIZE_PITCH_P.?我调整了?Rate_P,还是不行:?也许你的?STABILIZE_P gain?增益过高。
降低一点(见上文),并再次尝试调整?RATE_P.?我的飞机在起飞时向左或向右旋转15°:你的电机不直或着电调没有校准。
扭转电机,直到他们都直了。
运行ESC校准程序。
?激烈飞行后我的飞机偏向一方?10 - 30°:?如该文所述,焊接?IMU?的滤波器U。
你可以在?system.pde?里调整漂移校正。
如果需要,大概调高0.5。
此外,降落30秒,然后继续飞行。
?我的飞机无法在空中保持完全静止:?确保在飞机的重心在正中心。
然后在水平面上运行水平命令(保持关闭状态15秒,调用该功能)。
你也可以在无风的环境(重要)使用自动微调模式飞行。
任何风将导致四轴旋转180度后你的修改产生相反的作用。
你可以使用遥控俯仰和横滚微调,但记得在用配置工具设置遥控时,要把它们放回中心。
我不喜欢使用发射微调,但永远不要使用偏航微调。
(四轴也很容易受到紊流的影响。
他们将需要不断的修正,除非你安装一个光流传感器。
某天……)?我的飞机飞行很好,但后来在悬停时一条电机臂奇怪地下降了:?你的电机坏了。
APM飞控源码讲解

APM飞控系统介绍APM飞控系统是国外的一个开源飞控系统,能够支持固定翼,直升机,3轴,4轴,6轴飞行器。
在此我只介绍固定翼飞控系统。
飞控原理在APM飞控系统中,采用的是两级PID控制方式,第一级是导航级,第二级是控制级,导航级的计算集中在medium_loop( ) 和fastloop( )的update_current_flight_mode( )函数中,控制级集中在fastloop( )的stabilize( )函数中。
导航级PID控制就是要解决飞机如何以预定空速飞行在预定高度的问题,以及如何转弯飞往目标问题,通过算法给出飞机需要的俯仰角、油门和横滚角,然后交给控制级进行控制解算。
控制级的任务就是依据需要的俯仰角、油门、横滚角,结合飞机当前的姿态解算出合适的舵机控制量,使飞机保持预定的俯仰角,横滚角和方向角。
最后通过舵机控制级set_servos_4( )将控制量转换成具体的pwm信号量输出给舵机。
值得一提的是,油门的控制量是在导航级确定的。
控制级中不对油门控制量进行解算,而直接交给舵机控制级。
而对于方向舵的控制,导航级并不给出方向舵量的解算,而是由控制级直接解算方向舵控制量,然后再交给舵机控制级。
以下,我剔除了APM飞控系统的细枝末节,仅仅将飞控系统的重要语句展现,只浅显易懂地说明APM飞控系统的核心工作原理。
一,如何让飞机保持预定高度和空速飞行要想让飞机在预定高度飞行,飞控必须控制好飞机的升降舵和油门,因此,首先介绍固定翼升降舵和油门的控制,固定翼的升降舵和油门控制方式主要有两种:一种是高度控制油门,空速控制升降舵方式。
实际飞行存在四种情况,第一种情况是飞机飞行过程中,如果高度低于目标高度,飞控就会控制油门加大,从而导致空速加大,然后才导致拉升降舵,飞机爬升;第二种情况与第一种情况相反;第三种情况是飞机在目标高度,但是空速高于目标空速,这种情况飞控会直接拉升降舵,使飞机爬升,降低空速,但是,高度增加了,飞控又会减小油门,导致空速降低,空速低于目标空速后,飞控推升降舵,导致飞机降低高度。
详细的APM飞控调试资料

调整ArduCopter 参数如果你使用的机身不是官方ArduCopter 套件,你可能需要改变一些PID设置(PID 是比例-积分- 微分的简称,是一个标准的控制方法。
更多的资料在这里)。
在此页底部的有一个PID的全面的指导.你可以在任务规划器的配置选项卡中以交互方式调整PID:基本性能故障排除•我的多旋翼在稳定模式下缓慢震荡(大幅运动): 降低 STABILIZE_ROLL_P,STABILIZE_PITCH_P.•我的多旋翼在稳定模式下***震荡(小幅运动): 降低 RATE_ROLL_P, RATE_PITCH_P。
•我的飞机过于迟钝:降低 RATE_ROLL_P,RATE_PITCH_P,和/或增加 STABILIZE_ROLL_P, STABILIZE_PITCH_P.•我调整了 Rate_P,还是不行:也许你的 STABILIZE_P gain 增益过高。
降低一点(见上文),并再次尝试调整 RATE_P.•我的飞机在起飞时向左或向右旋转15°:你的电机不直或着电调没有校准。
扭转电机,直到他们都直了。
运行ESC校准程序。
•激烈飞行后我的飞机偏向一方 10 - 30°:如该文所述,焊接 IMU 的滤波器U。
你可以在 system.pde 里调整漂移校正。
如果需要,大概调高0。
5.此外,降落30秒,然后继续飞行。
•我的飞机无法在空中保持完全静止:确保在飞机的重心在正中心。
然后在水平面上运行水平命令(保持关闭状态15秒,调用该功能).你也可以在无风的环境(重要)使用自动微调模式飞行。
任何风将导致四轴旋转180度后你的修改产生相反的作用。
你可以使用遥控俯仰和横滚微调,但记得在用配置工具设置遥控时,要把它们放回中心.我不喜欢使用发射微调,但永远不要使用偏航微调.(四轴也很容易受到紊流的影响。
他们将需要不断的修正,除非你安装一个光流传感器。
某天……)•我的飞机飞行很好,但后来在悬停时一条电机臂奇怪地下降了:你的电机坏了。
APM Flight Modes 飞行模式介绍(超详细)

APM Flight Modes 飞行模式介绍概述多旋翼(直升机)一共有14 个内置的飞行模式,10个的常用的。
飞行模式可以通过遥控器控制,也可以通过GCS地面站进行发送命令更改遥控器和地面站都可以同时控制飞行模式,通常以最后一个命令为准推荐使用的飞行模式一般来讲,当第一次使用APM:Copter的时候,你应该依次使用下列飞行模式获得提高,要保证熟练了再进行下一个。
点击下方任意飞行模式可获得更多信息。
•Stabilize (增稳模式)•Alt Hold (定高模式、高度保持模式)•Loiter (悬停模式)•RTL (Return-to-Launch) (回家模式:返回起飞点)•Auto (自动模式:自动航点飞行,需要依靠GPS)其他飞行模式:•Acro 特技模式(没有飞控辅助增稳的模式)•AutoTune 自动微调(当飞机往一个严重偏的时候,可以执行自动微调)•Brake 刹车锁定模式(将飞机锁定在一个位置,而不受遥控器摇杆影响)•Circle 绕圈模式(绕着兴趣点画圈)•Drift 漂移模式•Guided 引导模式Guided_NoGPS 引导模式-不需要GPS•Land 降落模式•PosHold 定点模式•Sport 运动模块•Throw 抛飞模式(把无人机抛在空中,自动起飞稳定)•Follow Me 跟随模式(无人机跟着你飞行,但是需要GPS和手机地面站配合)•Simple and Super Simple (简单和超级简单模式)•Avoid_ADSB (基于ADSB的避让载人飞机模式。
需要外界ADSB模块)•大多数遥控器只有一个三段开关,所以只能设置三种模式。
如果需要设置6种模式,可以进行开关混控需要依赖GPS的飞行模式:有些飞行模式需要依赖GPS才能飞行,你可以通过状态灯或者地面站获知GPS 是否已经锁定。
以下飞行模式需要GPS锁定才能解锁飞行:•Loiter 悬停模式•RTL (Return-to-Launch) 回家模式•Auto 自动模式•Guided 引导模式•Drift 漂移模式•PosHold 定点模式•Follow Me 跟随模式•Circle 绕圈模式•Throw 抛飞模式不需要依赖GPS锁定的飞行模式:•Stabilize 自稳模式•Alt Hold 定高模式•Acro 特技模式•Sport 运动模式•Land 降落模式全部模式列表:(点击对应的模式查看详解)•Acro Mode•Altitude Hold Mode•Auto Mode•Brake Mode•Circle Mode•Drift Mode•Follow Me Mode (GSC Enabled)•Guided Mode•Land Mode•Loiter Mode•PosHold Mode•Position Mode•RTL Mode•Simple and Super Simple Modes•Sport Mode•Stabilize Mode•Throw ModeStabilize增稳模式概述:•飞手用roll与pitch操作控制飞行器的倾斜角度。
APM飞控介绍范文

APM飞控介绍范文APM(ArduPilot Mega)飞控是一款开源的无人机飞行控制器,使用Arduino Mega 2560开发板和ATmega2560微控制器进行控制。
它可以支持多种飞行器类型,包括多旋翼、固定翼、直升机、车辆和船只等,且适用于初学者和专业人士。
APM飞控的功能非常强大,具备多种传感器与功能模块的接口,包括陀螺仪、加速度计、罗盘、GPS、气压计、导航模块、通信模块等。
这些传感器和模块提供了飞行姿态稳定性、位置定位、导航、高度控制、避障等功能。
APM飞控使用可视化的图形用户界面(Ground Control Station,简称GCS)来进行配置和控制。
用户可以通过电脑、手机或平板等设备与APM飞控进行通信,实时获取飞行数据,在线调整参数和模式,进行飞行计划等。
1.多种飞行器类型支持:APM飞控可以支持各种飞行器类型的控制,包括四旋翼、六旋翼、八旋翼、固定翼、直升机等。
通过选择不同的飞行器类型,用户可以针对不同的应用场景进行配置和飞行。
2.多种飞行模式:APM飞控支持多种飞行模式,包括手动模式、稳定模式、姿态模式、定高模式、定点模式、跟随模式、航点模式等。
用户可以根据需求选择不同的飞行模式,以实现自由飞行、稳定飞行、自动飞行等功能。
3.导航和定位功能:APM飞控可以通过GPS进行导航和定位,实现自动驾驶功能。
用户可以设置航点和航线,飞行器能够自动按照设定的航线进行飞行,同时实时在GCS上显示当前位置和飞行状态。
4.传感器和稳定性:APM飞控配备了陀螺仪、加速度计和罗盘等传感器,能够实时获取飞行器的姿态信息。
通过PID控制算法和传感器反馈,可以实现飞行器的姿态稳定和控制。
5.遥控器和数据链路:APM飞控支持与遥控器和数据链路进行通信和控制。
用户可以通过遥控器操控飞行器的飞行,实现手动控制、姿态控制等功能。
同时,用户还可以通过数据链路将APM飞控与地面站进行通信,实时获取飞行数据和调整参数。
APM飞行模式解说

APM飞行模式注解ELEV是俯仰或升降 1通道对 PitchAILE是横滚或副翼 2通道对 RollTHRO是油门 3通道对 ThrottlRUDD是方向 4通道对 Yaw红正黑负白信号,红正棕负橙信号Pitch 俯仰 Roll 横滚 Throttl 油门 Yaw 方向1、稳定模式Stabilize稳定模式是使用得最多的飞行模式,也是最基本的飞行模式,起飞和降落都应该使用此模式。
此模式下,飞控会让飞行器保持稳定,是初学者进行一般飞行的首选,也是FPV第一视角飞行的最佳模式。
一定要确保遥控器上的开关能很方便无误地拨到该模式,应急时会非常重要。
2、比率控制模式Acro这个是非稳定模式,这时apm将完全依托遥控器遥控的控制,新手慎用。
3、定高模式ALT_HOLD定高模式(Alt Hold)是使用自动油门,试图保持目前的高度的稳定模式。
定高模式时高度仍然可以通过提高或降低油门控制,但中间会有一个油门死区,油门动作幅度超过这个死区时,飞行器才会响应你的升降动作当进入任何带有自动高度控制的模式,你目前的油门将被用来作为调整油门保持高度的基准。
在进入高度保持前确保你在悬停在一个稳定的高度。
飞行器将随着时间补偿不良的数值。
只要它不会下跌过快,就不会有什么问题。
离开高度保持模式时请务必小心,油门位置将成为新的油门,如果不是在飞行器的中性悬停位置,将会导致飞行器迅速下降或上升。
在这种模式下你不能降落及关闭马达,因为现在是油门摇杆控制高度,而非马达。
请切换到稳定模式,才可以降落和关闭马达。
4、自动模式 AUTO自动模式下,飞行器将按照预先设置的任务规划控制它的飞行由于任务规划依赖GPS的定位信息,所以在解锁起飞前,必须确保GPS已经完成定位(APM 板上蓝色LED常亮)切换到自动模式有两种情况:如果使用自动模式从地面起飞,飞行器有一个安全机制防止你误拨到自动模式时误启动发生危险,所以需要先手动解锁并手动推油门起飞。
起飞后飞行器会参考你最近一次ALT Hold 定高的油门值作为油门基准,当爬升到任务规划的第一个目标高度后,开始执行任务规划飞向目标;如果是空中切换到自动模式,飞行器首先会爬升到第一目标的高度然后开始执行任务6、悬停模式Loiter悬停模式是GPS定点+气压定高模式。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
APM飞控介绍要点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飞控系统进行阐述。
(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飞控系统中,GPS模块能够提供飞机当前经纬度信息,航迹方向和地速信息。
根据这些信息,再用程序解算飞机当前位置和目标位置的关系,就能知道目标航向角target_bearing,知道了目标航向角target_bearing后就可以用于引导飞机飞向目标。
但是仅用目标航向角进行导航,不能压航线飞行,为了解决这个问题,APM飞控系统中又增加了偏航距crosstrack_error的计算,并且根据偏航距,计算出需要的偏航修正量crosstrack_error * g.crosstrack_gain。
使飞机能尽快飞到航线上。
最后把目标航向角和偏航修正量组成导航航向角nav_bearing,提供给控制级PID。
所以目标航向角的计算和偏航修正量的计算是构成如何让飞机飞往目标的核心。
下面具体介绍APM中关于这部分的程序。
APM飞控系统中的GPS信息只能每秒更新4-10次。
所以,计算目标航向角和偏航修正量的程序都在每秒大约执行10次的medium_loop( )中。
在medium_loop( ) 的case 1中会执行navigate( ),正是在这个函数中,执行了导航航向角nav_bearing的计算。
首先计算的是目标航向角。
在navigate( )中有:target_bearing = get_bearing(¤t_loc, &next_WP);nav_bearing = target_bearing;第一个语句中current_loc和next_WP是结构体,里面存储这一个位置点的经度、纬度、高度信息,current_lot中存储的是当前点,next_WP中存储的是目标点。
根据这个进行在球体表面的三角函数计算(此文中,由于篇幅所限,很多东西不进行详细讲解),就可以得出目标航向target_bearing。
接下来,要计算偏航修正量。
navigate( )调用update_navigation( )调用verify_commands( )调用verify_nav_wp( )调用update_crosstrack( ),这个函数中有: crosstrack_error = sin(radians((target_bearing -crosstrack_bearing) / 100)) * wp_distance;nav_bearing += constrain(crosstrack_error * g.crosstrack_gain,-g.crosstrack_entry_angle.get(), g.crosstrack_entry_angle.get());第一句是计算偏航距的,偏航距是飞机当前位置点到航线的距离,事实上就是求一个点到一条线之间的距离。