[飞控]如何学习无人机-入门篇「建议收藏」

学什么我把无人机分成3个大模块操作目的:组装无人机,享受驾驶无人机的乐趣。抱歉我给不了太多建议,因为我从没有以此为目进行过学习,但是我知道这一部分的知识关键词是【航模】,有非常多的【航模】发烧友可以给你更专业的意见。知识目的:了解无人机的本质知识解决的是「why?」如果你遇到的问题通常是,为什么要用欧拉角?为什么要用滤波?那说明你现在需要的问题都是知识型问题。关键词是【导航】【控制…

大家好,又见面了,我是你们的朋友全栈君。

学什么

我把无人机分成3个大模块

操作

目的:组装无人机,享受驾驶无人机的乐趣。

抱歉我给不了太多建议,因为我从没有以此为目进行过学习,但是我知道这一部分的知识关键词是【航模】,有非常多的【航模】发烧友可以给你更专业的意见。

知识

目的:了解无人机的本质

知识解决的是「why?」 如果你遇到的问题通常是,为什么要用欧拉角?为什么要用滤波?那说明你现在需要的问题都是知识型问题。关键词是【导航】【控制】等理论知识。

开发

目的:实现一个具体功能,比如:室内悬停,避障,全自动A点飞到B点等等

通过【知识】,使用【工具】完成自己的目标,【编程语言】【操作系统】等等在飞控开发里能够使用就行

开发需要解决具体的问题,前提是你知道一定的无人机知识

开发解决的是 「how?」,怎么装编译环境?怎么调试?这个算法怎么写?这一部分的关键词是【编程】【嵌入式】等专业技能。

怎么学

其实如果你单独学一样,还是挺容易的,飞手专心学操作,学生专心学知识。无非就是多动手,和多看书嘛。

就是这个开发,很气人,飞控本来就是个交叉学科,本来就涉及很多不同学科的专业知识,但是因为你还需要把知识应用起来,又涉及一些计算机知识,编程知识等等。让整个学习过程变的非常庞大无从下手。

但是,偏偏我们大部分人学无人机的目的都是学开发对吧,那我就抛砖引玉,结合我多年走弯路的基础上,介绍一下我认为比较合适顺序。

先给出建议:学习开发 专业知识>编程能力

飞控开发不需要特别强大的编程能力和花哨的编程技巧,相反通常是你通过你的专业知识,先想到解决方案,然后再稍作修改,或者简单的实现一下算法,所以:

不要通过开源代码去学飞控!!!!

不要通过开源代码去学飞控!!!!

不要通过开源代码去学飞控!!!!

为什么不要,因为「飞控知识」到「飞控代码」飞控代码 的过程中,除了算法需要一些离散化,和一些迭代过程,还伴随着作者自己对算法的理解,选择,和编程习惯。

[飞控]如何学习无人机-入门篇「建议收藏」

如果你试图从 飞控代码 ,反推 飞控算法 ,除非你本身对这个算法已经非常熟悉,否者即使你编程能力强,操作系统,嵌入式,编程语言,这些知识都非常强,你看代码依然会很迷茫,你看到懂每一行代码,但却不知道为什么要这样写。

举个栗子:我之前分析过一行滤波代码,背后涉及的知识点远远超出你的想象,如果你期望通过代码学习飞控知识简直是给自己开了个【地狱模式】。

最快速的路线是你对算法已经有一定的了解,你知道这个算法应该应用在飞控系统中的哪个环节,你知道这个算法有什么用,然后你很好奇这个算法怎么通过编程实现的?你找来了开源代码作为参考,相互对应下,你更加理解了算法,同时也知道了算法如何通过编程实现。

当然这个过程往往也不会这么顺利,可能你找的开源代码过于复杂,即使你比较熟悉算法,依然看不懂被程序加工后的算法函数,起码你已经可以明确,目前你看不懂是因为一些编程技巧导致的,你就可专心去攻克这个问题,而不是苦思冥想为啥我天天看就是看不懂?

所以首先明确到底是哪个步骤导致你的学习很难进行下去!

1.专业知识的阻碍

大部分人应该都会被困在这里一段时间吧,毕竟飞控涉及的专业知识太多了,但是通常你只需要深入理解其中一个部分,所以我的建议是先构建专业知识的框架

如果你还不知道你到底想学哪个部分我先给你一个图感受一下。

