ArduPilot开源飞控系统之简单介绍

news2024/11/25 10:55:32

ArduPilot开源飞控系统之简单介绍

  • 1. 源由
  • 2. 了解&阅读
    • 2.1 ArduPilot历史
    • 2.2 关于GPLv3
    • 2.3 ArduPilot系统组成
    • 2.4 ArduPilot代码结构
  • 3. 后续
  • 4. 参考资料

ArduPilot是一个可信赖的自动驾驶系统,为人们带来便利。为此,提供了一套全面的工具,几乎适用于任何车辆、无人机、潜艇、气球等设备。

作为一个开源项目,在用户社区的快速反馈的基础上不断发展。相应的开发团队与社区和商业合作伙伴合作,为ArduPilot添加惠及所有人的功能。

尽管ArduPilot不生产任何硬件,但ArduPilot固件可在各种不同的硬件上工作;加上地面控制软件,运行ArduPilot的无人驾驶设备可以具有高级功能,包括与操作员的实时通信。

1. 源由

在2022年5月份开始逐步尝试更多的了解飞控系统:

  1. 从基于Betaflight的果冻F450
  2. 后来基于iNavflight策划SnapDragonfly,打通技术链路,并规划编程无人机产品系统,更加紧密的结合Snap可视化编程和无人机应用

从商业角度看,其实比较成功的开源飞控系统,在大陆这边更多的是PX4。
主要原因是PX4是BSD 3-clause license,换句话说,就是修改代码可以不开源,从开源的角度,这个显然不利于技术的发展。

而与之相应的ArduPilot飞控系统是基于GPLv3。这个从技术发展的角度就非常友好,即修改了代码,必须开源出来。
当然规避方法不是没有,那就是Companion Computer通过标准协议接口进行解耦。这种就是非常好的技术与商业的二合一。

今天开始我们陆续的学习下的各个组成以及模块化设计实现的方法。

2. 了解&阅读

对于一个现有成熟系统,最好的了解方式:阅读代码、文档,以及上手使用该系统以获取第一手信息。

撰写这篇之前,我已经开始了一段时间的摸索:

  1. 从ArduPilot飞控之DIY-F450计划起步
  2. 目前已经可以手动stabilize模式下试飞

后续,计划是采用Mission Planner进行地面站的控制,进行轨迹巡航和自动降落等功能,当然里面还有很多好的内容,相信后续有时间逐步的研究,学习。

2.1 ArduPilot历史

关于ArduPilot的历史,官网上有非常详细的描述,这里就笔者比较关注的重点,特别列出,详见:History of ArduPilot

  1. 2007年5月 Chris Anderson创办DIYDrones.com。
  2. 2008年9月 Jordi制造了能够自主飞行的传统直升机无人机,并赢得了第一届Sparkfun AVC比赛。
  3. 2009年 Chris Anderson和Jordi Munoz建立了3D Robotics。
  4. 2012年 3D Robotics发布了APM2.5/2.6
  5. 2013年1月 ArduPilot代码从google code搬迁到了github。
  6. 2014年10月 DroneCode基金会成立。
  7. 2016年3月 3DR因裁员而停止对ArduPilot社区的直接资助。同年,成立ardupilot.org非营利组织和新网站。

个人感觉前面这些历史变迁,值得回顾下,开源最后的好处就是大家都能使用到最先进的技术。

同时,大陆某宝上售卖的很多APM的版本都是2.6/2.8,大家看下就能知道,这个的水平基本上是2012年的,而现在已经是2023年了。10年的变迁,技术突飞猛进,所以建议大家买个相对靠近的飞控来学习。

这里有比较成熟且在官网有记录的硬件,详见:Autopilot Hardware Options

注:笔者这款就是Closed hardware里面的一个Holybro Kakute F7 AIO,点进去就能看到使用上述板子需要注意的配置项。

2.2 关于GPLv3

可能很多人并不太了解软件代码遵循的License是什么?其实换句话说,就是知识产权归属的问题。

这里强调一下,主要目的是更好的让大家理解该GPLv3的好处,同时也给需要应用规避的商业操作做了技术指导。

首先,根据ArduPilot项目的性质,可以根据许可证条款自由使用Github存储库中提供的所有代码和工具,而无需任何授权或参与。非常感谢那些将此软件纳入其产品中进行销售的公司和个人。相当多的人已经这样做了。但是,许可证需要指出一些内容:

  • 告知您的客户该软件是开源的,并提供产品中的实际源代码,或提供可以找到源代码的链接
  • 与个人开发人员的贡献一样,如果您能通过电子邮件向我们通报包含该软件的产品,我们将不胜感激partners@ardupilot.org。
  • 此外,对于那些可能对更广泛的社区有用的更改,如果您可以使用pull请求将它们贡献回来,以考虑添加到原始代码库中,我们将不胜感激。

