这些记录发了一份给宋原老师,希望能给下一届的学弟们一点方向。
这次电设,自我评价做的很不好。最后飞机坏了,但遗憾的是我们竟然不知道是什么地方坏了,在那里瞎修了一天,越修越乱。关于坠机的原因,当时也没能分析出来。
导致这种情况的原因有两种:
- 之前没修过飞机。从7.20开始搭飞机到比赛前两天,飞机一直很正常,即使到主楼外面摔了好多次也没出现过这种桨忽转忽不转的情况。
- 测试太晚了。我们直到第二天才写完摄像头和通信。第三天下午才到教二开始调摄像头。实际上,摄像头应该是比赛前就调好的,比赛时应该是开始完成题目了,而不是还在调摄像头。
为什么进度这么慢,可能由于和我们低估了比赛的难度有关。队友比赛前也没有全身心地投入进去,还经常拿起手机玩游戏。当然了,我能看到这种情况,却无力改变,这也是一种悲哀,这可能更多和我的性格有关。
现在说一下坠机的原因,我之后调空心杯小飞机的时候发现了,坠机的原因在于:
- 我们调摄像头板子和飞控板通信的时候,把 串口中断 的优先级调到了 最高
- 串口中断 打断了I2C通信
- I2C通信没写超时退出
这个锅主要在我,因为之前没把串口中断优先级调高之前,I2C从来没死过,我以为它能一直稳定下去,也就觉得没有必要增加超时退出。
这是坠机的原因,但由此引发了很多的问题。一个是电调的油门行程变了。另一个是把陀螺仪摔松了(当时焊的时候没焊好,导致焊点虚了)。还有一个是把蓝牙摔坏了。
于是我重新开机之后,通过下载器调试,发现跑着跑着I2C就死了,怀疑陀螺仪有问题,通过串口,又发不回信息。于是判断这个板子坏了。幸好我之前焊好了一个块备用的,于是把那块焊上,陀螺仪倒是不死了,但串口还是发不回信息。又折腾了好久,两块板子换来换去,才发现是蓝牙坏了。
好了,这下陀螺仪不会死了,蓝牙也能发回消息,但是电机还是时转时不转。后来又折腾了半天,换了电机和电调,才发现是电调的油门行程变了。但那时候已经最后一天下午六点了,干脆放弃了。
下面是我给宋老师发的一些总结:
中心思想:多调试、早调试!
1、早调试,能早点暴露各种问题。在比赛之前越经常修飞机,比赛时出问题修理就比较有方向性。比如电调油门行程变了,
如果之前不知道这回事,肯定是以为电机或者电调坏了,然后一通乱换,越换越乱。
2、关于四轴调试的安全性,之前在网上看各种恐怖,这也导致了我们很长一段时间不敢拿着飞机进行飞行测试,
一般是放在“烤四轴”上进行姿态环参数调节和空阔地区飞行测试,但到空阔地方飞行很不方便,不可能频繁测试。
烤四轴又只能测试roll pitch的参数,其他还有定高、偏航,都需要反复调试。
实际上比赛常用的F330机架及6寸桨,并没有那么危险,,在装好防撞圈之后,并确保子弹头正反牙正确(不然会射桨,但只要正确是不会射桨的),
托着机腿进行飞行测试是很方便的。
我们直到比赛前几天才发现这件事,浪费了很多时间。
3、关于起飞。起飞时,油门要突然加大,让飞机像有个弹簧一样,直接弹上去,否则会往一边偏。
这是由于近地的时候有地面效应,不是平衡的角度设置不对,不要改错方向
4、工欲善其事必先利其器,在调试之前,应该先做好一个方便的遥控,常见的用NRF24L01来做。
我们当时嫌还要写SPI麻烦,实际上用蓝牙调试更麻烦。在空旷地方用蓝牙调试要注意距离,一旦超过距离蓝牙断开非常危险,如果用2401来做就一般没这个情况。
5、MCU之间的通信,其实挺麻烦的,但又常常需要。如摄像头先用一个单片机处理再发给飞控。
常见的可以用I2C,一个配置成主机一个配置成从机,但配置成从机的资料很少,需要较长的时间来学习调试。
另外是用串口通信,串口要注意帧头、帧尾、丢帧处理。MCU通信最好在比赛之前就调好,否则调试这个太浪费时间了
6、飞控板建议自己设计,一者可以设计自己常用的芯片,二者可以自己做些拓展。但既然是设计为比赛服务,除了飞控功能外,还应多引出一些备用管脚。
我当时设计的飞控板,仅加了几个超声波接口,整个板子仅引出一个串口,导致后期做MCU通信时,串口既要接受命令,又要读取位置,各种冲突,如果当时多引出
一个串口,就可以省下不少时间。另外,电源5V、3V3、GND的管脚也适当引出几个,后期要加板子时非常方便,否则就只能像我们经常要拿线直接焊在板子上。
7、飞控的姿态计算方法,如果用四元数,一般有两种。一种是IMU,一种是AHRs。前者仅用到陀螺仪和加速度计,因此对yaw没有纠正,导致会自旋。后者加入磁力计的矫正,可以得到
绝对的yaw。但当磁力计干扰较大时,AHRs会导致pitch和roll解算出错。对于这个,有两个办法,一是校准磁力计,二是roll和pitch用IMU解算,yaw用AHRS解算。
我当时比较匆忙,直接既调用了AHRs又调用了IMU。但实际上二者的算法几乎是一摸一样的,只是AHRS多了磁力计,因此应该可以在一个函数里做些操作,直接把两个分开。
8、磁力计是需要校准的。每次往飞机上加的大部分东西,只要能通电,都会对磁力计产生或大或小的影响,尤其是BB响,那东西两个蜂鸣器摆在那儿,整个磁场都歪了。
因此如果要用BB响,尽量每次都放在同一个位置。因此每次往飞机上增加东西,都要校准一下磁力计。校准的效果,以将飞机静止摆放,yaw不会偏移为效果好。
另外,每次到一个新的场地,也应该校准一下。109进门地上有一道长方形的铁,对磁场影响特别大。靠近那个地方和其他地方磁场差别较大。这个应注意一下,否则会
怀疑人生。磁力计的校准,可以用软件校准,这种方法需要采集较多的点,运算量比较大,一般是在PC上运行。但比赛的时候电脑不能带进场地,但测试场地很可能需要校准
磁力计,因此最好在单片机里写个简易校准的程序
9、刚开始学习飞控算法时,可以先用一个空心杯电机做个小飞机来调。大飞机的危险性、及测试的繁琐程度决定其测试频率肯定比不上小飞机的。
10、大飞机调试时建议用烤四轴或者万向云台(好像就是监控器的平台?)
11、电调的油门是需要校准的。但好像有的电调受到撞击后油门行程会变。如果突然有个电机变得不怎么爱转,算法上有没有改变,那么很可能是油门行程变了,不是
电调或者电机坏了。
12、超声波、飞控板(其实是陀螺仪等传感器)需要减震,可以直接垫上软泡沫,然后用热熔胶粘上。
13、调试时,最好一个人拿手柄控制飞机的急停、起降,另一个人用蓝牙增减参数,一个人调既要注意参数又要注意防止飞机跑飞,会累死的。