无人机学习指南

2023-05-16

学什么?

        理论与开发。

理论:控制栈的原理与算法+通信

        目的:了解无人机的本质

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

开发::

系统架构:软硬件平台;操作系统,bsp,驱动;通信中间件,硬件接口,协议

        目的:实现一个具体功能,比如:室内悬停,避障,全自动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++再开始?我是不是先学好嵌入式系统再开始?

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

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

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

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

        所以,其实学习所有的知识其实都一样,无非是一点坚持和耐心,希望能对你有一些启发和帮助。ok,我是zing,一个有趣的算法工程师,我们下期见。

如何学习无人机-入门篇 (qq.com)

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

无人机学习指南 的相关文章

  • opencv基于颜色的物体识别

    span style font size 18px include lt iostream gt include lt string gt include lt string h gt include lt vector gt includ
  • c++模板(函数模板、类模板)STL、map、容器

    一 什么是模板 模板是C 43 43 中自动生成代码的技术 二 为什么使用模板 问题 xff1a 实现一个通用的排序算法 C语言 xff1a 通过回调函数实现 xff0c 使用者调用麻烦 C 43 43 语言 xff1a 函数重载 xff0
  • iPad 上最强 IDE,支持 20 多种开发语言,还开源了

    x1f447 x1f447 关注后回复 进群 xff0c 拉你进程序员交流群 x1f447 x1f447 作者丨小集 来源丨小集 xff08 ID xff1a zsxjtip xff09 https mp weixin qq com s 3
  • 如何删除Docker镜像

    Docker镜像不过是一组只读文件 xff0c 这意味着一旦docker镜像被构建 xff0c 就不能修改 然而 xff0c 你可以借助现有的docker镜像创建一个新的docker镜像 Docker镜像是用来构建docker容器的 Doc
  • 如何减少/缩小Linux中的LVM(逻辑卷大小)?

    减少 缩小逻辑卷会给数据非常大的损坏风险 所以 xff0c 如果可能的话 xff0c 尽量避免这种情况 xff0c 但如果没有其他选择的话 xff0c 只能这样操作了 缩减LVM之前 xff0c 建议先做一个备份 当你在LVM中的磁盘空间耗
  • 是结束也是开始

    往事随风 时光飞逝 xff0c 不知不觉已答辩完 xff0c 不知不觉已毕业 xff0c 不知不觉告别了生活四年的学校 告别了一起的你们 xff0c 不知不觉踏上了返程的火车 xff0c 不知不觉已回到了家 xff0c 坐在电脑旁边 xff
  • 目标检测光流法(一):对光流法的认识

    所谓光流 xff0c 是计算机视觉研究领域的术语 xff0c 直观的认识就是提供一个对运动物体的的描述 xff0c 因此也常用于运动物体的检测与识别 现实生活中 xff0c 我们之所以能感受到物体的动与不动 xff0c 就是因为这个物体在前
  • 机器学习(1)--特征工程之特征抽取

    三者关系 xff1a 人工智能 gt 机器学习 gt 深度学习 机器学习 xff1a 机器学习是从数据中自动分析获得规律 xff08 模型 xff09 xff0c 并利用规律对未知数据进行预测 机器学习的数据 xff1a 文件csv xff
  • VScode配置makefile编译

    VScode配置makefile编译 Author xff1a onceday date xff1a 2022年7月26日 1 修改终端任务配置 Terminal span class token punctuation span span
  • Windows 7+Ubuntu 16.04双系统安装以及重装windows7为windows10

    安装双系统先明白自己系统的配置 xff08 将要怎么去划分 xff09 但遵循一个原则 xff0c 就是两个系统一定要将系统引导分别放在不同的盘 xff0c 也就是划分一个 空闲盘单独给Ubuntu安装 后面无论你是升级windows7 还
  • Clang-format格式化及配置参数

    Clang format格式化C代码 Author xff1a Once Day Date xff1a 2022年11月3日 漫漫长路有人对你微笑过嘛 参考文档 xff1a Clang Format Style Options Clang
  • 写下2011,展望2012

    一年又过去了 xff0c 好快 xff0c 写个总结 xff0c 也算是对这一年有个交代吧 一 上半年 xff1a 专心科研 总的来说 xff0c 上半年还是过得比较惬意的 xff0c 安心做科研 xff0c 主要还是做wince 嵌入式开
  • 有人说

    1 只要123 xff0c 不要456 xff1a 麦肯锡要求公司员工 xff0c 凡事要在最短的时间内表达清楚 他认为 xff0c 一般情况下人们最多记得住一二三 xff0c 记不住四五六 xff0c 所以凡事要归纳在3条以内 2 职场要
  • 爬北邮人论坛帖子

    爬北邮人论坛某个版块的帖子 xff0c 存储为txt文件 xff0c 因为是txt文件所以表情 xff0c 图片去掉了 首先得到某一个版块的html代码 xff0c 提取出每个帖子的url 计算每个帖子的页数 xff0c 根据页数循环提取帖
  • 2.2.4.2 大型网站技术和java中间件-大型网站及其架构演进过程:应用服务器警告高,如何让应用从服务器走向集群:解决Session的问题

    2 2 4 2 大型网站技术和java中间件 大型网站及其架构演进过程 应用服务器警告高 xff0c 如何让应用从服务器走向集群 解决Session的问题 影响解决 xff1a 解决应用服务器变为集群后的Session问题 xff08 使用
  • 2.2.5 大型网站技术和java中间件-大型网站及其架构演进过程:数据集读压力变大,读写分离吧

    2 2 5 大型网站技术和java中间件 大型网站及其架构演进过程 数据集读压力变大 xff0c 读写分离吧 场景 xff1a 随着业务的发展 xff0c 数据量和访问量都在增长 xff0c 很多的业务是读多写少的 gt 采用读写分离的方式
  • 正则-匹配多个单词

    匹配多个单词 b State of Formation Jurisdiction b d D d D 多个空格合一 String cleanValue 61 String value trim replaceAll 34 s 1 34 34
  • 7.2 linux shell 管理 : 变量

  • docker容器:docker-ubuntu-vnc-desktop安装

    docker容器 xff1a docker ubuntu vnc desktop安装 详见博客 xff1a https blog csdn net pbymw8iwm article details 82752315 1 pull镜像 xf

