无人机飞控平台ArduPilot源码入门教程 — 简介

本文介绍ArduPilot的基本结构.在动手之前,先搞定用什么工具来看代码.你可以直接用浏览器在github上看,不过最好是能用个IDE工具,结构化地显示代码,方便你找函数,结构,类定义之类的东西.

推荐一些

  • Eclipse在Windows, Linux或者MacOS上都挺好
  • Emacs也一样可以用在三个系统上,用etags快速定位各种代码元素
  • Vim on emacs with ctags (,上一句勉强翻出来了,这句不知道了,因为没用过,不过楼主会好好学习的以后可能就会翻译了,等好心人通过点评给我指点)

  • 有很多其他的IDE(集成开发环境),大多数都是可以高度定制的,很适合ArduPilot.如果你有喜欢的IDE,并且在ArduPilot上用的很爽,记得在wiki上分享一下你的经验哦.

基本结构


无人机飞控平台ArduPilot源码入门教程 — 简介_第1张图片

ArduPilot的基本结构分为5个部分:

  • 各模型目录
  • 硬件抽象层
  • 共享库
  • 工具目录
  • 外部支持代码

你需要先去github上下载代码, 下面我们就逐步介绍细节.

各模型目录

各模型目录是最高级别的目录,用于定义每一种模型的固件.当前支持四种模型:固定翼飞机(Plane),旋翼飞机(Copter),车辆(Rover), 追踪雷达( AntennaTracker).

除了.cpp源代码文件之外,各模型目录还包含了一个.inc文件,用来列出引用到的库. 编译脚本读取这个文件来配置编译时的头文件包含和库链接信息.

硬件抽象层

硬件抽象层,是ArduPilot能移植到各种不同平台的关键.其顶层抽象在libraries/AP_HAL目录下,定义了个其他代码所需要遵循的接口,每个板子则各自有一个AP_HAL_XXX这样的子目录, 比如AP_HAL_AVR是给AVR板子的,AP_HAL_PX4是给PX4的,AP_HAL_Linux是给Linux相关板子的(楼主对这里还有点不确定linux相关的板子是什么)

工具目录

工具目录下是各种杂七杂八的支持目录. 比如tools/autotest实际上是autotest.ardupilot.org 的后台基础, tools/Replay则提供log回放功能.

外部支持代码

在有的平台上,我们需要外部支持代码来提供额外特性或者板子支持.当前用到的外部支持包有:

  • PX4NuttX -用在PX4板子上的NuttX RTOS的内核
  • PX4Firmware - 用在PX4板子上的基本PX4中间件和驱动
  • uavcan -用在ArduPilot上的uavcan CANBUS实现
  • mavlink -mavlink 协议和代码生成器

注意:这些大多是在编译用于PX4/Pixhawk的ArduPilot时以Git子模块的方式引入的.


编译系统

当前编译可以通过make指令完成, 也可用arduino IDE来编译AVR芯片相关内容. mk/目录下的makefile文件, 为每种支持的板子定义了编译规则.

为特定的板子编译一种模型固件或者测试固件(sketch我也不会翻)时,用指令 "make TARGET", 这里的TARGET就是板子的类型.下面是一些可用板子类型

  • make apm1 - APM1板子
  • make apm2 - APM2板子
  • make px4-v1 - PX4v1
  • make px4-v2 - Pixhawk (以及 Arsov AUAV-X2)
  • make pxf - Erle brain(BBB(BeagleBoneBack)+PXF(PixHawk Fire Cape))组合
  • make navio - 树莓派+NavIO组合
  • make linux - 通用的linux版本
  • make flymaple - FlyMaple板子
  • make vrbain - VRBrain板子
  • make sitl - 闭环仿真过程中用到的半实物仿真(SITL)软件

更多的接口正在加进来,所以经常用make help看看有什么新东西吧

对于所有这些版本,都可以增加一些额外的编译参数,或者用并行编译来加快速度.比如你可以输入:

make apm2-octa -j8

表示采用8线程并行编译一个APM2板子的版本. 你也可以试试使能ccache特性来加快编译

有些板子支持直接把编译得到的固件加载到板子.比如:

make px4-v2-upload

会编译和加载一个测试固件到Pixhawk

有些辅助指令可以用在特定的板子上,比如:

  • make clean -清空非px4版本的编译成果
  • make px4-clean - 完全清空PX4文件的编译成果
  • make px4-cleandep - 清空PX目标的依赖

你可能感兴趣的:(ardupilot,入门,无人机,飞控,源码,无人机)