ArduPilot代码库学习

介绍

Ardupilot项目的代码库是相当大的(在ardupilotgit tree大约有70万行),对于初学者来说是很吓人的。这里打算给一些建议,加快理解代码的速度。这里假设你对c++的关键概念熟悉,很多例子都假设你可以使用linux系统研究代码。

内容

l  引言和基本架构

l  范例

l  Ardupilot进程

l  UARTs和控制台

l  RC输入和RC输出

l  存储和EEPROM管理

l  飞行器代码

引言

本节介绍Ardupilot的基本架构。在开始之前你需要确定你使用的系统。你可以使用浏览器看代码或者查看https://github.com/ArduPilot/ardupilot/,但是如果使用一个好的编程IDE你很可能会得到更多信息,可以让你找到函数、结构和类的定义,通过结构的方法展示代码。

一些建议如下:

·                    Eclipse on Windows, Linux or MacOS

·                    Emacs on Linux, Windows or MacOS, with etags for findingcode elements

·                    Vim on emacs with ctags

基本架构

 ../_images/ArduPilot_HighLevelArchecture.png

Ardupilot的基本架构可以分为5个主要部分:

l  飞行器目录 vehicle directories

l  飞控硬件抽象层 AP_HAL

l  运行库 libraries

l  工具目录 tool directories

l  外部支持代码 external support code

下面详细会介绍,但是在移动前要确认你克隆了你所需的所有的git库

飞行器目录 vehicle directories

 

飞行器目录是在上层水平定义了固件对应的飞行器类型,目前有四种——飞机、直升机、APM车和天线跟踪器。

和*.cpp文件一起,每个飞行器目录包含一个make.inc 文件,列出了依赖库。Makefiles读取这个文件为生成程序来创建-l和-L标志。

AP_HAL

AP_HAL(Hardware Abstraction Layer)使得Ardupilot可以移植到大量不同的平台。运行库的顶层AP_HAL定义了接口,代码需要指定板载的特征,然后是一个关于每种板载的AP_HAL_XXX 子目录,比如AP_HAL_AVR用于基于AVR的控制板,AP_HAL_PX4用于PX4控制板, AP_HAL_Linux用于基于linux的控制板。

工具目录Tools directories

工具目录是杂项支持目录。比如tools/autotest指 autotest.ardupilot.org网站提供autotest基础设施,tools/Replay提供我们日志重放实用程序。

外部支持代码external support code

在一些平台我们需要外部代码提供附加的特征或者控制板支持,目前外部代码有:

·        PX4NuttX -the core NuttX RTOS used on PX4 boards

·        PX4Firmware -the base PX4 middleware and drivers used on PX4 boards

·        uavcan -the uavcan CANBUS implementation used in ArduPilot

·        mavlink -the mavlink protocol and code generator

注意:当你为PX4/Pixhawk创建ArduPilot时,这些外部代码大多数可以导入为 GitSubmodules

编译系统

编译系统是基于linux的make编译工具,但是也支持旧的arduino IDE 对AVR编译。makefiles文件在 mk/directory(mk目录下),定义了支持的每一种类型控制板的编译规则。

为了特定的控制板目标编译一个飞行器系统或“sketch”,需要输入“make TARGET”,TARGET就是控制板的类型,目前可以使用的控制板类型如下:

·        make apm1 - the APM1 board

·        make apm2 - the APM2 board

·        make px4-v1 - the PX4v1

·        make px4-v2 - the Pixhawk (and Arsov AUAV-X2)

·        make pxf - the BBB+PXF cape combination

·        make navio - the RaspberryPi+NavIO cape combination

·        make linux - a generic Linux build

·        make flymaple - the FlyMaple board

·        make vrbain - the VRBrain boards

·        make sitl - the SITL software in the loop simulation

更多的接口在不断被添加,因此查看“make help”文件了解新的目标板。

对于这些编译,你可以添加额外的选项,你可以做并行编译提高速度。比如在copter目录下你可以执行:

makeapm2-octa -j8

意思是使用8通道并行编译 APM2硬件板上的OctaCopter程序,你也可以研究可供使用ccache进行快速编译。

一些硬件板也支持从固件目录上传,比如:

makepx4-v2-upload

可以编译并上传一个sketch到pixhawk硬件板上。

特定的硬件板会有辅助编译,比如:

·        make clean - clean the build for non-px4 targets

·        make px4-clean - completely clean the build for PX4targets

·        make px4-cleandep - cleanup just dependencies for PX4targets

我的tip:对于上述的命令我也不了解,官网There arealso helper make targets for specific boards的说法还没搞清楚是什么意思,我运行命令的时候通常会有下面的提示

 

猜你喜欢

转载自blog.csdn.net/zhouxinlin2009/article/details/81116403