[飞控]如何学习无人机-入门篇

2023-05-16

学什么

我把无人机分成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 再开始?我是不是先学好嵌入式系统再开始?

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

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

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

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

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

[飞控]如何学习无人机-入门篇 的相关文章

  • 随想008:烂摊子

    我看到过很多离谱的现象 比如 xff1a 程序 代码重复 命名随意 逻辑混乱 甚至对齐都不一致 xff0c 当我询问代码为什么这样写时 xff0c 他们告诉我 xff1a 我接手时就是这样 xff01 原理图参数错误 器件老旧 xff0c
  • MySQL —— Database initialization failed 错误处理

    安装 MySQL 过程中遇到的错误 xff0c 记录一下 xff0c 避免下次又遇到同样的错误 安装 MySQL 8 0 33 到最后一步时 xff0c 出现了小红点无法往下执行了 找了网上的方法解决了问题 xff0c 为了避免下次遇到同样
  • 随想009:读书

    我很懊恼的意识到 xff0c 直到过了 30 岁 xff0c 我才明白如何读书 我们在网上浏览新闻 阅读小说 xff0c 这些让人愉悦的阅读不叫读书 xff0c 顶多叫消遣 xff1b 我们在学校背诵历史 地理 xff0c 记住数学公式和化
  • 找文心一言问了几个嵌入式软件开发的问题

    百度终于通知我可以试用文心一言了 xff0c 试验了一番 xff0c 总体满意 xff0c 记录几个文心一言回答的问题 我是一个嵌入式软件开发者 xff0c 你能帮我做什么工作以提高我的开发效率 作为一个嵌入式软件开发者 xff0c 以下是
  • JavaScript常用数组属性和方法

    本文给出了js xff08 JavaScript xff09 数组 xff08 Array xff09 操作所涉及到的所有常用内置函数说明及用法 xff0c 希望对大家有所帮助 数组的属性和方法 属性length属性 xff1a 方法1 把
  • FreeRTOS三种数据结构区别(StreamBuffer,MessageBuffer,Queue)

    转载自博客 xff1a https blog zh123 top p 61 308 Queue队列是最基本的数据结构 xff0c 在FreeRTOS v10 0后提供了另外两种高级数据结构为Streambuffer和MessageBuffe
  • MySQL知识点(详细)

    结构化查询语言SQL 结构化查询语言SQL xff08 Structured Query Language xff09 xff1a 是在关系数据库上执行数据操作 xff0c 检索及维护所使用的标准语言 xff0c 可以用来查询数据 定义数据
  • linux驱动系列学习之Framebuffer子系统(三)

    一 Framebuffer子系统简介 Framebuffer xff08 帧缓冲 xff09 时Linux系统位显示设备提供的一个接口 属于偏底层的显示接口 它将显示缓冲区抽象 xff0c 屏蔽图像硬件的底层差异 xff0c 允许上层应用程
  • Linux系统通过远程终端修改分辨率

    最近的工作是测试服务器的板载GPU xff0c 由于一切处于开发阶段 xff08 没有USB驱动 xff0c 无法通过键鼠操作 xff09 xff0c 切换桌面分辨率成了一项难题 用谷歌 用百度 xff0c 总算找到了一个在远程终端修改分辨
  • ubuntu安装WPS字体缺失的解决办法

    作者最近新安装的ubuntu系统 xff0c 所以缺少了很多的办公软件 xff0c 之前安装了WPS xff0c 但是Linux系统的wps缺少了windows的字库 xff0c 因此使用起来不太方便 xff0c 所以作者就整理了这样的一份
  • Qt实现串口通信(C++实现串口通信小助手)---串口收发及串口数据解码、串口通信模拟器。

    Qt实现串口通信示例 前言 xff1a 以下串口通信示例 xff0c 参考了现有网上前辈们的资源 xff0c 最后结合部分个人的思想 xff0c 所以下述博客会将实现的原理及代码的案例进行公开 这里我们先上效果图 xff1a 一 串口通信简
  • vins-mobile代码解析3:drawAR

    AR功能主要流程是 xff1a 先检测平面 xff0c 然后计算AR物体 xff08 box xff09 的各个顶点3d位置 xff0c 然后写程序把每个顶点投影到相平面 xff0c 用cv的多边形填充功能来绘制到照片上面 先求一个相机朝向
  • Error:ER_NOT_SUPPORTED_AUTH_MODE: Client does not support authentication protocol

    MySQL 8 0 33 安装完成 xff0c 使用时候报错 xff1a Error xff1a ER NOT SUPPORTED AUTH MODE Client does not support authentication proto
  • 卡尔曼滤波器和优化的本质理解

    非线性最小二乘优化中 xff0c 最重要的是那个雅克比矩阵 每一行对应一个观察两 xff0c 里面的值代表要减少这个观察量的误差 xff0c 其他被优化的量需要做的改变 而每一列就是这个观察量需要怎么变才能减少不同的观察量 对于一个优化量
  • G2o,GTSAM,Ceres,Tensorflow优化器的方法比较

    首先是一些背景知识 xff1a 最速梯度下降法 xff08 GD xff09 和牛顿法可以用来优化所有种类的函数 牛顿高斯和基于牛顿高斯的LM法只能用来优化非线性最小二乘 SGD是最速梯度下降法的改进 xff0c 也就是每次迭代随即选取一些
  • MSCKF算法研究

    目的 xff1a 找一个能把imu和视觉融合起来的算法 细节 xff1a 网上搜索了下 xff0c 17年初的时候基本VIO算法就是MSCKF最完备 github上面有一个非官方的实现 xff0c 就下下来研究 但是跑kitti的数据都效果
  • SLAM中全局优化初值设置的经验谈

    情况分析 xff1a 有两段轨迹 xff0c 段内的重投影误差很小 xff0c 但是两段轨迹的相对位置有点错位 我们找到了这两段轨迹overlap的一些共视关系 这个时候如果我们直接把两段轨迹放一起做BA xff0c 其实是不能减少这两段轨
  • 视觉建图融合gps的合并工具测试

    描述 xff1a 把两个bag的数据分别计算自己的轨迹后 xff0c 和gps做刚体对齐找两个轨迹的共視关系通过两个轨迹的点云匹配后得到两个轨迹的相似变换 xff0c 把第二个轨迹变换到第一个轨迹的坐标系下加入gps边的pose graph
  • Android.mk for your own module

    这里我们向Android中添加自己的模块 xff0c 只涉及到 so a elf source的编译 xff0c 以及如何将prebuilt file添加进工程 对于APK以及jar的source暂时没有仔细研究 xff0c 要添加进去的话
  • 基于 Distcc 的android分布式编译环境的搭建

    关于Ditscc分布式编译环境的搭建 xff0c 网上也有不少文章 xff0c 但是基本上都过时了 所以看了很多文章 xff0c 走了不少弯路 xff0c 最后总算梳理清楚了一条正确的环境搭建的步骤 xff0c 而且可以实现zeroconf

