Lazy loaded image
🛩️APM源码分析
AP系列02-源码框架
Words 1740Read Time 5 min
2024-8-13
2024-12-11
type
date
slug
category
icon
password
 
💡
阅读下面内容时请结合源码阅读,便于理解。相较官方文档,本节增加了HAL层AP_HAL_Empty 和 Tools 文件夹下各工具文件夹描述

系统框架

notion image
ArduPilot 源码有五个主要部分组成:
  1. vehicle code
  1. shared libraries
  1. hardware abstraction layer (AP_HAL)
  1. tools directories
  1. external support code (i.e. mavlink, dronekit)
 

Vehicle Code

飞行器相关代码文件夹在顶层文件夹中,主要包括6种飞行器类型,分别为:飞机、直升机、探测器、潜艇、飞艇和天线跟踪器。尽管有许多共通之处,但不同飞行器源代码有各自特别之处。
具体文件夹下除了*.cpp 文件,还有 一份wscript 文件,列出库文件依赖关系。Makefile文件读取依赖,创建 -I 和 -L 标志用于构建。

Libraries

库文件包括传感器驱动、EKF、控制代码(例如PID控制器),库文件中代码为不同飞行器所共享。详情可参考
AP系列03-软件库 ArduPilot Libraries
AP系列04-库范例 Library Example Sketches
AP系列05-传感器驱动 Sensor Drivers
 

AP_HAL

在libraries/AP_HAL中定义基类AP_HAL,建立硬件抽象层,为应用层提供统一接口。 AP_HAL_XXX子文件夹定义了具体硬件板,里面包括硬件定义和具体实现源码。这样底层硬件更换,高层级的飞行控制代码保持不变。
AP_HAL_Empty 特殊的HAL接口实现,本质上什么也不做。但在没有实际硬件条件下,可以编译和运行 ArduPilot 代码。 主要有两个方面用处:
  1. 无需物理硬件,和实际传感器和执行器交互,方便逻辑代码和控制算法的单元测试;
  1. 软件在环模拟时,将与实际硬件交互隔离,用于飞行控制算法验证;
在实现上,也无需和任何硬件交互,读取传感器只是返回默认值,控制执行器也是什么也不做即可。

Tools directories

工具目录提供一些杂项支持,包括大量的脚本、实用工具和程序,用以支持开发者和用户软件构建、测试、部署和维护全过程,丰富了ArduPilot 功能,提高项目鲁棒性。下面介绍子文件夹功能(详情可参考子文夹下Readme文件):
  1. PrintVersion.py: 提取不同飞行器版本信息并打印
    1. AP_Bootloader: STM32 类型板子bootloader固件生成,包括通信协议、板子类型和MCU头文件。执行如下编译命令,可在 build/BOARDNAME/bin 文件夹下生成板子对应的bootloader固件。
      1. web文件夹下包括网页html文件,为升级相关的网页界面。
        notion image
    1. AP_Periph: 包含ArduPilot的外围设备的代码,例如传感器(例如,空速计,气压计),通信模块(例如,CAN,I2C)和其他硬件组件。
    1. ardupilotwaf: 包含ArduPilot使用的Waf构建系统相关的脚本和模块。包括构建配置、板定义以及用于构建项目的各种实用脚本。
    1. autotest: 包含不同ArduPilot飞行器(例如,多旋翼,飞机,漫游车,潜艇)自动化测试的脚本和配置。
    1. bootloaders: 包含ArduPilot支持的各种硬件平台的预编译 bootloader二进制文件。
    1. cameras_gimbals: 包含与相机和云台控制相关的代码和配置。
      1. xacti-config: Xacti相机的特定配置。
    1. CHDK-Scripts: 包含用于使用CHDK(Canon Hack Development Kit)控制佳能相机的Lua脚本。
      1. 佳能S100,佳能SX260:这些相机型号的特定脚本和设置文件。
    1. CodeStyle: 包含用于强制代码风格和格式化的脚本和配置文件。
      1. ardupilot-astyle.sh: 一个运行AStyle代码格式化的脚本。
      2. astylerc: AStyle的配置文件。
    1. completion: 包含用于命令补全的脚本。我们在linux开发环境控制终端输入编译命令时可以不全就是因为安装开发环境时,调用了这里的脚本。
      1. - bash, zsh: 用于 bash/zsh 的特定脚本
    1. CPUInfo: 包含用于收集CPU信息和性能指标的脚本和配置文件。
      1. Makefile, wscript: 编译CPUInfo工具的构建配置文件。
      2. 可以用于评价CPU性能指标,问价夹下还包括了H743\px4\esp32的输出文件。
    1. debug: 包含用于调试的脚本和配置,包括GDB脚本和OpenOCD配置。
    1. environment_install: 包含用于在各种操作系统(例如Ubuntu、macOS、Windows)上设置开发环境的安装脚本。
      1. install-prereqs-*.sh: 用于在不同平台上安装先决条件的脚本。
      2. install-ROS-ubuntu.sh 安装ROS1
      3. ubuntu-18.04-python3.sh 安装Python3
    1. FilterTestTool: 包含用于滤波算法测试的脚本
      1. 用于模拟原始IMU日志上IMU滤波的工具。这需要在LOG_BITMASK参数上激活RAW_IMU位。目前仅支持主IMU,并且不使用批量采样。
      2. notion image
    1. Frame_params: 包含适用于不同机型的参数文件。
      1. Parrot_Disco, QuadPlanes, Sub: 这些飞行器类型的特定参数文件。
    1. geotag: 用于为带GPS坐标图片添加地理标签。
    1. gittools: 包含git仓库和子模块管理脚本。
      1. pre-commit.py: Git的预提交钩子脚本。
    1. IO_Firmware: 包含用于I/O处理器的固件二进制文件。
    1. Linux_HAL_Essentials: 包含在Linux系统板上运行ArduPilot所需的基本文件和脚本。
      1. devicetree, pru: BeagleBone及其他平台上的设备树和PRU(可编程实时单元)的具体配置。
    1. LogAnalyzer: 包含用于日志分析的脚本文件
    1. mavproxy_modules: 包含Mavproxy 魔魁啊
    1. Replay: 包含用于回放日志文件和分析飞行数据的脚本和代码。
    1. ros2: ROS2相关文件
      1. ardupilot_dds_tests, ardupilot_msgs, ardupilot_sitl: 用于测试、消息传递和SITL集成的ROS 2包。
    1. scripts: 包含用于构建、测试和管理项目的各种实用程序脚本。
    1. simulink:包含 ArduPilot Simulink模型相关文件。
    1. UDP_Proxy:包含UDP代理的代码和脚本。
     

    引用

    1. Learning ArduPilot — Introduction — Dev documentation
     
    上一篇
    AP系列01-预备知识
    下一篇
    AP系列03-软件库 ArduPilot Libraries

    Comments
    Loading...