Ardupilot源码框架

1. 1 Ardupilot源码框架

Ardupilot源码地址
官网地址

1.1. Ardupilot介绍

  • 在Pixhawk的历史那节中我们谈到,Pixhawk是硬件平台,PX4是pixhawk的原生固件,专门为pixhawk开发的。APM(Ardupilot Mega)也是硬件,Ardupilot是APM的固件,所以称ArduPilot固件也叫APM。Ardupilot由一群爱好者开发维护的,从最早的APM1,APM2开始,后来软件代码不断状大,原来的APM2的硬件不能胜任最新代码,再后来开发者就把Ardupilot代码转移到了Pixhawk平台上,兼容了Pixhawh硬件平台,所以就导致现在Pixhawk上有两套飞控代码的原因,所以在Pixhawk硬件平台上可以运行PX4固件(原生固件),也可以运行APM固件。Pixhawk是硬件平台,PX4是pixhawk的原生固件,专门为pixhawk开发的。APM(Ardupilot Mega)也是硬件,Ardupilot是APM的固件,所以称ArduPilot固件也叫APM。Ardupilot由一群爱好者开发维护的,从最早的APM1,APM2开始,后来软件代码不断状大,原来的APM2的硬件不能胜任最新代码,再后来开发者就把Ardupilot代码转移到了Pixhawk平台上,兼容了Pixhawh硬件平台,所以就导致现在Pixhawk上有两套飞控代码的原因,所以在Pixhawk硬件平台上可以运行PX4固件(原生固件),也可以运行APM固件。
  • 由于Ardupilot兼容Pixhawk,因此Ardupilot的HAL层也可以使用pixhawk硬件。Ardupilot是基于Pixhawk原生代码开发的上层应用,如下面的源码框架图所示,Ardupilot把底层的PX4Firmware和NuttX等都抽象为HAL,developer只需要关心上层应用即可,基于Pixhawk原生设计上层控制逻辑。Ardupilot其实是开源的、玩具级飞控,它为了兼容各种乱七八糟的板子、机型,有很多冗余的代码,这些冗余的代码让我们理解飞控本身增加了难度和学习成本。如果我们需要一款专业的飞控,完全可以去掉这些冗余的代码,只保留我们需要的精简过的功能,这样也就能大大降低它代码的复杂程度。也就是说,假如你打算开一家无人机公司,不需要从最底层一行一行的代码写起,可以直接把这套开源的Pixhawk原生代码搞透彻,然后基于它进行上层开发,加入自己NB的算法。
  • Ardupilot目前主要是支持的5种设备的目录包括ArduPlane(固定翼)、ArduCopter(直升机/多旋翼)、APMrover2、AntennaTracker、ArduSub。当你从github上将Ardupilot这套源码下载下来以后,你会发现这套源码其实包含不同的上层应用。而其中ArduCopter是针对四旋翼飞行器的。由于是开源项目,为了方便更多不懂底层硬件的人来开发上层应用,所以这个项目将底层的一些东西进行了封装,抽象成了一堆的库,让软件开发人员根据这个库,就能实现上层应用的开发。Ardupilot的源码系统框架图如下:


    20180521173348189

库文件分为五个部分:

  • vehicle code:车辆代码,每种车辆类型的顶级目录,有四种车型:
    • Plane
    • Copter
    • APMrover2
    • AntennaTracker
  • shared libraries 共享库
  • hardware abstraction layer(AP_HAL) 硬件抽象层
  • tools directories 工具库
  • external support code

1.2. 库文件介绍

库文件介绍(位于\libraries目录下),libraries包含了所有需要的库函数头文件等。

  • 核心库:
