ArduPilot之开源代码框架

news2024/11/15 7:57:51

ArduPilot之开源代码框架

  • 1. 系统框架
  • 2. 工程框架
    • 2.1 工程目录
    • 2.2 代码组成
    • 2.3 运行流程
  • 4. 硬件传感器总线
    • 4.1 I2C
    • 4.2 SPI
    • 4.3 UART
    • 4.4 CAN
  • 5. 软件设计概念
  • 6. 总结
  • 7. 参考资料

在研读ArduPilot的过程,尝试用一些中文的词汇来描述,可能会造成某些理解上的差异。因为从不同体系,不同背景,不同领域的视角看这份开源代码,相信一定会有所差异。

如果想原汁原味的去理解,还是建议大家看官方的资料:Learning ArduPilot — Introduction。

注:笔者会从个人的角度来分析和理解ArduPilot,如有问题或者建议,请评论留言,谢谢!

1. 系统框架

ArduPilot基本的结构图如下所示,我们重点关注ArduPilot系统框架(红框内部分)。

基本结构组成:

  1. Ground Station
  2. Companion Computer
  3. ArduPilot
  4. Hardware (Flight Control/Sensors etc.)

输入输出接口:

  1. MAVLink
  2. HAL(Hardware Abstraction Layer,使用OS和Driver对象模型通过传感器总线抽象解耦软硬件)

注1:STM32硬件通常采用基于ChibiOS的HAL设计,详见:Autopilot Hardware Options。
注2:如果需要移植到新的硬件,可参考Porting to a new flight controller board。

在这里插入图片描述

2. 工程框架

代码git版本CommitID:

commit 673bf619e548676d0de6930e92b2906c77dad922 (HEAD -> Copter-4.4, origin/Rover-4.4, origin/Plane-4.4, origin/Copter-4.4)
Author: Andrew Tridgell <andrew@tridgell.net>
Date:   Thu Mar 23 17:43:27 2023 +1100

    waf: added --board-start-time configure option

2.1 工程目录

.
├── AntennaTracker
├── ArduCopter
├── ArduPlane
├── ArduSub
├── Rover
├── Blimp
├── libraries
├── modules
└── Tools

每个设备代码下都有wscript脚本,比如:ArduCopter
工程采用了waf脚本组织模块编译。

#!/usr/bin/env python
# encoding: utf-8

def build(bld):
    vehicle = bld.path.name
    bld.ap_stlib(
        name=vehicle + '_libs',
        ap_vehicle=vehicle,
        ap_libraries=bld.ap_common_vehicle_libraries() + [
            'AC_AttitudeControl',
            'AC_InputManager',
            'AC_PrecLand',
            'AC_Sprayer',
            'AC_Autorotation',
            'AC_WPNav',
            'AP_Camera',
            'AP_IRLock',
            'AP_InertialNav',
            'AP_Motors',
            'AP_RCMapper',
            'AP_Avoidance',
            'AP_AdvancedFailsafe',
            'AP_SmartRTL',
            'AP_Beacon',
            'AP_Arming',
            'AP_WheelEncoder',
            'AP_Winch',
            'AP_Follow',
            'AP_LTM_Telem',
            'AP_Devo_Telem',
            'AP_OSD',
            'AC_AutoTune',
            'AP_KDECAN',
        ],
    )

    bld.ap_program(
        program_name='arducopter',
        program_groups=['bin', 'copter'],
        use=vehicle + '_libs',
        defines=['FRAME_CONFIG=MULTICOPTER_FRAME'],
        )

    bld.ap_program(
        program_name='arducopter-heli',
        program_groups=['bin', 'heli'],
        use=vehicle + '_libs',
        defines=['FRAME_CONFIG=HELI_FRAME'],
        )

2.2 代码组成

  1. 设备代码(AntennaTracker/ArduCopter/ArduPlane/ArduSub/Rover/Blimp)
  2. 共享库(库框架)
  3. 硬件抽象层
  4. 工具目录
  5. 外部支持代码(即mavlink、dronekit)

