概述
介绍
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
基本架构
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的说法还没搞清楚是什么意思,我运行命令的时候通常会有下面的提示
最后
以上就是自觉蓝天为你收集整理的ArduPilot代码库学习的全部内容,希望文章能够帮你解决ArduPilot代码库学习所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复