文件名 功能介绍
AP_AHRS -姿态估计的库,使用DCM(方向余弦矩阵)或者EKF(卡尔曼滤波)
AP_Common -核心库会被其他库所依赖
AP_Math -各种各样的数学操作的函数,特别是对向量操作比较有用
AC_PID -PID控制库
AP_InertialNav - 惯性导航库,已经将GPS及气压器的数据和加速度计进行了融合
AC_AttitudeControl -姿态控制库
AP_WPNav -路标导航库
AP_Motors -多旋翼和传统直升机混合的电机库,主要是跟电机输出有关的
RC_Channel -将从APM_RC接收到的pwm信号转换成内部单元,例如角度
AP_HAL, AP_HAL_AVR, AP_HAL_PX4 - 硬件抽象层,主要将底层硬件进行抽象。使上层应用拥有统一的接口,使其更容易移植到不同的硬件上,其中AP_HAL目录定义了一个通用的接口,特别是hal.rc_out_write()函数将从 AP_Motors 类中接收的具体PWM转化为特定板子pin脚的输出。其他的目录AP_HAL_XXX针对不同硬件平台进行详细的定义。例如AP_HAL_AVR目录对于AVR平台,AP_HAL_PX4对应PX4平台,AP_HAL_Linux对应Linux平台。
  • 传感器库:
文件名 功能
AP_InertialSensor -读取陀螺仪和加速度的数据,以标准单元(deg/s,m/s)将数据提供给主函数和其他库
AP_RangeFinder -声呐和红外距离传感器接口库
AP_Baro -气压计接口库
AP_GPS -GPS接口库
AP_Compass -三轴磁力计(罗盘)接口库
AP_OpticalFlow -光流传感器接口库
  • 其他库:
文件名 功能
AP_Mount,AP_Camera, AP_Relay :相机安装控制库,相机快门控制库
AP_Mission : 从eeprom(电可擦只读存储器)存储/读取飞行指令相关库
AP_Buffer :惯性导航时所用到的一个简单的堆栈(FIFO,先进先出)缓冲区
AP_AccelCal、AP_Declination、AP_RCMapper、AP_RPM、AP_RSSI
AP_ADC :Analog to Digital
APM_Control : pitch/roll/yaw controller
DataFlash :flash memory
GCS_Console/GCS_MAVLink :地面站通信、飞行日志

1.3. 主目录文件介绍

多旋翼飞控的所有文件都放在\Ardupilot的目录下。

文件名 功能
Copter.h : 各个头文件的集合,各种飞行模式初始化函数和执行函数的声明,日志和地面站的相关函数声明,自动调参参数的声明。姿态控制中使用到的函数几乎都在该头文件中进行了声明。
Parameters.h : 定义了两个全局参数类,类中包含各种参数的定义
Define.h : 各种宏定义
inertia.h : 从加速度计读取惯性力
ekf_check.cpp : 检测EKF或惯性导航系统的故障触发飞行的警报并帮助采取对策
esc_calibration.cpp : 检查和执行ESC校准的功能
events.cpp : 当故障安全更改时将调用此事件。
log.cpp : 飞行日志
failsafe.cpp : 失控保护
AP_Arming.cpp : 上电BB声、校准时的BB声、电机解锁BB声
fence.cpp : 地理围栏,阻止无人机飞入禁飞区
GCS_Mavlink.cpp : 地面通信站
motor.cpp : 电机BB响,电机解锁
motor_test.cpp : MavLink电机测试
mode.cpp : 飞行模式初始化和切换
mode_acro.cpp : 特技
mode_althold.cpp : 定高
mode_auto.cpp : 自动
mode_autotune.cpp : 自动调参
mode_circle.cpp : 绕圈
mode_drift.cpp : 漂移
mode_flip.cpp : 空翻
mode_guided.cpp : 引导
mode_land.cpp : 着陆
mode_poshold.cpp : 定点
mode_rtl.cpp : 返航
mode_sport.cpp : 运动
mode_stabilize.cpp : 自稳
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,098评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,213评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,960评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,519评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,512评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,533评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,914评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,574评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,804评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,563评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,644评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,350评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,933评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,908评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,146评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,847评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,361评论 2 342