为什么我们选择这个许可证而不是其他许可证?

  • 为项目贡献bug修复和增强(或者至少向最终客户提供这些修复)的需求增加了贡献者之间的合作。如果没有这一要求,参与者会倾向于对自己进行哪怕是微小的改进,以获得相对于其他贡献者的优势。有证据表明,这很快导致了项目中许多不兼容的分支,对所有人都不利。
  • 许可证的“v3”部分确保购买设备的客户有权升级或更换飞行控制器上的ArduPilot版本。许可证并不要求它实际工作,只要求升级是可能的。这确保了即使制造商停止支持产品(这可能是出于非常合理的原因),如果所有者或开发社区决定获得支持,产品也可以继续发挥作用。ArduPilot已经出现了这样的例子。请注意,此要求仅适用于“用户产品”和制造商在技术上可以升级设备固件的产品。

可以集成封闭源代码(即专有)和开放源代码吗?

ArduPilot是开源的(GPLv3),但可以使用配套计算机运行封闭源代码,以方便将ArduPilet集成到您的系统中,或者添加更高级别的功能,使自己与竞争对手区别开来。建立在免费低级别飞行代码的可靠性之上,这样你就可以投资于更高级别的功能。我们相信ArduPilot与领先的封闭系统一样可靠,您不必受制于特定的制造商。以下是一家制造商如何做到这一点的图片。
在这里插入图片描述

2.3 ArduPilot系统组成

从整体上看下ArduPilot系统,其实不难发现主要组成归纳:

  1. 设备(应用):AntennaTracker/ArduCopter/ArduPlane/ArduSub/Rover/Blimp
  2. 库(组件):libraries
  3. 模块(三方):modules
  4. 地面站软件:Mission Planner/APM Planner 2.0/QGroundControl
  5. 标准协议:MAVLink/UAVCAN
  6. SDK、工具:MAVProxy/DroneKit
  7. 遥控接收机 + 遥控器
  8. 外部传感器(GPS/Compass/Lidar etc)
  9. 维测工具(调试工具,配置工具)
  10. 视频系统(单独拎出来,其实视频/照片都是摇杆的一部分)

注:可能有偏颇,但是这里重点是想说明我们想要了解整个系统运作,就需要了解系统的组成结构。

2.4 ArduPilot代码结构

ArduPilot的基本结构分为5个主要部分:

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

注:MAVLink作为一种标准协议,将飞控从系统中独立出来,完成最为基本的飞行控制动作。
在这里插入图片描述

3. 后续

接下去,我们将逐步的基于现有DIY系统来逐步了解和学习ArduPilot系统,更新的章节会和Betaflight类似在此一并提供链接。

  1. ArduPilot飞控之DIY-F450计划
  2. ArduPilot Kakute F7 AIO DIYF450 without GPS配置
  3. 持续更新中。。。。。。

注:如果大家有兴趣研究和学习的,可以通过Welcome to the ArduPilot Development Site进行学习,源代码链接github-ArduPilot。

4. 参考资料

【1】BetaFlight开源工程结构简明介绍
【2】BetaFlight开源代码框架简介
【3】四轴飞控DIY简明步骤介绍
【4】四轴飞控DIY Mark4 - 减震
【5】关于穿越机FPV视频果冻效应的讨论
【6】Snap4iNav_Project

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

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

相关文章

人人看得懂的AI教程

人人看得懂的AI教程,从0开始入门AI教程,一步一步AI,人工智能学习笔记 现在写书真的方便,闲来无事写了本从0开始学AI的书籍,哈哈 一、基础知识 1.1 人工智能概览 1.2 机器学习 1.3 深度学习 1.4 数据科学 二、编程知…

Stable Diffusion - API和微服务开发

Stable Diffusion 是一种尖端的开源工具,用于从文本生成图像。 Stable Diffusion Web UI 通过 API 和交互式 UI 打开了许多这些功能。 我们将首先介绍如何使用此 API,然后设置一个示例,将其用作隐私保护微服务以从图像中删除人物。 推荐&…

CoreDNS 性能优化

CoreDNS 作为 Kubernetes 集群的域名解析组件,如果性能不够可能会影响业务,本文介绍几种 CoreDNS 的性能优化手段。合理控制 CoreDNS 副本数考虑以下几种方式:根据集群规模预估 coredns 需要的副本数,直接调整 coredns deployment 的副本数:k…

总结下Spring boot异步执行逻辑的几种方式

文章目录概念实现方式Thread说明Async注解说明线程池CompletableFuture(Future及FutureTask)创建CompletableFuture异步执行消息队列概念 异步执行模式:是指语句在异步执行模式下,各语句执行结束的顺序与语句执行开始的顺序并不一…

【高项】项目人力资源管理,沟通管理与干系人管理(十大管理)

【高项】项目人力资源管理,沟通管理与干系人管理(十大管理) 文章目录1、人力资源管理1.1 什么是人力资源管理?1.2 如何进行人力资源管理?(过程)1.3 人力资源管理工具1.4 人力资源管理文件2、沟通…

自动驾驶BEV感知系列算法整理总结

