找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 5950|回复: 85

APM源码学习笔记(1):代码的获取以及代码框架

  [复制链接]
发表于 2016-4-15 17:25:56 | 显示全部楼层 |阅读模式

加入社区,轻松玩转无人机!

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
本帖最后由 zoujiachi 于 2016-4-18 08:40 编辑

       最近在开发自己的飞控的过程中,偶然接触到APM,被它强大的功能所吸引,所以打算利用这段时间好好研习它的源代码。由于之前在开发飞控的时候,在论坛中获得许多帮助,所以想把自己的所学所得分享出来,和大家一起学习,交流,传承开源的精神!


一、获取源代码
源代码的获取比较简单,在如下网址中下载到本地即可,也可直接在网页上浏览:
https://github.com/ArduPilot/ardupilot

如果你是还想作为一个APM开源社区的开发者,那么可以下载GitHub,以后可以提交自己的代码到APM的基线上,并且可以加入APM大牛的开发者讨论,是不是想想就很激动呢^_^(当然,要加入的前提是你要完成一个Bug的修改或者开发一个新的Feature)
http://ardupilot.org/dev/docs/where-to-get-the-code.html

当源代码获取到本地后,可以使用你喜欢的代码查看工具查看,我个人是比较推荐Source Insight

二、代码框架
APM的代码支持多种飞控板,如APM,Pixhawk,PX4等,我目前打算入手一个Pixhawk的飞控,所以就只针对Pixhawk的部分进行学习
APM代码框架:


                               
登录/注册后可看大图


       我们看Pixhawk那一路,最下面的Pixhawk是指的飞控的硬件电路,其上面一层NuttX是一个开源的实时操作系统,它的功能十分强大,除了提供RTOS基本的功能外,还提供fs(file system),芯片级驱动支持(如Pixhawk使用的stm32的芯片,里面就集成了各个外设的驱动)以及UI的一些功能。后面在看代码的时候,会发现经常会有一些open,ioctrl等的操作,这里就是利用的NuttX的文件系统,熟悉Linux的驱动的人应该都知道,通过open去打开指令的设备(dev),然后可以通过write,read,ioctrl去操作它,这样对于上层来说,就具有统一的接口。这样可以屏蔽掉底层因为硬件不同而导致的差异,方便今后的移植和扩展。
     再往上一层,是PX4Firmware,顾名思义,即Pixhawk飞控板的一些板级资源的固件,比如LED,陀螺仪,加速度计等等这些设备的驱动支持。
       往上,就是HAL(硬件抽象层),官网上的解释如下:
The AP_HAL layer (Hardware Abstraction Layer) is how we make ArduPilot portable to lots of different platforms. There is a top level AP_HAL in libraries/AP_HAL that defines the interface that the rest of the code has to specific board features, then there is a AP_HAL_XXX subdirectory for each board type, for example AP_HAL_AVR for AVR based boards, AP_HAL_PX4 for PX4 boards and AP_HAL_Linux for Linux based boards.
      它主要是为了对兼容各家不同的板子而提供一些统一的接口给上层使用。比如有一个AP_HAL的目录,里面就记录了一些板级的通用资源,如GPIO和I2C,SPI,UART等,因为这些资源对于不同飞控板的实现可能不同,不能共用。而AP_HAL_XXX则记录了不同家飞控板各自的具体实现代码,如PX4的就是在AP_HAL_PX4中。
      再往上就是Shared libraries了,它应该是整个APM中最大也是最核心的一个部分了,因为各个模块的功能基本都在这些libraries中实现。例如姿态解算就在libraries/AC_AttitudeControl这个目录中。
     Vehicle flight code,它是针对不同的飞行器而言的,目前有如下几种flight vehivle-Plane, Copter, APMrover2 and AntennaTracker.
      MAVLink是一种小型无人机的通信协议,具体可以参考:https://en.wikipedia.org/wiki/MAVLink
     最上一层,就是地面站,也就是我们常说的上位机了,这里不做过多介绍,不在打算学习的范围。

后续的学习,会按照从下往上的顺序,依次学习相关模块的代码,不过最底层的驱动部分,不会仔细看,只要了解其框架就好,主要会学习中间的三个部分。由于我也是一边学习一边记录,所以难免会有理解不对的地方,欢迎大家批评指正,共同进步!
回复

使用道具 举报

发表于 2016-4-16 14:36:28 | 显示全部楼层
学习中……
回复

使用道具 举报

发表于 2016-4-16 23:27:26 | 显示全部楼层
原创心得,造福大众,支持一个!
回复 支持 反对

使用道具 举报

发表于 2016-4-17 15:52:34 | 显示全部楼层
谢谢楼主
回复

使用道具 举报

发表于 2016-4-17 18:51:47 | 显示全部楼层
    学习一下
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-4-18 08:31:02 | 显示全部楼层
Bluesky 发表于 2016-4-16 23:27
原创心得,造福大众,支持一个!

有不对的地方还要麻烦指正
回复 支持 反对

使用道具 举报

发表于 2016-4-19 15:18:23 | 显示全部楼层
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
回复

使用道具 举报

发表于 2016-4-19 15:31:34 | 显示全部楼层
比较有用,帮助理清思路!
回复 支持 反对

使用道具 举报

发表于 2016-4-21 20:37:10 | 显示全部楼层
学习了,谢谢
回复 支持 反对

使用道具 举报

发表于 2016-4-22 16:17:20 | 显示全部楼层
感謝大大分享!!!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表