前言
大家在学习ardusub的过程中,在面对各个博主讲解的程序部分一定要首先分清博主讲解的是什么版本的程序,比如大家一开始下载的一般为master版本,而我们用到的一般为stable的,还有目前一些最新版本的sub4.1,sub4.5。网上的资料都比较老旧关于ARM的学习资料少之又少,关于arm的学习可以看一下“阿木实验室”Ardupilot固件二次开发-初级 - 网易云课堂 (163.com)的视频(还用中级视频是需要购买的),但讲解的是arducopter的程序,大家可以试着理解学习,虽然比较难,可以带大家入门一下吧~~
参考资料:
ArduPilot-2-系统架构 - 知乎 (zhihu.com)
ArduSub入门教程-介绍 - 创客智造 (ncnynl.com)
Features · GitBook (ardusub.com)
在面对众多博主的程序讲解时可以直接在git上储存的代码上直接对比着看
ArduPilot/ardupilot: ArduPlane, ArduCopter, ArduRover, ArduSub source (github.com)
基本结构
首先ardupilot由一下几部分组成:
车辆代码vehicle code
共享库shared libraries
硬件抽象层hardware abstraction layer (AP_HAL)
工具目录tools directories
外部支持代码external support code (i.e. mavlink, dronekit)
代码调用逻辑,从下往上分析,以pixhawk硬件平台为例:
pixhawk负责执行操作系统ChibiOS;
ChibiOS执行了一系列进程或应用,这些应用调用了Flight Code;
Flight Code中的调用逻辑:上层应用如姿态控制代码调用了共享库代码,共享库代码调用了硬件抽象层代码;
Flight Code与上位机的通信通过MAVLink协议实现;
车辆代码vehicle code
车辆目录是定义 每种车辆类型的固件。目前,有 6 种车辆类型:飞机Plane、直升机 Copter 、漫游者 Rover、潜艇 Sub、飞艇 Blimpr和天线追踪器 AntennaTracker。 尽管不同车辆类型之间有很多共同的元素,但它们各自不同。我们目前用到的是ardusub方面的代码,主程序为ardupilot/ardusub/ardusub.cpp
共享库shared libraries
这些库是在所有车辆类型之间共享。这些库包括传感器驱动器、姿态和位置估计(又名 EKF)和控制代码(即 PID 控制器)。
核心库:
-
AP_AHRS - 使用 DCM 或 EKF 进行姿态估计
-
AP_Common - 核心包含所有草图和库所需的内容
-
AP_Math - 各种数学函数,对矢量操作特别有用
-
AC_PID - PID(Proportional-Integral-Derivative)控制器库
-
AP_InertialNav - 惯性导航库,用于将加速度计输入与 GPS 和气压数据
-
AC_AttitudeControl - ArduCopter的控制库包括基于PID控制的姿态、位置控制等各种功能。
-
AC_WPNav - 航点导航库
-
AP_Motors - 多旋翼飞行器和传统直升机电机混合
-
RC_Channel - 一个库,用于将 PWM 输入/输出从APM_RC转换为内部 角度等单位
-
AP_HAL、AP_HAL_ChibiOS、AP_HAL_Linux——实现“硬件抽象层”的库 提供与高级代码相同的接口,以便它可以 更容易移植到不同的板上。
传感器库:
-
AP_InertialSensor - 读取陀螺仪和加速度计数据,执行校准并提供 以标准单位(deg/s、m/s)的数据到主代码和其他库
-
AP_RangeFinder - 声纳和红外测距传感器接口库
-
AP_Baro - 气压计接口库
-
AP_GPS - GPS接口库
-
AP_Compass - 3 轴罗盘接口库
-
AP_OpticalFlow - 光流量传感器接口库
其他库:
-
AP_Mission - 从 EEPROM 存储/检索任务命令
硬件抽象层hardware abstraction layer (AP_HAL)
AP_HAL层(硬件抽象层)是我们制作 ArduPilot 的方式可移植到许多不同的平台。有一个顶级AP_HAL libraries/AP_HAL,用于定义代码其余部分的接口 有针对具体的板子特性,然后就有了AP_HAL_XXX 子目录,例如,AP_HAL_AVR 用于基于 AVR 的 开发板,AP_HAL_PX4用于 Pixhawk 开发板和 AP_HAL_Linux 基于 Linux 开发板。
工具目录tools directories
工具目录是杂项支持目录。为 例如,tools/autotest 提供了 autotest.ardupilot.org 站点后面的 autotest 基础结构,以及 tools/Replay 提供我们的日志回放工具。
外部支持代码external support code (i.e. mavlink, dronekit)
在某些平台上,我们需要外部支持代码来提供额外的 功能或板支持。目前,外部树是:
-
PX4NuttX - 核心 NuttX Pixhawk 板上使用的 RTOS
-
PX4Firmware - 基础 Pixhawk 板上使用的 PX4 中间件和驱动程序
-
uavcan - 无人机CANBUS ArduPilot 中使用的实现
-
Mavlink - 马夫林克 协议和代码生成器
注:MAVLink作为一种标准协议,将飞控从系统中独立出来,完成最为基本的飞行控制动作。
ArduSub概述
ArduSub 项目是一个功能齐全的开源解决方案,适用于遥控水下航行器 (ROV) 和自主水下航行器 (AUV)。ArduSub 是 ArduPilot 项目的一部分,最初派生自 ArduCopter 代码。ArduSub 具有开箱即用的广泛功能,包括反馈稳定性控制、深度和航向保持以及自主导航。
ArduSub 旨在安全、功能丰富、开放式且易于使用,即使对于新手用户也是如此。
ArduSub 与地面控制站软件无缝协作,该软件可以监控车辆遥测并执行强大的任务规划活动。它还受益于 ArduPilot 平台的其他部分,包括模拟器、日志分析工具以及用于车辆管理和控制的更高级别的 API。
ArduSub 处于海洋机器人技术的前沿,适用于任何想要在水面以下操作车辆的人。支持许多不同的 ROV 配置,添加自定义设计很简单。
关于ardusub的深层代码我们下期见。