[飞控]如何学习无人机-入门篇「建议收藏」这是一个简单的模块划分:

1.无人机上的传感器获取数据

2.导航系统通过传感器数据得到当前飞机导航数据包括位置,速度,姿态等等

3.决策层提供目标,决策可以是遥控,也可以是自动导航

4.根据当前的导航信息,和决策层给出的目标,进行控制,是飞机以达到目标为目的进行动作

5.控制器给出输出,通过控制分配,给每个电机PWM,使电机以一定的速度转动。

6.电机转动,飞机当前的导航信息发生变化。

7.回到第一步,获取传感器数据,以得到最新的飞机导航信息。

这个简单的划分可以看到,无人机系统其实是有非常多的模块组成的,初学者并不需要每个部分都升入了解,但是你需要有这么个框架概念,你就可以定位你需要的知识属于哪个部分,你才能去针对性的学习。

这个阶段主要以搭建知识架构为主,可以忽略一些细节,不要被一些具体问题卡主,坚持看下去,有了知识框架后,再回头专研某个具体问题。

比如姿态控制,第一步肯定是从导航读取当前姿态,从某个地方获取期望姿态,然后求姿态误差,然后进行控制,最开始你可以不知道每个细节如何实现,等你有了这个架构。

在去定位具体问题,导航如何获取姿态,首先肯定是从传感器读取原始数据,进行一些滤波,然后融合,最后得到可用的姿态,把每个大问题也拆分成框架,最后你就有了整个知识。

一旦你构建好了你的知识框架,遇到问题你可以快速定位在你的框架体系中,就可以通过相关专业名称搜索来快速查找资料,同时平时如果看见一些讨论,一些好的文章,论文,都可以迅速添加到你的知识框架里。

你看,我确实不懂导航,之前也没接触过,主要是工作上暂时用不到,但是我的知识框架还是在的,只要有需要,我随时都可以开始查阅资料进行学习。

如何构建你自己的知识框架呢?你要是之前问我,我也没有答案,因为我的学习过程,都是通过关键词的搜索。

但是现在我有更好的答案:《多旋翼飞行器设计与控制》全权 ,全权老师这本书是我看过最全面的书籍,非常适合旋翼的学习,是我手边现在最常翻阅的书籍。

2.编程技巧的阻碍

如果你已经有一定的基础,了解一些专业知识,肯定会迫不及待,想要知道书上的知识如何变成代码,这时候一份优秀的开源代码,是最适合你的学习资料。

但是,我从来都不建议,没有编程经验,没有接触过嵌入式系统的朋友,一开始就直接看 APM ,PX4 的代码。

他们的系统过于庞大,很容易打击学习的积极性,一会就放弃了,我甚至一度怀疑这玩意只有计算机专业的人才能看的懂吧,我是不是该先去学计算机?

可以找一些自己能看懂的比较简单的飞控代码看,关键词【小四轴】,代码会简单一些,但是麻雀虽小五脏俱全,该有的都有,依然是很好的入门资料。学习的时候千万不要贪心,就选择自己能看懂的资料就行,能看懂的才能坚持下去,慢慢递增难度,学习贵在坚持,只要能坚持学下去,以后都能看懂。

其实看懂代码并不需要特别强的编程能力,因为只是阅读而已,

给出一些关键字:【构造函数】【重载】【启动脚本】【uorb】【创建线程】,如果熟悉这几个概念,看懂 PX4 ,apm 的代码也仅仅是需要点耐心。

阅读工具:understand (强列推荐)

具体读代码的小技巧可以看我之前的文章【打造自己的工作流】

至于实现算法,简单的 if else , switch ,for 基本也够用了,大部分情况不需要特别花哨的技巧。

3.PX4,APM的阻碍

如果你有一定的专业知识,同时编程能力也比较优秀,恭喜你,成为一名优秀的飞控工程师就只需要一点点耐心。

这时候你可以充分利用开源界两大教科书(APM ,PX4),不论什么时候他们依然是最好的参考资料,但是同时也会给学习的人带来而外的迷茫。

因为这两个参考资料太过耀眼,你可能会把他们作为金科玉律,以至于你可能会非常困惑,为什么他要这么做,跟书上的不太一样?