从这里,可以开出该开源工程支持6中设备的应用

  • AntennaTracker(天线方位追踪)
  • ArduCopter(多轴)
  • ArduPlane(固定翼)
  • ArduSub(潜艇)
  • Rover(车辆)
  • Blimp(气球)

2.3 运行流程

鉴于当前官方文档比较详细的资料是针对Copter的,所以很多图可能出现Copter字眼居多。

在这里插入图片描述

从ArduPilot运行流程图上看:

  1. 左上角的蓝色框说明了传感器驱动程序后端线程中运行。来自传感器的原始数据被收集,转换成标准单位,然后保存在驱动器的缓冲区内。
  2. 代码的主线程定期运行,并通过前端的方法访问可用的最新数据。例如,为了计算最新的姿态估计,AHRS/EKF将从传感器驱动器的前端提取最新的加速度计、陀螺仪和指南针信息。

在这里插入图片描述

4. 硬件传感器总线

用于传感器的硬件总线主要是以下四种形式。通过OS和Driver对象模型,解耦软硬件。

4.1 I2C

  • 一对多配置
  • 适用于短距离(即小于1m)的通信
  • 总线以100kHz或400kHz运行,数据速率相对较低。
  • 4个引脚(VCC、GND、SDA、SCL)

在这里插入图片描述

4.2 SPI

  • 一对一
  • 20Mhz+,相比I2C速度快
  • 适用于短距离(10厘米)
  • 至少5个引脚(VCC、GND、SCLK、主输出-从输入、主输入-从输出)+每个从选择引脚

在这里插入图片描述

4.3 UART

  • 一对一
  • 与I2C和SPI(即1m)相比,基于字符的协议更适合远距离通信
  • 相对较快,速度为57Kbps~1.5Mbps
  • 4个引脚(VCC、GND、TX、RX),外加2个可选引脚(清除发送、清除接收)

在这里插入图片描述
在这里插入图片描述

4.4 CAN

  • 多主总线,任何节点都可以在需要时启动数据传输
  • 基于分组的超长距离协议
  • 高速,通常为1Mb(然而,在没有重大冲突的情况下,只有50%的总线比特率可以真正使用)
  • 至少需要3个引脚(GND、CAN HI、CAN LO)。可选地,VCC可用于为节点供电
  • 点对点拓扑。不建议使用星形或短柱拓扑
  • 需要在总线的每一端进行端接
    在这里插入图片描述
    在这里插入图片描述

5. 软件设计概念

后续主要牵涉到的设计概念我们会逐步学习和研讨,这里先以列表的方式给出。

  1. Library
  2. Sensor Drivers
  3. Threading
  4. UARTs and the Console
  5. RC Input and Output
  6. Storage and EEPROM management
  7. File Systems
  8. EKF
  9. MAVLink
  10. Device Architect

6. 总结

总的来说,ArduPilot代码库相当大(核心ArduPilot git树大约有700k行),对新人来说可能相当可怕。因此,通过框架的学习,可以让我们更快的了解系统组成,抓共性,抓重点,循序渐进的逐步了解系统。

注:后续我们会一一细分开来,逐步研读内部设计框架和重点关键模块。

7. 参考资料

【1】Learning ArduPilot — Introduction
【2】Autopilot Hardware Options
【3】Porting to a new flight controller board
【4】waf: The meta build system

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/453006.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

sparksql select后插入自己 报错 Cannot overwrite a path that is also being read from

问题现象 spark.version < 3.0.1 执行下面语句报错: Cannot overwrite a path that is also being read from ... 哪些情况算同时读写自己? 如果读自己和写自己在一个spark stage中,就算同时读写自己. spark.table("tb1")// 其他stransform.write.mode("…

运维监控工具PIGOSS BSM扩展指标介绍

