页面标题
GitHub Gitee

关于去年嵌赛/华为杯的二三事(上)

前言

有在线下认识笔者的朋友们应该知道,笔者去年参加了全国大学生嵌入式芯片与系统设计竞赛的应用赛道(下称嵌赛)以及全国大学生物联网设计竞赛(下称华为杯),
这期间和队友们一块用海思的视觉套件和一台六轴机械臂搞了台象棋机器人。
嵌赛只拿到了省二,而华为杯则拿到了国三。
毕竟是自己大学期间第一次参加这种电子设计类的科创竞赛,加上今天翻聊天记录的时候突然看见这期间的内容,就想把这些事拿出来讲一讲。

1. 开始

故事的起因要追溯到去年3月份了,我联系了两位实验室的朋友(后来还有一位其他组的朋友),打算一块做点东西参加比赛,当时大伙商议的结果就是象棋机器人:
模仿市面上“元萝卜”那种下棋的机器人,通过视觉识别感知棋盘上各个旗子的方位,然后通过机械臂抓取棋子。
当时的我们谁都没想到,后来,这台象棋机器人成为了打开潘多拉魔盒的钥匙。

要说当时的笔者也实在是勇,自己在之前完全没接触过视觉识别的相关知识,事实上,当时的笔者连OpenCV是什么都不知道。
自己在接手之前虽然也买过海思的音视频开发板(当时也有为嵌赛做准备的想法了),可是在半吊子的Linux水平的情况下,
实际上也就仅仅是跑过官方例程的水平。
————就是在这样的情况下,笔者还是接手了视觉识别的工作,而且,用的还是海思的视觉套件(润和Taurus套件,主控是Hi3516DV300)。
其结果就是,从移植OpenCV,霍夫圆识别,再到颜色通道和掩膜,然后是Makefile,海思的IVE、SVP模块,如何把OpenCV的Mat反向转成海思的IVE图像格式,
这期间,几乎每一步都是一个坎————好在套件中的开发环境还有带注释的例程拿来做参考,
否则只会更加雪上加霜。当时需要新接触的东西很多,不过总体也还好。
然而,那时候的我们还不知道后面会有什么麻烦等着我们。

2. 困境

然后,到了六月份,嵌赛初赛的Deadline就要到来了,笔者开始整Resnet-18的图像分类模型和海思的NNIE模块,
队友在做机械臂的控制和棋盘的调参(用的是Hi3861+PCA9685扩展PWM的控制形式,用了一个六轴的机械臂加上气泵)。

队友本来希望能在机械臂上放置一个颜色标定位,通过视觉上检测标定位来做一个简单的闭环控制————很可惜做不到,因为OpenCV是跑在CPU上的,
可Hi3516的CPU是由两个主频不到1Ghz的Cortex-A7核构成,检测速度完全达不到需求,
当时凭笔者的水平还没法做Yolo之类的实时检测(那样可以用海思的NNIE模块,速度会好不少,不过后来测试其YoloV3速度也仅能达到约3帧/秒)
————结果就是,只能锁死棋盘与机械臂的相对位置,通过人工调整机械臂参数来把棋子的方位写死。
可这些还仅仅是灾难的开始。
队友选择用卡钳将机械臂固定在桌面————然而卡钳本身还有一个旋转轴,而且没法锁死。机械臂的舵机质量也一般,在移动到某些区域时,机械臂就会严重发抖
————后来,队友把其中三个舵机给换成了20kg级的舵机,抖动减弱了不少但仍然存在。

视觉识别的问题也同样不小,因为采用了OpenCV检测圆和颜色+Resnet-18棋子图像分类的复合方案,其中OpenCV的运行时间实在过长,导致其处理一整张图片总计需要约15-20秒,
而模型分类因为采用了二值化的图片数据集,再加上颜色识别的原因,这两个问题受光线影响严重。
如果人工补光的话,角度控制的不对还有棋盘反光的问题......

这张照片的识别确实是正确的,但是实际使用时这种良好的光线环境并不多见

之后,各模块的联动,还有与服务器的远程连接,FEN棋谱格式的转换,再到无尽的机械臂调参......
这期间,我们每个人,几乎都筋疲力尽。
(未完待续)

后半部分有空再写吧
另外,下一篇文章打算简单讲讲在Hi3519DV500上移植IMX335摄像头驱动的事,敬请期待......

posted @ 2025-03-06 18:17  Wintoki  阅读(227)  评论(0)    收藏  举报