但我想说的是,他们是很好的代码,但是依然有很多作者的偏好,所以很多地方不过就是作者做了一些取舍,做了一些选择,不要迷失在深究为什么作者为什么这样写,反倒是你可以提出质疑,如果是我,我会怎么处理这个问题。不要被代码支配,代码只是帮助你学习的一个工具而已。

盯住你的目标

如果你看到这里,依然摩拳擦掌,跃跃欲试,那就放心大胆的干。

不要担心我是不是先把数学学好再开始?我是不是先学会C 再开始?我是不是先学好嵌入式系统再开始?

都不需要,你的目标只有一个,就是学会飞控,

如果在你建立知识框架的时候,刚体力学阻碍了你,那就去查资料,把这部分解决,然后继续回到你飞控的学习主线,什么问题阻碍了你,你就去解决它,然后再回归你的主线任务。

你要时刻明白,你做的所有编程学习,数学学习,嵌入式学习,都是为了学习飞控的辅助技能,不要被辅助技能吓倒,或者迷惑。

飞控是个交叉学科,你永远不可能把所有知识都准备充分再开始,你需要的是在遇到障碍的时候都保持耐心,坚持一下,仅此而已。

关注微信公众【无人机干货铺】获取更多精彩内容

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/128956.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(1)
blank

相关推荐

  • linux grep命令

    linux grep命令

  • java input.nextline_关于java:Scanner#nextLine()留下一个剩余的换行符[通俗易懂]

    java input.nextline_关于java:Scanner#nextLine()留下一个剩余的换行符[通俗易懂]我一直遇到Scanner#nextLine的问题。根据我的理解,nextLine()应该返回当前输入流的其余部分,然后继续进行下一行。while(true){try{System.out.println(“Pleaseenteramonthinnumericform”);month=input.nextInt();System.out.println(“Pleaseenter…

  • vim复制粘贴_vim剪切命令

    vim复制粘贴_vim剪切命令在Windows下我们习惯的操作,复制单个字符,复制单行多行,删除单行多行,在linux的vim中操作如下:G(shift+g+g):跳到文档尾g+g:跳转到文档首home键:光标移动到行首end键:光标移动到行尾yy:复制光标所在行的整行内容yw:复制光标所在单词的内容nyy:复制从光标开始向下的n行内容,n为复制的行数nyw:复制从光标所在字开始后的n个字,n为复制的字数p:粘贴,将复制的内容粘贴在光标所在的位置x(小x):删除光标所在位置的字符,同键盘上的del

  • ❤️设计模式肝完了,还挺全!腾讯和阿里的offer已拿!❤️

    ❤️设计模式肝完了,还挺全!腾讯和阿里的offer已拿!❤️设计模式肝完了,还挺全!腾讯和阿里的offer已拿!金九银十已经来了,挺近大厂最好的机会已经来了!如果你是要找工作的,一定要抓住这个机会!前面已经整理了很多的面试资料:1,❤️爆肝!整理了一周的Spring面试大全【含答案】,吊打Java面试官【建议收藏】!❤️2,❤️肝完了,一天掌握数据结构和算法面试题,吊打面试官,建议收藏❤️3,❤️集合很简单?开什么玩笑?肝了一周,全是精华,万字讲解!面试再不怕集合问题了!!!❤️4,肝完了,总结了SpringBoot与缓存的知识点,快速掌

  • Windows10 环境变量_环境变量与用户变量

    Windows10 环境变量_环境变量与用户变量Windows10环境变量(用户变量与系统变量)1.环境变量(environmentvariables)环境变量(environmentvariables)是在操作系统中用来指定操作系统运行环境的一些参数。环境变量是在操作系统中一个具有特定名字的对象,它包含了一个或者多个应用程序所将使用到的信息。Windows和DOS操作系统中的path环境变量,当要求系统运行一个程序而没有告诉它程序所在的完整路径时,系统除了在当前目录下面寻找此程序外,还应到path中指定的路径去找。用

  • 微信小程序——图片识别

    微信小程序——图片识别我的微信小程序期末大作业——基于百度大脑API的图片识别小程序具体实现了动物识别、植物识别、车辆识别三个功能实验源码已经放到了我的GitHub,欢迎测试修改下面给大家分享该项目的实验报告????目录1概述1.1课程大作业目的与要求1.2课程大作业简介2设计思路2.1图片识别API2.2微信小程序UI框架3设计方案4设计过程4.1百度开放平台注册4.2获取asscee_…

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号