所有分类
主题 主题
平台 平台
我的工作台
userHead
注册时间 [[userInfo.create_time]]
创造力 [[userInfo.creativity]]
[[userInfo.remark]]
[[d.project_title]]
articleThumb
[[d.material_name]]
timelineThumb
进入工作台
折叠
所有分类 我的工作台
展开

接骨头的哈士奇

lastbullet lastbullet 2020-03-26 11:19:39

        收到第二轮奖品哈士奇已经有一段时间了,期间各种捣鼓,确实是一个非常有趣的产品。最近一段时间附近的小狗经常跑来我家门口圈地盘(撒尿拉翔),跟它主人反映多次,它还是隔三差五的来,本来打算用二哈配合舵机和水弹波箱做个炮台来好好教育一下它,无奈3D打印机和常用工具都不在身边,只能暂时放它一马了。随着活动第三轮的截止日期快要到来,重度懒癌患者也必须行动起来了,于是有了下面这个小作品。

        二哈有一颗K210的强悍CPU,QVGA分辨率下有60FPS的识别速度,我想它要是玩反应类的小游戏应该挺厉害吧,现在让我们开始教狗玩游戏。

材料清单 材料清单
1x
Huskylens
1x
beetle主控
4x
杜邦线
1x
Micro USB公头对USB A公头线缆
步骤1 步骤1
首先要先给狗子把游戏做好
projectImage

        游戏比较简单,这里就不详细说了,大家可以下载附件自己看。操作方式只需要用到键盘上的左右方向键,看到骨头落下就控制狗子去接就好了。最开始因为拿不准二哈的实力,所以游戏先做得简单一些,骨头下落速度不要太快,画面中一次只落下一块骨头就好。

projectImage

        游戏做好我们先自己试一试。

步骤2 步骤2
让Huskylens看见游戏画面并识别其中的狗子和骨头

        Huskylens目前版本的固件中内置了6种识别算法,结合我们的应用场景,我最终选择了颜色识别算法。

projectImage
步骤3 步骤3
让Huskylens控制键盘
projectImage

        在上一步我们已经想到了让Huskylens看到屏幕游戏画面的方案,接下来需要解决的问题就是如何让Huskylens操作键盘(现实中要是把键盘给二哈,估计下场只有一个)。

projectImage

        我们当然可以用舵机来模拟狗爪子按键盘,不过那样做太麻烦了,而且我担心它按得不够快。更好的办法是用一块MEGA32U4芯片来模拟键盘,所以这里就用到了我最喜欢的DF硬件之一,beetle主控。别看它小,串口,I2C一个不少,用它做Huskylens的键盘最好不过了,连接方式如下图。beetle本身没有杜邦插针,所以需要焊接一下,如果有大的Leonardo板就更好连接了。如此一来,我们就可以利用Arduino的Keyboard库来模拟键盘输入了。

projectImage
projectImage

        请无视乐高小车,跟本项目没什么关系,纯粹是因为之前用扎带固定Husykens不好拆,所以就将就用小车做支架了。

步骤4 步骤4
开玩

        现在我们的Huskylens能看见游戏画面也有爪子操作键盘了,接下来就让它来玩游戏吧。逻辑比较简单,反复请求Huskylens进行识别,如果请求成功,从识别结果获取block类型的数据的xCenter,根据result的ID来将xCenter分别赋值给变量husky_x和bone_x。如果你学习的时候先学习狗子再学习骨头,则狗子的ID为1,骨头为2。之后比较husky_x和bone_x的大小,如果husky_x大,意味着狗子在骨头右边,那么就要按下键盘左方向键,如果bone_x大则意味着狗子在骨头左边,就要按下键盘右方向键。完整代码请参考附件sketch_huskylens_play_game.ino。

projectImage
步骤5 步骤5
来看一下Huskylens玩得怎么样吧
步骤6 步骤6
总结

        从视频可以看到,得益于Huskylens强劲的处理能力,从图像识别到键盘控制之间的延迟很小,这样的简单游戏完全难不倒它。后面我会试试加大游戏难度再看看它表现如何,不过由于颜色识别功能在图像中识别到多个同样颜色对象时只会标示一个对象,所以如果画面中同时落下n个骨头它就懵逼了。最后期待DF的工程师们后续带来更加有趣的功能,最好也能开放Huskylens使用玩家自己训练的神经网络,释放二哈的更多潜能。

Makelog作者原创文章,未经授权禁止转载。
2
6
评论
[[c.user_name]] [[c.create_time]]
[[c.parent_comment.count]]
|
[[c.comment_content]]