问题：如何能够较好掌握飞控系统设计？有没有比较好的书籍推荐？

回答一：首先须明确飞控系统设计是一项艰巨的任务，图1给出了目前飞行控制系统设计与验证的详细流程。另外，在自主控制的框架内，飞控系统担负的任务也越来越多，如图2。已经从单纯的控制扩展到感知，规划，决策，控制等诸多领域，已成为无人机绝对的核心。 (1) 飞行控制系统控制律设计人员需要掌握许多领域的知识，例如控制理论，控制系统结构，空气动力学、飞行动力学、航空和气动伺服弹性、飞机载荷、质量和平衡、仿真和建模方法。面对现代复杂的飞行控制系统，控制律设计的真正问题之一就是更快更早地掌握所需的知识。对于控制律设计人员而言，没有可以借鉴的设计手册，也缺乏合适的设计原则。技能的获取主要来自于实践，在有限的几个新项目和时间的流逝之间，的确存在着组合,经验的获取问题。所以，经验的总结是重要的，但有时也容易被忽略掉的。～刘林《最佳实践知识库》 入门图书推荐 。。。。。。。。。。。。。。。。。。 1.固定翼无人机推荐《Small Unmanned Aircraft Theory and Practice》 涵盖了从底层的增稳控制、状态估计，到上层的航路规划、视觉控制。最赞的是每一章都配有相应的matlab仿真程序，一步步做下来，最终将会实现一个功能强大的无人机程序。ps：中文版已经有人在翻译了。 2.多旋翼设计推荐北航全权教授的课程《多旋翼无人机设计与控制》课件下载地址： 全老师也写了一本书，《多旋翼无人机设计与控制》，不过应该是英文版的，近期会出版，我个人非常期待。 3.论文、公开课等 另外，我收集整理了一些多旋翼方面的资料，可以看这里 4. 开源代码 开源项目也有很多了，结构好一点的推荐px4 功能多一些的推荐arduipilot 5. 实践 搞理论是一方面，既然是“设计”，那就是要针对具体的工程实践。我见过太多只会“设计”的博士甚至教授，搞理论是没的说，但他的设计离开电脑后能否run起来？自己也不确定。所以 学习->设计->实践->总结问题->再设计 这样的一个闭环还是要有的。 说到最后，即便是玩最便宜的多旋翼，还是需要一点小钱的。 继续补充一段《最佳实践知识库》 ==Ծ‸Ծ== (2) 由于历史的原因，通常设计不是从零开始，而是在已有的设计基础上进行的。这就意味着某些设计可能会继承已有设计的缺陷，会在已有基础上增加新的内容和功能，也会继承一些重大问题的解决方法，这些系统可能会变得非常复杂，以至于几乎无人能够全面了解系统的全部功能。 (3） 在某些情况下，无法将设计需求转换为较好的量化指标，那么FCS 设计成败主要取决于控制律设计者个人的经验和枝巧，以及对于控制律设计作为飞行控制系统的一个完整部分所固有的软件和硬件方面的限制条件的洞察能力。因此，真正的设计需求或许只可能存在于经验丰富的设计者的头脑中，这些设计者能够正确地理解可用的信息，并能对可能失去的东西做出合理的判断。 (4) 设计周期往往非常漫长，任何一个设计者在其设计生涯中可能只能接触到个别设计案例，因此有一部分经验是来自其他人。

回答二：飞控开发目前为止只推荐一本书全权老师的《多旋翼飞行器设计与控制》，书里非常系统的讲解了目前最流行的旋翼飞控开发的各个模块。 当然看懂这本书也不容易，当你绞尽脑汁，去弄懂书里的内容时，你就会了解一个飞控系统是如何构成的，需要哪些知识，因为飞控是个交叉学科会有很多知识点，但是只要你有了自己的知识框架，你就知道下一步该学习哪些知识，慢慢构建自己的飞控知识体系。 同时这么久的飞控学习，有点学习心得也分享一下： 不要通过开源代码去学飞控!!!! 不要通过开源代码去学飞控!!!! 不要通过开源代码去学飞控!!!! 为什么不要，因为 飞控知识 到 飞控代码 的过程中，除了算法需要一些离散化，和一些迭代过程，还伴随着作者自己对算法的理解，选择，和编程习惯。 如果你试图从 飞控代码 ，反推 飞控算法 ，除非你本身对这个算法已经非常熟悉，否者即使你编程能力强，操作系统，嵌入式，编程语言，这些知识都非常强，你看代码依然会很迷茫，你看到懂每一行代码，但却不知道为什么要这样写。 最快速的路线应该是你对算法已经有一定的了解，你知道这个算法应该应用在飞控系统中的哪个环节，你知道这个算法有什么用，然后你很好奇这个算法怎么通过编程实现的？你找来了开源代码作为参考，相互对应下，你更加理解了算法，同时也知道了算法如何通过编程实现。 当然这个过程往往也不会这么顺利，可能你找的开源代码过于复杂，即使你比较熟悉算法，依然看不懂，被程序加工后的算法函数，起码你已经可以明确，目前你看不懂是因为一些变成技巧导致的，你就可专心去攻克这个问题。 所以首先明确到底是哪个步骤导致你的学习很难进行下去！ 大部分人应该都会被困在这里一段时间吧，毕竟飞控涉及的专业知识太多了，但是通常你只需要深入理解其中一个部分，所以我的建议是先构建专业知识的框架。 如果你还不知道你到底想学哪个部分我先给你一个图感受一下。  这是一个简单的模块划分： 1.无人机上的传感器获取数据 2.导航系统通过传感器数据得到当前飞机导航数据包括位置，速度，姿态等等 3.决策层提供目标，决策可以是遥控，也可以是自动导航 4.根据当前的导航信息，和决策层给出的目标，进行控制，是飞机以达到目标为目的进行动作 5.控制器给出输出，通过控制分配，给每个电机PWM，使电机以一定的速度转动。 6.电机转动，飞机当前的导航信息发生变化。 7.回到第一步，获取传感器数据，以得到最新的飞机导航信息。 这个简单的划分可以看到，无人机系统其实是有非常多的模块组成的，初学者并不需要每个部分都升入了解，但是你需要有这么个框架概念，你就可以定位你需要的知识属于哪个部分，你才能去针对性的学习。 如何构建你自己的知识框架呢？你要是之前问我，我也没有答案，因为我的学习过程，都是通过关键词的搜索。 但是现在我有更好的答案：《多旋翼飞行器设计与控制》全权 ，全权老师这本书是我看过最全面的书籍，非常适合旋翼的学习，是我手边现在最常翻阅的书籍。 2.编程技巧的阻碍 如果你之前只接触过简单的单片机编程，其实我也不建议，一开始就直接看 APM ，PX4 ，他们的系统过于庞大，很容易打击学习的积极性，一会就放弃了，可以找一些自己能看懂的比较简单的飞控代码看，关键词【小四轴】，代码会简单一些，但是麻雀虽小五脏俱全，该有的都有，依然是很好的入门资料。学习的时候千万不要贪心，就选择自己能看懂的资料就行，递增难度，学习贵在坚持，能坚持学下去，以后都能看懂。 其实看懂代码并不需要特别强的编程能力，因为只是阅读而已， 给出一些关键字：【构造函数】【重载】【启动脚本】【uorb】【创建线程】，有专业只是，和这几个概念也能看懂 PX4 ，apm 的代码了。 阅读工具：understand (强列推荐) 具体读代码的小技巧可以看我之前的文章 3.PX4，APM的阻碍 如果你有一定的专业知识，同时编程能力也比较优秀，恭喜你，成为一名优秀的飞控工程师就只需要一点点耐心。 这时候你可以充分利用开源界两大教科书（APM ，PX4），不论什么时候他们依然是最好的参考资料，但是同时也会给学习的人带来而外的迷茫。 因为这两个参考资料太过耀眼，你可能会把他们作为金科玉律，以至于你可能会非常困惑，为什么他要这么做，跟书上的不太一样？ 但我想说的是，他们是很好的代码，但是依然有很多作者的偏好，所以很多地方不过就是作者做了一些取舍，做了一些选择，不要迷失在深究为什么作者为什么这样写，反倒是你可以提出质疑，如果是我，我会怎么处理这个问题。不要被代码支配，代码只是帮助你学习的一个工具而已。 ps:我觉的我写的文章也不错，挺适合飞控学习的，哈哈，欢迎交流