PIGOSS BSM运维监控工具&#xff0c;除系统自带指标外&#xff0c;还支持添加SNMP扩展指标、脚本扩展指标、JMX扩展指标、自定义JDBC指标等&#xff0c;今天本文将介绍如何添加SNMP扩展指标和脚本扩展指标。 添加SNMP扩展指标 前提&#xff1a;需要知道指标的oid 例子&#xff…

刚毕业在深圳做程序员,我来聊聊月薪1万在大城市生活能剩下多少

我今年刚毕业&#xff0c;然后在大城市做IT&#xff0c;可能工资大概1万左右。现在讨论一下&#xff0c;月薪1万在大城市最后能留下多少。以下是兴哥的一位刚毕业没多久的程序员朋友&#xff0c;给大家分享一下程序员的薪资水平&#xff0c;在大城市生活 &#xff0c;一个月会剩…

JDBC重点

JDBC初识 DriverManager 将第三方数据库厂商的实现驱动jar注册到程序中可以根据数据库连接信息获取connection Connection 和数据库建立的连接,在连接对象上,可以多次执行数据库curd动作 可以获取statement和 preparedstatement,callablestatement对象 Statement | Prepare…

网络基础,InetAddress,Socket,TCP,UDP

概念&#xff1a;两台设备之间通过网络实现数据运输网络通信&#xff1a;将数据通过网络从一台设备传输到另一台设备java.net包下提供了一系列的类或接口&#xff0c;供程序员使用&#xff0c;完成网络通信网络&#xff1a;两台或多台设备通过一定物理设备连接起来构成了网络根…

go1.20环境安装以及beego框架配置

