大家好,又见面了,我是你们的朋友全栈君。在正式开始记录微型四旋翼飞行器设计的学习笔记之前,感觉自己很有必要先给自己一个总结,也希望能够帮到更多的朋友少走弯路(虽然不知道帮助大不大)。
去年九月下旬开始了微型四旋翼飞行器的学习与设计,在12月底的时候初步实现了稳定的遥控与飞行,后续又增加了一些常规的辅助的功能,失控保护、姿态微调等等,之后又利用OLED屏幕,设计了一个三级菜单,把各种参数的设置,飞控锁定与通讯的状态等等一些信息都整合在一起,利用相应的按键,可以很方便的查看、设置。通过一次一次的优化一些细节,飞行器的飞行效果令人满意。
在此真心要感谢喵呜实验室的开源四旋翼项目,我最初的学习标杆就是在参考喵呜实验室的小四轴。当然,也有很多朋友参考匿名,圆点博士等等,都是可以的,本人也对比参考了一部分。感谢这些团队的开源精神。
在开始之前,先吐槽!!!!!!!!!!!!!!!
8位机做多旋翼飞控!?
8位机做飞控!?这是我在设计飞行器期间听到的最多质疑。甚至很多“德高望重”的老古董老师,从头到尾把你批判一番,理由是什么8位机的PWM输出只有256宽度的计数周期,分辨率不够。。。更有甚者直接放话说8位机就是专科生玩的玩意,本科生用8位机做设计简直就是xxx。。。面对这样的言论,我只能选择呵呵一笑,老古董你可知道MWC飞控,APM飞控的主控ATmage328P也是8位的,但是这并不影响人家引领全球DIY多旋翼的热潮啊,而且谁告诉你当下的8位机就是你那个年代的8051或者8086?讲真,做四旋翼的这个过程,让我认清了很多东西。至少我们院系是这样的:喜大好功、什么东西只认准最高端的、功能只看是不是天花乱坠而不管实际的学习成本。一个老师甚至说,做四旋翼,要把DSP、FPGA、ARM、操作系统神马的全都搞上。。。但是初期学生学习的时候会遇到什么具体问题?怎么能让他们快速上手少走弯路?四旋翼学习的真正核心在哪里?很少有人真的关心这些实际问题。“你没有用STM32,那你就是低端的”,这种言论真的是受够了。。。
个人认为,不管做任何设计,芯片本身没有高低端之分,只有适用于不适用之别,根据设计需要不同(时间因素,成本因素,开发难度等等)选择最合适的芯片和方案,就是最好的。如果说只是因为别人的芯片位数不高或者不够“高大上”就以此去把别人批判一番,我觉得不是真正搞技术的人该有的心态。
对于初学者来说,尤其是像我这种渣渣,大四本身已经没有多少学习时间了,并且因为种种原因我没有实验室可以进,手边的STM32学习板是借童鞋的不好一直占为己用(穷),而且自己学习四旋翼的计划重点在于姿态与控制算法的学习,因此我必须让自己在最短的时间内设计出软硬件,并且能够掌握理论知识,那么综合考量,我自己用8位机可以节省我自己的时间,把更多的经历放在学习算法上,这样岂不是很高效?我不知道自己的这种学习安排有什么不好,就因为8位机就不高端了、简直是笑话。什么叫8位机只是专科生玩的?老古董就会带着有色眼镜看人,专科生比本科生强的,一抓一大把。私以为,只要技术强的,都是应该尊敬的,别管人家是专科还是什么,技术才是硬道理,学历真的不能说明什么。
吐槽半天,到底8位机能不能做多旋翼飞控?答案当然是可以的,在此真的感谢喵呜实验室!喵呜团队的飞行器恰好就是用8位机作为主控的,型号的STC15W4K32S4系列。我用过这个芯片做平衡车,还是很强大的。网上有一段它和ATMage328P的性能对比:现在的51早已不是当年的51,6路15位硬件PWM+2路CCP的16位硬件PWM,相当于是8路15位硬件PWM,mega328都可以直接秒掉,而mega328却正是市售MWC飞控的主控,mega328速度16MHZ,等效16MIPS,IAP15W4K61S4@28MHZ,等效25MIPS,运算速度也秒了mega328,也就是说,用51单片机做四轴绝对不成问题。
(来自:http://bbs.mydigit.cn/read.php?tid=1115916)
老古董打脸不?谁告诉你8位机的PWM计数周期只有256?高速八位机PWM不光是15位的,而且还是硬件PWM,非常好用。
不吐槽了,毕竟是负能量,说句公道话。如果是进阶的朋友,需要搞更复杂的功能,比如机器视觉啊,更复杂的算法啊之类的,傻子都知道当然还是选择ARM内核的啦。对于初学者,想学习基本算法,实现基本的飞行,不搞那些高端的玩意的盆友,相信我,这款8位机足够让你快速开发四旋翼的软件了,而且能够节省很多时间用来学习算法!根据需求不同,大家合理选择芯片,才是最好的。千万不要像我们系的老古董一样,喜大好功。
以下是经验谈!!!!!!!!
一、四旋翼的学习核心在什么地方?
这个问题我觉得是每一个想学习四旋翼的盆友都要考虑明白的,四旋翼是一个非常综合的项目,涉及到了很多专业知识,甚至于非电子专业的知识。因此我们在学习之前,必须先搞清楚我们学习的核心在什么地方?如果学习四旋翼,只是为了学习硬件编程,电路设计,配置一些寄存器,调试一下IIC通讯,无线通讯之类的,那么我觉得,这些还不足以是四旋翼学习的核心所在。我个人认为,四旋翼学习的前期,是上面说的到那些部分,需要认真对待,好好调试。但是到了后期,等这一切都完成了,真正的核心应该回归到算法上。如果说硬件电路是骨骼,那么算法就是是一个控制系统的灵魂所在。
以微型四旋翼飞行器来说,核心算法大概分为两个部分:姿态解算算法与控制算法。其中姿态解算算法是核心中的核心!它在很大程度上决定了四旋翼飞行的准确性与稳定性!试想,如果飞行器无法正确计算出自己飞倾角,那么再好的控制算法也无法使之保持稳定。
因此,有很多盆友跟我说,做四旋翼,主要就是调PID,我只能说你们太不踏实了。我参考了好多个团队代码,真正的姿态解算的核心部分大家几乎都用的是同一个IMU.C文件,其实这样也无所谓,问题的关键是,不能只是调用人家的核心算法,在调通代码的基础上,一定要深入了解这个算法是如何把姿态正确计算出来的!知其然一定要尽可能的去知其所以然,否则学到头,自己依然只是会配置个寄存器,控制外设而已,那么这样一来,好像做四旋翼与不做四旋翼并没有本质的提升,因为输出PWM,配置个中断,调试个通讯协议,开发板就能做到,还需要四旋翼干什么?
对于控制部分的算法来说,用的最广泛的就是PID控制了,在此我还是很想跟即将开始设计四旋翼的童鞋们来说,PID控制不应该只是会调试参数。我们应该尽可能的去理解自动控制原理,去理解反馈的感念,去理解为什么四旋翼上最常用的是串级PID而不是单级PID。这些内容推荐入门的盆友稍微学习一下《自动控制原理》(胡寿松)会有很多好处的。上一次的一个文章是以温度系统为例,利用Simuink来仿真对比一下不同PID的效果,为的就是能够动手感受一下不同PID不同参数下的响应特点,使学习PID控制有一个感性的认识。
(链接:http://blog.csdn.net/rick_grimes/article/details/75095315)
二、设计制作四旋翼有什么快速上手的方法?
这个问题应该也是出初学者最头疼的问题,市面上飞行器一大堆,航模级别的飞控更是一抓一大把。打着开源旗号的飞控也是很多,但是航模级别的飞控只适合玩,真正想学习的话,APM、MWC之类的真心不合适。以我个人设计方案来说,首先我的学习时间短,不允许我有很多时间去浪费,其次我的方案是想选择8位机。因此我选择了先软件,后硬件的学习计划。也就是说,我先买一套成品小四轴,主控芯片跟我的方案一样,然后再这个硬件平台上先调试自己的软件程序,等一切调好之后,再着手设计自己的硬件,这样出现问题,可以更快速的解决。试想如果从一开始就软硬件自己来,出现问题需要把软硬件都排查一遍,耽误时间会很多,也会走很多弯路。
我选择的喵呜实验室的小四轴,硬件设计很完善,前期让我可以很放心的去调试软件而不用担心硬件问题。当然,也有很多童鞋使用别的芯片例如STM32来设计的,大家也可以选择别的硬件平台。道理都是一样的。学会站在巨人的肩膀上学习!
三、新人应该从什么地方开始学习?
我想,能够来尝试四旋翼的盆友,至少都是有软硬件设计基础的,排除什么都不会的真小白,下面我就假设所有的盆友都已经有基础了,以此来谈谈我认为应该从什么地方开始动手。
四旋翼飞行器的核心前面已经说过了,是姿态算法。所以上手四旋翼的第一步,首先应该明确姿态传感器,我想大家一般都选用的是MPU6050,所以我就用它来说。首先在设计之初,至少需要利用IIC通讯,读取出6050传感器的数据,并且去学习读取出的数据如何转化成我们需要的真实数据单位。这一步我认为是最关键的,因为只有传感器的数据读取准确了,才能使后续算法的计算有一个稳定的数据来源。因此学习四旋翼的第一步,应该是搞定MPU6050!
搞定6050传感器其实是有很多技巧的,比如最重要的数据手册,必须要了解其中关键的一些部分,比如量程的选择,精度的选择,速度的配置等等。IIC通讯也是比较头疼的比个地方,尤其是在电平时间的控制上,很容易出现问题。因此需要花时间去试错。调着调着经验就有了。
四、如何高效设计四旋翼飞行器的软件程序?
这个问题其实对于任何一个系统来说都是适用的,因为有盆友问过我这个问题,在设计飞行器某一个部分的程序的时候,出现问题无法及时确定出问题所在,或者无法正确排除没有出问题的部分。所以单独把这个小问题拿出来说说,本人也是个渣渣半吊子,在这方面没什么真正有用的经验,我的一贯方法是:分模块各个击破!对,很传统的方法,但是我觉得比较适合自己。
举个栗子:比如飞行器的程序,现在需要调试2.4G无线通讯,那么我只需要先写好飞行器接收2.4G信号的程序在开发板上,然后利用我购买的飞行器的遥控器,给开发板发数据,如果开发板收不到数据但是配套的飞行器可以收到,说明自己的程序有问题啦,对照飞行器的2.4G接收部分,自己程序和人家程序不一样的地方,很有可能是出现错误的地方。这种方法挺笨的,但是我自己一直是在寝室独自学习,没设备、没老师。所以每次都是这样一块一块自己摸索,因为有可供参考的标准硬件平台,所以一个部分一个部分的来,还是很高效的!
总结
不一定有用的一些经验和吐槽,但愿能够帮助到一些朋友吧。后续继续总结,慢慢更新相关部分的学习笔记。
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/127827.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...