无人机飞控平台ArduPilot源码入门教程 — 简介
2016-05-24 16:50
423 查看
本文介绍ArduPilot的基本结构.在动手之前,先搞定用什么工具来看代码.你可以直接用浏览器在github上看,不过最好是能用个IDE工具,结构化地显示代码,方便你找函数,结构,类定义之类的东西.
推荐一些
Eclipse在Windows, Linux或者MacOS上都挺好
Emacs也一样可以用在三个系统上,用etags快速定位各种代码元素
Vim on emacs with ctags (
,上一句勉强翻出来了,这句不知道了,因为没用过,不过楼主会好好学习的以后可能就会翻译了,等好心人通过点评给我指点)
有很多其他的IDE(集成开发环境),大多数都是可以高度定制的,很适合ArduPilot.如果你有喜欢的IDE,并且在ArduPilot上用的很爽,记得在wiki上分享一下你的经验哦.
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看看有什么新东西吧
对于所有这些版本,都可以增加一些额外的编译参数,或者用并行编译来加快速度.比如你可以输入:
表示采用8线程并行编译一个APM2板子的版本. 你也可以试试使能ccache特性来加快编译
有些板子支持直接把编译得到的固件加载到板子.比如:
会编译和加载一个测试固件到Pixhawk
有些辅助指令可以用在特定的板子上,比如:
make clean -清空非px4版本的编译成果
make px4-clean - 完全清空PX4文件的编译成果
make px4-cleandep - 清空PX目标的依赖
推荐一些
Eclipse在Windows, Linux或者MacOS上都挺好
Emacs也一样可以用在三个系统上,用etags快速定位各种代码元素
Vim on emacs with ctags (
,上一句勉强翻出来了,这句不知道了,因为没用过,不过楼主会好好学习的以后可能就会翻译了,等好心人通过点评给我指点)
有很多其他的IDE(集成开发环境),大多数都是可以高度定制的,很适合ArduPilot.如果你有喜欢的IDE,并且在ArduPilot上用的很爽,记得在wiki上分享一下你的经验哦.
基本结构
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目标的依赖
相关文章推荐
- 数组下标访问
- FK JavaScript之:ArcGIS JavaScript添加Graphic,地图界面却不显示
- JSON详解
- 利用FFmpeg进行视频文件进行分割
- SVN的创建和使用的基本方法
- scala中的伴生对象实现原理
- MySQL中的视图及性能问题
- 为什么中国的程序员总被称为码农?
- poj1083Moveing tables(简单DP)
- 苹果键盘打出 顿号
- ios UITableview 刷新某一个cell 或 section
- strcat()与strcpy()用法
- Dave(正方形能围成的最大点数)
- Task三个列子的分享
- HTML 30分钟入门教程
- android之自定义View和ViewGroup(四)(代码篇,实现圆形进度条)
- Jenkins配置基于角色的项目权限管理
- 【BZOJ1243】[Seerc2007]Showstopper【二分】
- vehicle detection haarcascades
- Windows下wamp sever+sendmail使用mail()函数时的配置