[随笔]2019省电赛无人机题(B题)总结

  • 2019/8/7~2019/8/10在江苏赛区参加了省电子设计竞赛,这次也是省电赛和全国电赛重合的一年
  • 选择的题目是无人机题
  • 先说结果吧,直接白给了,挺遗憾的
  • 电赛结束挺久了,作为一个从飞行器设计转到计算机科学的大三学生,嵌入式和自动控制相关的东西一直作为业余爱好研究,实在占精力,转专业要好好学习,以后估计不再搞了。最后一场比赛也没取得啥成绩还是挺遗憾的, 正好替代社会实践要交总结,这里随便写点回顾总结好了

  • 想做无人机题这个想法蛮久以前就有了,当时还在做RM。一直以来做了太多控制题了,从电赛的智能窗帘、智能台灯、写字机器人,到RM的步兵车控制,再到去年电赛搞得手势识别装置,再做一个类似的东西,一来控制题通常难度不高面临的竞争压力太大,二来也没法学到什么东西,没多大意思。可能是最后一次参加电子设计类的比赛了,要做就做个难的!正好还有一个和多旋翼控制解藕相关的项目在做,于是就有了做四旋翼的念头。
  • 今年七月初开始准备电赛时统计了一下前几年的题目,根据趋势来看,传统控制题似乎在逐渐退出,取而代之的是一种人工智能题。比如去年的手势识别装置,今年的纸张检测装置似乎也是的。这些题伪装成传感器应用题,表面上看十分简单,只要把传感器调通就好了,但只这样做毫无竞争力,组委会真正想要的是让你设计一个特征,利用指定传感器检测它,并通过不断测试获取大量样本,然后用人工智能的方法去学习这个特征,这样做的队如果搞好了效果拔群,比传统方法强很多。我们去年就吃了这个亏了,印象深刻。。。。考虑到时间紧张,现在去尝试这个新题型不确定因素太多,所以更加坚定了做四旋翼题的想法。
  • 今年是ti赞助的,考虑到以前瑞萨时期限制过飞控芯片,我们需要搞一个ti传感器的飞控。最初是打算学习相关原理完全从底层写的,但是因为各种原因拖到7月放假才准备,写肯定来不及了,转而考虑用成品飞控代码改,还要自己制版仿造一个飞控,这样如果限定飞控自制也不怕啦。
  • 放假第二天,商讨后购买了匿名的tm4c版本飞控,立即开始准备。我负责飞控改编,买了和匿名同型号的tm4c123g lunchpad,开始学习ti的库函数。另一个队友G负责视觉部分,他是飞设的需要实习,于是带着openmv去西安了。还有一个队友Z,他之前也是做RM电控的,于是也在一起看飞控,队伍里只有他会制版,所以制版搞电路相关的工作也是他来搞。
  • 时间过得很快,凭借32的基础,很快就学了不少ti板子的使用方法(相关内容放在博客上了),但还是不够快,想要完全学到可以从底层写肯定来不及了,于是转而直接研究匿名的程序。
  • 不得不说匿名的代码习惯真的8行,注释太少,还有好多不知道是开发一半去掉了,还是版本变更没删的奇怪内容,看得相当费劲。不过还是基本看了大概。我是从外围的数据存储、上位机通信、任务调度开始看的,最后看到飞行控制任务、飞行数据这些,关于传感器配置什么的因为底层不太会直接没看。
  • 大概7月中旬飞控看差不多了,这时候队友G也回了,一起把飞控框架梳理了一遍。队友Z这会去苏州呆了几天,于是我和G开始搞视觉联调。
  • 先做了一个水平的色块追踪,虽然openmv帧率低点,但是因为飞机速度慢,所以表现还不错。(注意这里要调整一下openmv数据串口中断优先级到1)。做通讯的时候遇到了一些问题,因为不太会Python,所以在数据类型处理这块绕了不少弯路,好在最后也搞定了
  • 之后做了个机腹俯拍的色块追踪,对标前年跟随小车那个题。发现效果差了很多,肯定不是帧率的问题,可是pid调来调去都很晃。经过一番讨论,认定问题出在openmv的安装上,因为是直接粘在机腹的,当飞机移动时相机也会倾斜,这样色块在相机视野的位置也变了,形成了一个正反馈。找到问题后做了一个坐标变换补偿,效果就很好啦。
  • 这期间匿名的飞控烧了好几次二极管,也不知道是为什么,虽然修好了,但是影响进度影响蛮多的,最后凑钱又买了一个新飞控以求稳妥。眼看快比赛了,前几年的题来不及搞了,最后匆匆做了一个视觉巡线,没怎么调效果也就一般吧,做好的时候已经是比赛前一天晚上了。
  • 队友Z从苏州回来后就不看好飞机题了,总觉得我们准备不行,系统稳定性太差,拿不了奖,经常劝我们改做控制。我和G都是早就想搞飞机了,但是看这个情况也难免有点动摇。Z回来之后就不看飞控了,主要在搞仿制的飞控转接版(直接插lunchpad),于是让他也搞点控制题的东西备用,到时侯看题行事。
  • 在比赛前还做了一个小东西,因为听说openmv不可以现场调阈值,担心现场灯光影响识别,我拿stm32做了一个openmv阈值调试器。大概原理就是32和omv通信,获取原始阈值和图像lab信息。因为320*240的图像lab信息有300k左右,stm32f407的RAM空间不足,直接开数组就爆栈了,所以不得已只好做成ROM暂存。ROM读写速度慢,存数据的时候搞了一个双缓冲避免丢包。利用外接编码器调整阈值,显示的时候分段读出图像lab数据,按阈值判断黑白显示在lcd屏上,每次只刷新现实颜色变化的点。最后效果还是蛮好的,可惜32的spi通讯没调通,不得已用了串口dma接受,读图速度太慢,波特率50000估计要读个3到5秒。
  • 终于到了出题的日子,看了眼题,果然又没有控制题,四旋翼出了一个电力巡线。我心里其实还是蛮高兴的,这下没有借口了,好好做好四旋翼就好了!但是队友Z闷闷不乐,后来一直劝我们搞电磁炮那个题。。。我们搞电基本没搞过,真的不怎么想弄,搞得团队士气一直不高,天天都有不少负能量。
  • 总之先做题吧,因为Z没怎么看飞控和omv,基本没法参加编程工作,感觉他一直不知道要干啥,无所事事的感觉,三个人不能齐心协力感觉真的很差,我和G的压力也更大了,贼难受。
  • 比赛第一天想了想方案,可是没啥好想法。电线太细,从侧面实在不好识别,难以做成闭环控制,B杆处的180度掉头也是难点。尝试了一下开环飞,发现飞远了就很飘,可能会撞杆或者撞线,只能作罢。这一天下午飞机还炸了一次,损坏了自制的飞控板。炸鸡原因是Z焊的xt60一转二接头虚焊。。。所幸没伤到光流什么的飞控组件,到晚上才修好
  • 晚上终于商量出一个差不多的方案,一个摄像头侧拍识别杆,一个摄像头伸出去到桨护位置并且架高,这样就可以利用较大的视野,在不把omv伸到线正上方的情况下拍到电线的俯视角度。飞行流程是:自动起飞到1m1高度,前飞直到识别到杆A,稳定一下,开环前飞50cm,慢慢左平移直到识别到线,利用线位置做闭环飞到B,利用期望速度积分推测飞行距离,快到b的时候转为开环前飞以免识别到b杆底座,找到b之后稳定一下,掉头按同样的流程飞回来。拍照选用了穿越机相机小方狗,无限连拍策略,只求拍到就可以。
  • 第二天上午搭好了初始结构,用一根5mm碳管做成L形支架把openmv架了出去,试飞的时候抖动很严重,完全没法识别。只能改方案,把架高的部分去掉,但是还是抖,再次修改成两个碳杆伸出来,中间用一个木片链接,终于不抖了。
  • 搞好结构已经晚上了,赶紧开始测试挂线,效果却不理想。分析原因是因为没有架高,视野很窄,飞机稍微调节一下就会超出视野边界。没办法重新想方案实在来不及,干脆把openmv伸远一点,直接伸到线正上方。这样再测试就可以稳定挂线了,手动控制前后飞行也不会脱出。架出去的一个问题是openmv会撞杆,这样只能靠积分测算距离,在b杆前解锁脱出,还好飞行距离较近,误差不会大到撞杆
  • 接下来的难点就在于转180度了,本来想着锁死yaw轴全程平移的,但因为飞机左右不对称,这样返航时就不能闭环了,只好选择转yaw轴掉头。转yaw轴有一个问题,就是没法闭环,因为室内磁力计误差太大,yaw指向反馈不准。虽然可以在线上靠线斜率调整,但是比较危险,所以还是希望尽量不要转yaw轴。
  • 总之先写了一个原地转动的程序试验一下,结果飞机刚转了一点就开始乱飘,差点撞墙。分析了一番,应该是光流消旋的问题。匿名的光流是闭源的,所以也没法调整。最后找到了一个折衷方案,就是减小旋转角度,加大旋转速度,这样飞机转动时间短,光流失效时间也短,不会漂太多。最终的掉头方案改为:找到b杆后,前飞50cm,左转90度,前飞直到识别到b杆,再前飞70cm,左转90度,这样就接入到重复A至B的流程中了。这里还做了一个保险,转过第一个90后的平飞段会进行积分,如果飞了很远都没检测到b杆,或者飞了很近就检测到,通通认为杆识别错误,这时就完全靠积分来确定转向时机了。
  • 这时比赛时间也差不多快要结束,队友Z写完报告后表示不玩了,于是只有我和G继续奋战。
    项目二的自动悬停测试过没啥问题,因为没仔细看规则,还以为项目二可以换程序,所以单独做了一个自动起飞悬停的程序,这也为最后的白给埋下祸根。
  • 很快比赛结束,到了测评的日子。比赛场地铺了了灰白条纹,测试飞行时直接开始乱飞了。当时直接傻了,还以为程序不对,心中做好了白给的准备。最后向评委提议,要求换到白布的场地,这才恢复正常。想来应该是光流在灰白地面上失效了。
  • 换到白布地面的第一轮飞行很成功,一路飞回了A,可惜最后自动降落不成功。第二轮试飞误识别到场地边上的窗户了,没有成功完成。这一结果可以说超出了预期,应该也是我们学校表现数一数二的队伍了,评委老师也表示我们的方案很好。
  • 接下来项目二因为程序不对直接放弃了。这个非常可惜,项目三完成得还可以,就是用时比较长。
  • 出了赛场感觉还不错,虽然项目二很可惜,但是绕杆真的完成得超出预期。听说第一天20个队只完成了2个队,心里感觉还是有个交代了
  • 过了两天出成绩了,很可惜啥都没得着。因为项目一没降落所以一分都没有,项目二也没分,相当于只有一个自主编程分,这样肯定是凉凉没跑。看了看其他队,应该是飞个悬停就可以省二的,花了那么多精力做绕杆却没拿到分,又被规则坑了一波,真的是挺伤的。
  • 虽然结果不好,但是这次电赛也是一次难忘的经历了,学到了很多东西,也做到了自己满意的程度,就写到这里吧

以下是准备比赛期间的一些学习总结,飞控分析还有几篇没写,包括pid和滤波什么的,以后有空再说吧

TM4C123G学习记录(1)–时钟
TM4C123G学习记录(2)–GPIO
TM4C123G学习记录(3)–外部中断
TM4C123G学习记录(4)–关于ROM前缀函数和HWREG函数
TM4C123G学习记录(5)–PWM输出
TM4C123G学习记录(6)–UART
TM4C123G学习记录(7)–输入捕获
ANO匿名飞控分析(1)— 遥控器解码
ANO匿名飞控分析(2)— 任务调度
ANO匿名飞控分析(3)— 姿态解算原理及代码分析

你可能感兴趣的:(#,随笔,电赛,随笔)