序论 之前一直做的lidar感知,现在感觉大趋势是多传感器融合,所以博主也在向BEV下的融合框架学习,希望大家后面可以多多交流,下面会分为两类进行介绍,后期的文章会在下面两类中以小标题的形式出现,BEV下的两…

《推荐PlumGPT:一款优秀的聊天机器人》

PlumGPT是一款仿照ChatGPT的聊天机器人,它使用了最先进的自然语言处理技术来实现人机交互。PlumGPT不仅能够进行普通的对话,还可以回答各种问题,提供各种建议和信息。它能够对不同的话题做出详细的回答,例如科技、健康、娱乐、新闻…

[element]element-ui框架下载

⭐作者介绍:大二本科网络工程专业在读,持续学习Java,努力输出优质文章 ⭐作者主页:逐梦苍穹 ⭐如果觉得文章写的不错,欢迎点个关注一键三连😉有写的不好的地方也欢迎指正,一同进步😁…

线程同步与互斥【Linux】

文章目录1. 引入2. 前导概念2.1 同步与异步2.2 互斥与并发2.3 原子性操作2.4 临界资源和临界区临界资源临界区如何管理3. 互斥锁3.1 引入3.2 概念3.3 示例pthread_mutex函数家族用法全局锁局部锁3.4 性能损耗3.5 串行执行3.6 补充4. 互斥锁的实现原理4.1 线程的执行和阻塞4.2 自…

Java虚拟机对象

对象的创建 当虚拟机遇到一条字节码new指令时,首先检查指令的参数能否在常量池中定位到一个类的符号引用,并且检查这个符号引用代表的类是否已被加载、解析和初始化,如果没有就先执行类加载过程。 在类加载检查完毕后,就要对这个…

常见的7种软件规模估算方法 优劣势比较

业内主要的软件规模估算方法:LOC估算方法、故事点估算法、FPA功能点估算方法、COSMIC功能点估算方法、快速功能点估算方法、IFPUG功能点估算方法和自动化功能点估算方法。 1、LOC估算方法 LOC是源代码的总行数。通过统计源代码中的行数,来估算软件规模。…

Spring项目的创建和使用

Spring:Spring是一个包含众多工具方法的IoC容器; Spring的核心功能: 将对象(俗称Bean)存储到Sping容器中从容器中取出对象目录 一,创建Spring项目 1,创建一个Maven项目 2,添加Spri…

[STL]string的使用+模拟实现

[STL]string的使用模拟实现 文章目录[STL]string的使用模拟实现一、STL1.什么是STL2.如何学习STL二、string1.string类的介绍2.string的常用接口string的构造string的迭代器string的容量操作string的访问string的修改string的其他接口string的非成员函数接口三、string的模拟实…

Node【七】初识Express框架

文章目录🌟前言🌟Express框架🌟1.什么是框架🌟2.express安装🌟3.创建web服务基本遵循之前的四个步骤:🌟4.路由🌟 由 :请求方式请求路径(1)get发送…

JAVA+SQL离散数学题库管理系统的设计与开发

题库、试卷建设是教学活动的重要组成部分,传统手工编制的试卷经常出现内容雷同、知识点不合理以及笔误、印刷错误等情况。为了实现离散数学题库管理的信息化而开发了离散数学题库管理系统。 该系统采用C/S 模式,前台采用JAVA(JBuilder2006&am…

面试官:自动化测试都没弄明白,你怎么敢来面试的?

最近看了很多简历,很多候选人年限不小,但是做的都是一些非常传统的项目,想着也不能通过简历就直接否定一个人,何况现在大环境越来 越难,大家找工作也不容易,于是就打算见一见。 在沟通中发现,由…

全国青少年信息素养大赛图形化编程初赛·模拟二卷,含答案解析

全国青少年电子信息智能创新大赛 图形化编程选做题模拟二卷 一、单选题 1. 下图中的程序执行一次之后,“我的变量”最终的值是?( ) A、0或者1 B、true或者false C、包含或者不包含 D、成立或者不成立

纯虚函数和抽象类

什么时候使用纯虚函数: 某些类,在现实角度和项目实现角度,都不需要实例化(不需要创建它的对象),这个类中定义的某些成员函数,只是为了提供一个形式上的借口,准备让子类来做具体化的实现,此时,这个方法就可以定义为"纯虚函数",包含纯虚函数的类,就称为抽象类. 纯虚函…

token详解

token详解前言什么是token?为什么要使用token?那么如何使用token呢?使用Token进行身份验证和授权的过程具体步骤项目上如何运用的tokentoken过期了什么办?总结升华前言 本篇博客主要从什么是token?为什么要使用token&…

C++ 图系列之基于有向无环图的拓扑排序算法

1. 前言 有向无环图,字面而言,指图中不存在环(回路),意味着从任一顶点出发都不可能回到顶点本身。有向无环图也称为 DAG(Directed Acycline Graph)。 有向无环图可用来描述顶点之间的依赖关系,依赖这个概…