赞
踩
装甲板识别是RoboMaster视觉识别中比较成熟的了,到现在有很多战队开源了他们的算法。
基本上的思路都是一样的:利用装甲板灯条发光的特性将摄像头曝光值调低屏蔽环境光干扰,二值化处理图像得到只含灯条的二值图,根据装甲板灯条的几何特征来设置约束筛选灯条,灯条匹配筛选装甲板。
每年都有很多战队将他们的算法开源,善于利用他人的成果可以极大地减少自己工作量。
我17年参加比赛的时候基本上是闭门造车,一开始不知道官方已经在16年开源了一套非常好的代码。
最开始是按照车牌识别的套路来做的,自己写的代码基本上无法正确地识别装甲板。
后来折腾YOLO,终于在标记了六千多张图片训练了两天后可以识别装甲板了。识别归识别速度太慢了,那时候心情非常失落,又加上带队老师总是催进度,就弃坑学习去了。
等到学期快结束了,发现了大疆的开源代码,下下来读了读,这个真的靠谱,各个方面都想到了,甚至还有通过妙算GPIO控制LED来指示当前程序状态的代码,觉得可以做,就在考完模电后重回实验室折腾了。
换句话说那年我之前做的努力全都作废,识别装甲板、大符、小符的程序是在一个月内参考官方的(官方装甲板识别当装甲板上贴有数字就失效了)赶出来的……
RoboMaster论坛中总结的历届开源资料:
https://bbs.robomaster.com/forum.php?mod=viewthread&tid=6979&fromuid=14
RM圆桌是这届RoboMaster推出的技术分享活动,全是干货。
https://www.robomaster.com/zh-CN/resource/news
RM圆桌005 抢人头要靠自瞄
https://www.robomaster.com/zh-CN/resource/pages/1009?type=newsSub
RM圆桌008 如何打击大风车
https://www.robomaster.com/zh-CN/resource/pages/1015?type=newsSub
另外一些队伍的官方公众号也会发布一些教程,例如公众号「西交RoboMaster机器人队」里有很多干货,今年大符的识别算法我就是按照他们的教程一步步做的。
「内附代码|今年的大风车能量机关识别就是这么地so easy!」https://mp.weixin.qq.com/s/3B-iR32GX7jfVyxvNQVRXw
昨天看到一句话觉得很好:一个复杂的系统并不是全部需要从0到1,把优势的资源整合在一起才能发挥最大作用,用别人的代码或思路并不是可耻的事情(要遵守对方许可证协议),站在巨人的肩膀上才可能走的更远。
今年帮这届做视觉时看到学弟在重新造轮子从零开始写装甲识别,并且也了解到去年写装甲识别的研究生也是从零开始用zed+tx2做的装甲识别最终在赛场上也没发挥作用。
我当时听了很震惊,明明我17年都解决了啊,虽然当时没有做预测没有写好基地电控导致基地自瞄很慢、没有考虑到一些意外情况在场上摄像头歪了导致打大符全打偏了,但是视觉识别的代码为什么要从头开始呢,我还花了一个星期把用到的东西算法整理了一个pdf文档,难道大家都不care前人的经验吗?
主要参考东南大学的开源代码,他们的算法思路在readme里写的比较详细
https://github.com/SEU-SuperNova-CVRA/Robomaster2018-SEU-OpenSource/tree/master/Armor。
我这里讲一下我对算法做的一些改进并将整个流程过一遍。
在代码文件夹中的Main中有test_infantry.cpp和test_sentry.cpp,前者是步兵的程序模板,后者是哨兵的程序模板。
默认在项目文件中没有添加test_sentry.cpp,可以右键添加现存文件或者手动输入进项目文件中。这两个文件只能同时只有一个有效(即一个需要在项目文件中注释掉)。
我主要讲test_sentry.cpp,包括之后的教程都是主要用这个文件。因为test_infantry.cpp比较复杂而且其中的大符识别不需要,改起来比较麻烦,而test_sentry.cpp相对简洁,增改代码也比较方便。
在main函数里出现的三个线程中除了produce放在ImgProdCons
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。