随机推荐

  • docker知识:docker 查看完整的 containerId

    docker知识 xff1a docker 查看完整的 containerId docker ps no trunc gt gt docker ps no trunc CONTAINER ID IMAGE COMMAND CREATED S
  • Ubuntu登陆账户后自动运行VNCserver

    问题 xff1a 远程桌面时 xff0c 如果重启远程Ubuntu xff0c 则VNC会话失效 解决 xff1a 一个解决的方法就是用putty将重启的Ubuntu登陆入账户后 xff0c 再开启VNC会话 为了方便 xff0c 可以设置
  • docker知识:docker 目录结构

    docker知识 xff1a docker 目录结构 var lib docker containers image overlay2 distribution imagedb content sha256 metadata sha256
  • docker知识:docker update (更新参数)

    docker知识 xff1a docker update 更新参数 docker update restart 61 always asp3000 biquge
  • docker知识:Mac下Docker直接访问宿主机

    docker知识 Mac下Docker直接访问宿主机 mac下Docker容器访问宿主机端口 mac下的docker其实是虚拟机 xff0c 所以无法直接访问宿主机 Docker for Mac v 17 12 to v 18 02 直接使
  • SSH连接问题:连不上&不能免密登录

    一 连不上 ssh username 64 ip 报错 xff1a ssh connect to host lt ip4地址 gt port 22 Connection timed out 首先排查 xff0c 排查步骤 xff1a 1 p
  • VScode: “无法打开源文件 xxxx.h”

    原因 xff1a 缺文件 报错的文件中引用的文件 xff0c 层层索引进去 xff0c 有缺的 解决办法 xff1a 更新子模块 xff1b 重新下载源代码 xff1b 找到没有的文件 xff0c 从新的源码中复制缺失的文件 xff08 比
  • git clone PX4 环境配置与问题记录

    仿真平台基础配置 yuque com 前言 使用ubuntu下载ros px4似乎是一件十分繁琐以及困难的事情 xff0c 但是本人经过了参考大量链接 xff0c 成功安装好后 xff0c 发现这件事情其实并非难事 许多安装指导链接发布于一
  • SSH工作原理&Ubuntu20.04安装并配置SSH&设置SSH免密登录

    目录 一 SSH的介绍 xff08 服务器端 xff0c 客户端 xff09 1 SSH 远程连接工具 连接原理 xff1a 2 SSH的安全机制 3 两种级别的验证方法 xff08 登录方法 xff09 二 ssh的安装与启动 1 安装
  • SSH使用问题:无法免密登录

    一 排查服务器端 1 检查authorized keys文件权限 xff0c 并设置为700 chmod 700 authorized keys 2 检查 etc ssh sshd config文件 sudo vim etc ssh ssh
  • PX4项目学习::(一)项目架构

    目录 序 xff1a 项目整体嵌入式架构 xff1a 无人机方面做嵌入式编写的飞控总结 1软件 xff1a 2硬件 xff1a 1 PX4 Pixhawk的软件体系结构 2 下图所示为PX4的算法顶层架构 左边是整个飞控系统的控制功能实现
  • PX4项目学习::(七)飞控栈:导航(Navigator和mission控制)

    25条消息 PX4飞控之导航及任务架构 Felix ZL的博客 CSDN博客
  • 微策略春招面试总结

    春季招聘时我报的研发岗 xff0c 由于我不是杭州本地人 xff0c 故首先接到的是电话面试 xff0c 电话面试大概一周左右被通知去杭州总部面试 下面主要简述一下面试的内容 第一面是技术面 xff0c 大概持续近一个小时 首先面试官会照着
  • PX4项目学习::(六)CMakeLists.txt 文件剖析

    27条消息 PX4 CMakeLists txt 文件剖析 lipi37的博客 CSDN博客 px4 cmake makefile介绍 跟我一起写Makefile 1 0 文档 seisman github io 57条消息 PX4编译文件
  • PX4项目学习::(七)飞控栈算法梳理

    无人机算法分为三种 xff0c 分别为捷联式惯性导航系统 滤波算法和估计算法 xff08 卡尔曼滤波器 xff09 飞行控制算法 xff08 PID算法 xff09 Px4控制算法综述 1commander和navigator产生期望位置
  • PX4项目学习::(七)驱动(src-->drivers)

    PX4的spi驱动 xff0c nuttx的spi硬件抽象 古月居 guyuehome com 无人机中级篇 xff1a 第四讲 xff1a 系统级驱动程序开发 知乎 zhihu com 无人机中级篇 xff1a 第五讲 xff1a 用应级
  • PX4:二次开发:流程

    1 程序编写 xff08 用模板简单实现一个程序 xff09 gt 进阶 xff1a 不同项目下的程序规范 xff1b 调用子模块的流程 2 在Nuttx系统中注册应用并编译 为了使该程序能够编译进固件 xff0c 需要在系统的cmake文
  • 原理::定位与导航::IMU和GPS融合原理(无人驾驶)

    41条消息 动手学无人驾驶 xff08 6 xff09 xff1a 基于IMU和GPS数据融合的自车定位 自动驾驶小学生的博客 CSDN博客 41条消息 重读经典 Quaternion kinematics for the error st
  • 系统使用:vmware虚拟机如何不占用c盘

    42条消息 vmware放在D盘占用C盘空间 vmware虚拟机如何不占用c盘 wendychow001的博客 CSDN博客
  • 无人机学习指南

    学什么 xff1f 理论与开发 理论 xff1a 控制栈的原理与算法 43 通信 目的 xff1a 了解无人机的本质 知识解决的是 why 如果你遇到的问题通常是 xff0c 为什么要用欧拉角 xff1f 为什么要用滤波 xff1f 那说明