打开网址下载安装包选择对应安装包来下载安装(个人是windows&#xff0c;下载的1.20.3版本) 默认情况下会安装在C盘&#xff0c;但是我安装在了D盘目录 根据安装提示一步步next&#xff0c;直至完成 go get 在1.18版本之后就弃掉了&#xff0c;换成了install 配置自己的work…

Spring Cloud Alibaba全家桶——微服务链路追踪SkyWalking

前言 本文小新为大家带来 微服务链路追踪SkyWalking 相关知识&#xff0c;具体内容包括SkyWalking简介&#xff0c;SkyWalking环境搭建部署&#xff0c;SkyWalking接入微服务&#xff0c;SkyWalking持久化跟踪数据&#xff0c;自定义SkyWalking链路追踪&#xff0c;SkyWalking集…

ARM相关重点

一、概念&#xff1a; 指令&#xff1a;就是一条汇编指令 指令集&#xff1a;很多条汇编指令的集合 架构&#xff1a;随着ARM产品的迭代升级&#xff0c;对ARM指令集的命名 armv1~armv6已经淘汰 armv7~armv8市面正在使用的 armv9:2021年刚上市 内核&#xff1a;根据不同的a…

SpringCloud分布式请求链路跟踪——Sleuth

Sleuth 本专栏学习内容来自尚硅谷周阳老师的视频 有兴趣的小伙伴可以点击视频地址观看 随着微服务越来越多&#xff0c;可能会出现A调B&#xff0c;B调C、D等多重调用的情况&#xff0c;出现问题不易排查。 Spring Cloud Sleuth提供了一套完整的服务跟踪的解决方案&#xff0c…

软件测试高频面试题【附答案解析】

面试指导 软件测试理论刷题篇mysql数据库刷题库linux操作系统刷题篇软件测试工程师面试篇 一. 软件测试理论刷题篇 1.软件测试的意义是什么&#xff1f; 思路&#xff1a;什么是软件测试→软件测试的含义 什么是软件测试&#xff1a;在规定的条件下对程序进行操作&#xf…

【错误:A component required a bean of type ‘xxx‘ that could not be found.解决办法】

在学谷粒商城项目的时候出现了以下问题&#xff1a; *************************** APPLICATION FAILED TO START *************************** Description: A component required a bean of type org.redisson.Redisson that could not be found. Action: Consider defining a…

优思学院|西门子精益六西格玛的历程

最新阅读了一份案例报告&#xff0c;报告中仔细研究了西门子公司实施精益六西格玛的历程&#xff0c;也谈到它们利用了线上课程后&#xff0c;取得了更大的成功。 2014年&#xff0c;西门子工业自动化部门&#xff08;IA&#xff09;的高管们认识到他们必须采取措施来加强内部效…

English Learning - L2 第 16 次小组纠音 弱读和语调 2023.4.22 周六

English Learning - L2 第 16 次小组纠音 弱读和语调 2023.4.22 周六 共性问题help /help/ 中的 e 和 lsorry /ˈsɒri/ 中的 ɒ 和 ilook out /lʊk aʊt/ 中的 ɒ 和 aʊdont /dəʊnt/ 中的 əʊemergency /ɪˈmɜːʤənsɪ/ 中的 ɜːname /neɪm/ 中的 eɪright /raɪt/…

甘肃vr全景数字化展厅提高企业品牌认知度和销售效果

相比传统式展厅给观众们呈现的是静态的视觉体会&#xff0c;缺乏实时交互水平。而720VR全景虚拟展厅能够提供高度真实的展览体验&#xff0c;融合视、听、触等各种感官享受&#xff0c;带来颠覆的沉浸式体验。 即便社恐的你也能在虚拟现实的世界游刃有余&#xff0c;想看哪里点…

flutter protobuf插件的安装和使用

1.安装插件 2.在pubspec.yaml添加插件 protobuf: ^2.1.0protoc_plugin: ^20.0.13.安装protoc brew install protobuf检查是否安装成功 protoc --version4.安装dart brew tap dart-lang/dart brew install dartdart 安装好后&#xff0c;就有pub命令了。输入dart 命令行 和d…

【Linux】Linux背景常见的基本指令

文章目录 一、Linux背景二、Linux下基本指令ls 指令pwd 命令cd 指令tree 指令touch 指令mkdir 指令rmdir 指令rm 指令man 指令cp 指令mv 指令cat 指令more 指令less 指令head 指令tail 指令date 指令cal 指令find 指令grep 指令zip 指令unzip 指令tar 指令bc 指令uname 指令重要…

uniapp初始环境搭建,出于猎奇,也出于热爱编程

1 安卓环境 官方文档有些看不懂&#xff0c;这里还是自己写一下&#xff0c;毕竟我已经不想在回来带angular了&#xff0c;还是使用vue3吧&#xff0c;年纪打了&#xff0c;没用的知识学多了也是浪费时间。出于猎奇&#xff0c;也出于热爱编程。 1.1 生成签名证书 Android平台签…

linux系统启动过程与0号和1号进程

讲到linux 0号进程和1号进程就涉及到linux 系统的启动&#xff0c;我们就从linux启动过程开始。 1、linux 启动整体过程 当系统第一次启动或重启的时候&#xff0c;处理器将执行一个已知地方的代码。对应个人电脑&#xff0c;这个地方是存在主板上内存内的BIOS 当一个启动设备…

元宇宙的应用领域

应用领域一&#xff1a;游戏 1.游戏是最先成长起来的元宇宙场景。虚拟社交身份、开放性、经济系统、沉浸感、世界可持续性是元宇宙游戏需关注的五大特征。 2.元宇宙游戏依然是游戏&#xff0c;现阶段参与元宇宙游戏的主要是游戏爱好者。新的概念依旧需要好的游戏产品支撑。团…

一步搞定IP地址查询:这个在线工具帮你快速掌握设备的位置信息!

前言 今天分享一个免费的在线工具来查询IP地址所在的地理位置。可以通过IP地址所属的网络运营商和其他相关信息来确定设备的位置&#xff0c;包括国家、地区、城市和经纬度等信息。 Ip-API 官网地址: https://ip-api.com/ 使用示例 该工具除了提供界面查询&#xff0c;还贴心…