随机推荐

  • opencv 删除二值化图像中面积较小的连通域

    对于上图的二值化图像 xff0c 要去除左下角和右上角的噪点 xff0c 方法 xff1a 使用opencv去掉黑色面积较小的连通域 代码 CvSeq contour 61 NULL double minarea 61 100 0 doub
  • c++中冒号(:)和双冒号(::)的用法

    转载于 xff1a http fengqing888 blog 163 com blog static 3301141620100623933512 1 冒号 xff08 xff09 用法 xff08 1 xff09 表示机构内位域的定义
  • linux下c语言写的简单的贪吃蛇

    基本算是第一次在linux下写程序 xff0c 果然各种不习惯 用的是emacs xff0c 都说是IDE中的神器 xff0c 但是我还没用习惯 xff0c gdb调试也不怎么熟悉 xff0c linux下的c程序设计也只是看了个皮毛 xf
  • 树莓派无需显示屏的VNC Viewer方式的远程连接

    一 配置wifi连接 方法非常简单 xff0c 首先在SD卡的根目录下添加一个名为 wpa supplicant conf的文件 xff0c 然后在该文件内添加以下的内容 xff1a ctrl interface 61 DIR 61 var
  • 由三点确定一个圆(圆心,半径)

    参考论文 一种改进的随机圆检测算法 光电工程 数据结构 圆信息 struct CircleInfo CvPoint circlecentre 圆心 double raduis 半径 点信息 struct CvPoint int x int
  • Qt Creator+MinGW+OpenCV2.3.1 开发环境搭建(windows 7 系统)

    折腾了一个下午 43 晚上 xff0c 总算弄好了 xff0c 下面说下步骤 1 必备软件 xff1a Qt SDK for Open Source C 43 43 development on Windows xff1a http qt
  • void fun() const{}; const void fun(){}; 和void const fun(){}; 的区别?

    const void fun 和void const fun 两个相同 如果采用 34 按址传递方式 34 的函数返回值加const 修饰 xff0c 那么函数返回值 xff08 即地址 xff09 的内容不能被修改 xff0c 该返回值只
  • strcpy()、memcpy()、memmove()、memset()的实现

    strcpy memcpy memmove memset 的实现 strcpy 字符串拷贝 char strcpy char strDest const char strSrc assert strDest 61 NULL amp amp
  • 多重继承的构造函数和析构函数的执行顺序(包含虚基类)

    下面示例就是说明多重继承析构函数和构造函数的执行顺序 xff1a span class token macro property span class token directive hash span span class token d
  • 阿里云服务器 配置frp实现Ubuntu台式机电脑内网穿透

    起因 实验室一台Ubuntu20 04的台式机电脑 xff0c 我想用我的Win10笔记本远程连接它 xff0c 用它的高性能 xff0c 在Ubuntu的环境下来跑代码 xff0c 这样比较方便 编程环境即可具有便携 性能 两者兼得 xf
  • 【论文阅读笔记】GAN Memory with No Forgetting

    Hello大家好 xff0c 今天带大家来看Nips2020的最新文章 GAN Memory with No Forgetting 关于Nips2020所有关于终生学习的文章可见传送门 总览 本文是杜克大学 xff08 Duke Unive
  • 【论文阅读笔记】NeurIPS2020文章列表Part2

    Online Multitask Learning with Long Term MemoryFewer is More A Deep Graph Metric Learning Perspective Using Fewer Proxie
  • Macbook用Terminal启动Matlab

    最近更新到了Mac OS Big Sur xff0c 发现Matlab开启后直接无响应 xff0c 因此只能通过Terminal打开 xff0c 打开方式是在Terminal中输入如下代码直接敲回车就行啦 xff08 其中Matlab版本要
  • 对比学习学习笔记

    对比学习学习笔记 A Simple Framework for Contrastive Learning of Visual Representations Ting Chen Simon Kornblith Mohammad Norouz
  • Ubuntu18版本安装ROS

    最近不小心把虚拟机里的ROS弄坏了 xff0c 导致Linux都无法使用 也忘了快照导致所以软件重新安装 xff0c 在这里给大家分享一下ubuntu18版本如何安装ros以及我安装中出现的问题如何进行解决 注 xff1a 不同的ubunt
  • ER图

    1 某商业集团的销售管理系统 数据库中有三个实体集 xff0c 一是 商店 实体集 xff0c 属性有商店编号 商店名 地址等 xff1b 二是 商品 实体集 xff0c 属性有商品号 商品名 规格 单价等 xff1b 三是 职工 实体集
  • Tensorflow:EEG上CNN的一次实验

    一次失败的CNN实现 前言简介数据CNN网络 模型调整减少过拟合的尝试与全连接网络比较与SVM网络比较模型运用到其他分类标准结果分析代码CNN网络代码交叉验证代码FC网络代码SVM网络代码 前言 这是一次较为 失败 的分类器尝试 xff0c
  • MySql Error Code: 1046. No database selected Select

    初学者在建立表时容易遇到这样的报错 xff1a Error Code 1046 No database selected Select the default DB to be used by double clicking its nam
  • R语言自用笔记:复数

    复数在R语言中标示为z 61 x 43 iy 在R中虚数单位为i xff0c 如果是定值可以直接赋值 z1 61 1i print z1 1 0 43 1i z2 61 2 5i print z2 1 0 43 2 5i z3 61 1 4
  • [飞控]如何学习无人机-入门篇

    学什么 我把无人机分成3个大模块 操作 目的 xff1a 组装无人机 xff0c 享受驾驶无人机的乐趣 抱歉我给不了太多建议 xff0c 因为我从没有以此为目进行过学习 xff0c 但是我知道这一部分的知识关键词是 航模 xff0c 有非常