最近参与一个项目,在项目中需要使用APM飞控,学深入理解APM飞控的特点,展开学习。项目平台为固定翼飞机。
ArduPilot/APM是一款开源自动导航系统,支持多旋翼飞行器,传统直升机,固定翼飞机与传统直升机。
用于ArduPilot/APM的主要飞行代码使用C++编写。目前,主要载具代码编写为“.pde”文件,由Arduino构建系统得来。

1、支持的硬件平台

目前ArduPilot/ APM支持以下硬件平台。
Pixhawk - 次世代PX4,与更多的内存,提高了传感器和更容易使用的设计。
PX4FMU - 基于一个32位的ARM自动驾驶仪与许多先进的功能,使用NuttX实时操作系统。
VRBrain。
FlyMaple。
BeagleBone黑色 - 在开发,测试平台在Linux上运行ArduPilot(仅开发版)。
APM2 - 一种流行的AVR2560 8位自动驾驶仪。
APM1(停产) - 一个基于AVR2560独立传感器板(又名“oilpan”)
所述ArduPilot/ APM源代码被写入该AP-HAL硬件抽象层的顶部上,使得端口代码能够广泛兼容不同的硬件平台。

2.软件工程目录

该ArduPilot系统是由在下面列出的几个不同的项目。
APM:Plane – 固定翼。
APM:Copter – 多旋翼和直升机。
APM:Rover – 地面车辆。
Mission Planner – 用C#编写的Windows最常用的地面站也通过mono运行在Linux和MacOS。
APM Planner 2.0 – 用C++使用Qt库专门为APM写的是一个地面站。
MAVProxy – 命令行导向和编写脚本的地面站(主要用于开发)。
MinimOSD – 在屏上显示飞行数据。
AndroPilot – android地面站。
DroneAPI – 用于无人机协处理器和Web应用程序开发人员API。
DroidPlanner2 – android地面站。
QGroundControl –用C ++编写使用Qt库做的一个替代地面站。
PX4 – PX4FMU板的支持代码。
MAVLink – 为地面站,飞行控制器和一些外设包括OSD之间的通信的协议。

本人主要学习内容包括
     APM:Plane – 固定翼;
     APM Planner 2.0
     PX4 – PX4FMU板的支持代码
     MAVLink – 为地面站,飞行控制器和一些外设包括OSD之间     的通信的协议。

ArduPilot 代码分为5个主要部分,基本结构分类如下:
· vehicle directories
· AP_HAL
· libraries
· tools directories
· external support code
(1)vehicle directories模型类型
当前共有4种模型:ArduPlane, ArduCopter, APMrover2 and AntennaTracker。都是.pde文件,就是为了兼容arduino平台,以后可能会放弃。
固定翼对应ArduPlane模型。
(2)AP_HAL硬件抽象层
硬件抽象层,使得在不同硬件平台上的移植变得简单。
其中AP_HAL目录定义了一个通用的接口。其他的目录AP_HAL_XXX针对不同硬件平台进行详细的定义。例如AP_HAL_AVR目录对于AVR平台,AP_HAL_PX4对应PX4平台,AP_HAL_Linux对应Linux平台。
(3)tools directories工具目录
主要提供支持。For examples, tools/autotest provides the autotest infrastructure behind the autotest.diydrones.com site and tools/Replay provides our log replay utility.
(4)external support code外部支持代码
对于其他平台,需要外部支持代码。例如Pixhawk、PX4的支持代码如下:
· PX4NuttX – 板载实时系统。the core NuttX RTOS used on PX4 boards
· PX4Firmware – PX4固件。the base PX4 middleware and drivers used on PX4 boards
· uavcan – 飞行器CAN通信协议。the uavcan CANBUS implementation used in ArduPilot
· mavlink – Mavlink通信协议。the mavlink protocol and code generator