前言
本页介绍了 ArduPilot 的基本结构。在你开始之前,你应该弄清楚你将使用什么代码探索系统。你可以只使用 web 浏览器查看 https://github.com/ArduPilot/ardupilot/,但是如果你已经克隆了所有的 git 仓库(cloned all of the git repositories),并且使用了一个优秀程序员的 IDE,如这里(here)推荐的那些,你可能会得到更多的收获。
1 基本结构
ArduPilot 的基本结构被分成 5 个主要部分:
- 飞行器代码;
- 共享库;
- 硬件抽象层(AP_HAL);
- 工具目录;
- 外部支持代码(即 mavlink,dronekit)。
2 飞行器代码
飞行器目录是定义每种类型飞行器固件的顶级目录。目前有 6 种飞行器类型:Plane,Copter,Rover,Sub,Blimp 和 AntennaTracker(固定翼、旋翼、无人车、潜艇、飞艇和天线追踪器)。尽管不同类型的飞行器之间有很多共同的元素,但它们各自都是不同的。目前我们只对 Copter 的代码结构进行了详细描述(detailed description of the code structure for the Copter code)。
与 * .cpp 文件一起,每个飞行器目录都包含一个 wscript 文件,其中列出了库的依赖性。
3 共享库
这些库(libraries)在所有飞行器类型中都是共享的。这些库包括传感器驱动程序,姿态和位置估计(aka EKF)和控制代码(即 PID 控制器)。有关更多详细信息,请参见库说明(Library Description),库示例概述(Library Example Sketches)和传感器驱动程序(Sensor Drivers)页面。
4 AP_HAL
AP_HAL 层(硬件抽象层)是我们如何使 ArduPilot 可移植到许多不同的平台的方法。在 libraries/AP_HAL 中有一个顶层的 AP_HAL,用于定义其余代码与具体板子功能的接口,然后每个板类型都有一个 AP_HAL_XXX 子目录,例如用于 AVR 基础主板的 AP_HAL_AVR,用于 Pixhawk 板子的 AP_HAL_PX4 和用于 Linux 基础主板的 AP_HAL_Linux。
5 工具目录
工具目录是各种支持目录。例如,tools/autotest 提供 autotest.ardupilot.org 网站后面的自动测试基础设施,tools/Replay 提供我们的日志回放工具。
6 外部支持代码
在一些平台上,我们需要外部支持代码来提供额外的功能或主板支持。目前外部树是:
- PX4NuttX - Pixhawk 主板上使用的核心 NuttX RTOS;
- PX4Firmware - Pixhawk 主板上使用的基础 PX4 中间件和驱动程序;
- uavcan - ArduPilot 中使用的 uavcan CANBUS 实现;
- mavlink - mavlink 协议和代码生成器。
!Note
当你构建 ArduPilot 时(build ArduPilot),大多数都是作为 Git 子模块(Git Submodules)导入的。