在正式开始记录微型四旋翼飞行器设计的学习笔记之前,感觉自己很有必要先给自己一个总结,也希望能够帮到更多的朋友少走弯路(虽然不知道帮助大不大)。去年九月下旬开始了微型四旋翼飞行器的学习与设计,在 在此真心要感谢喵呜实验室的开源四旋翼项目,我最初的学习标杆就是在参考喵呜实验室的小四轴。当然,也有很多朋友参考匿名,圆点博士等等,都是可以的,本人也对比参考了一部分。感谢这些团队的开源精神。在开始之前,先吐槽!!!!!!!!!!!!!!! 老古董打脸不?谁告诉你8位机的PWM计数周期只有256?高速八位机PWM不光是15位的,而且还是硬件PWM,非常好用。不吐槽了,毕竟是负能量,说句公道话。如果是进阶的朋友,需要搞更复杂的功能,比如机器视觉啊,更复杂的算法啊之类的,傻子都知道当然还是选择ARM内核的啦。对于初学者,想学习基本算法,实现基本的飞行,不搞那些高端的玩意的盆友,相信我,这款8位机足够让你快速开发四旋翼的软件了,而且能够节省很多时间用来学习算法!根据需求不同,大家合理选择芯片,才是最好的。千万不要像我们系的老古董一样,喜大好功。 以下是经验谈!!!!!!!! 一、四旋翼的学习核心在什么地方?这个问题我觉得是每一个想学习四旋翼的盆友都要考虑明白的,四旋翼是一个非常综合的项目,涉及到了很多专业知识,甚至于非电子专业的知识。因此我们在学习之前,必须先搞清楚我们学习的核心在什么地方?如果学习四旋翼,只是为了学习硬件编程,电路设计,配置一些寄存器,调试一下IIC通讯,无线通讯之类的,那么我觉得,这些还不足以是四旋翼学习的核心所在。我个人认为,四旋翼学习的前期,是上面说的到那些部分,需要认真对待,好好调试。但是到了后期,等这一切都完成了,真正的核心应该回归到算法上。如果说硬件电路是骨骼,那么算法就是是一个控制系统的灵魂所在。 以微型四旋翼飞行器来说,核心算法大概分为两个部分:姿态解算算法与控制算法。其中姿态解算算法是核心中的核心!它在很大程度上决定了四旋翼飞行的准确性与稳定性!试想,如果飞行器无法正确计算出自己飞倾角,那么再好的控制算法也无法使之保持稳定。 因此,有很多盆友跟我说,做四旋翼,主要就是调PID,我只能说你们太不踏实了。我参考了好多个团队代码,真正的姿态解算的核心部分大家几乎都用的是同一个IMU.C文件,其实这样也无所谓,问题的关键是,不能只是调用人家的核心算法,在调通代码的基础上,一定要深入了解这个算法是如何把姿态正确计算出来的!知其然一定要尽可能的去知其所以然,否则学到头,自己依然只是会配置个寄存器,控制外设而已,那么这样一来,好像做四旋翼与不做四旋翼并没有本质的提升,因为输出PWM,配置个中断,调试个通讯协议,开发板就能做到,还需要四旋翼干什么?对于控制部分的算法来说,用的最广泛的就是PID控制了,在此我还是很想跟即将开始设计四旋翼的童鞋们来说,PID控制不应该只是会调试参数。我们应该尽可能的去理解自动控制原理,去理解反馈的感念,去理解为什么四旋翼上最常用的是串级PID而不是单级PID。这些内容推荐入门的盆友稍微学习一下《自动控制原理》(胡寿松)会有很多好处的。上一次的一个文章是以温度系统为例,利用Simuink来仿真对比一下不同PID的效果,为的就是能够动手感受一下不同PID不同参数下的响应特点,使学习PID控制有一个感性的认识。 ]二、设计制作四旋翼有什么快速上手的方法? 这个问题应该也是出初学者最头疼的问题,市面上飞行器一大堆,航模级别的飞控更是一抓一大把。打着开源旗号的飞控也是很多,但是航模级别的飞控只适合玩,真正想学习的话, 我想,能够来尝试四旋翼的盆友,至少都是有软硬件设计基础的,排除什么都不会的真小白,下面我就假设所有的盆友都已经有基础了,以此来谈谈我认为应该从什么地方开始动手。四旋翼飞行器的核心前面已经说过了,是姿态算法。所以上手四旋翼的第一步,首先应该明确姿态传感器,我想大家一般都选用的是MPU6050,所以我就用它来说。首先在设计之初,至少需要利用IIC通讯,读取出6050传感器的数据,并且去学习读取出的数据如何转化成我们需要的真实数据单位。这一步我认为是最关键的,因为只有传感器的数据读取准确了,才能使后续算法的计算有一个稳定的数据来源。因此学习四旋翼的第一步,应该是搞定MPU6050!搞定6050传感器其实是有很多技巧的,比如最重要的数据手册,必须要了解其中关键的一些部分,比如量程的选择,精度的选择,速度的配置等等。IIC通讯也是比较头疼的比个地方,尤其是在电平时间的控制上,很容易出现问题。因此需要花时间去试错。调着调着经验就有了。 ]四、如何高效设计四旋翼飞行器的软件程序? 这个问题其实对于任何一个系统来说都是适用的,因为有盆友问过我这个问题,在设计飞行器某一个部分的程序的时候,出现问题无法及时确定出问题所在,或者无法正确排除没有出问题的部分。所以单独把这个小问题拿出来说说,本人也是个渣渣半吊子,在这方面没什么真正有用的经验,我的一贯方法是:分模块各个击破!对,很传统的方法,但是我觉得比较适合自己。举个栗子总结不一定有用的一些经验和吐槽,但愿能够帮助到一些朋友吧。后续继续总结,慢慢更新相关部分的学习笔记。
|