如何做一个完全体的阿尔法狗

在去年3月份一场人机大战吸引了全世界的眼光,当镜头追随着 李世石、戴密斯甚至是跟这场比赛相关的每一个人时,一个人却尽可能地避开了所有的视线,尽可能把自己变成隐形人,低调地履行着阿尔法狗“人肉臂”的角色。这就是Aja黄,代替阿尔法狗与李世石对决的人,就是这样,对局室中包括李世石、裁判等人都会去洗手间,而Aja黄博士连续4局比赛都一直从头坐到尾。每局比赛都会超过4个小时,这段时间里他不喝水、不去洗手间,甚至没有任何表情。

正如人们所知道的,人机大战是通过谷歌云服务连接到酒店的对局室。阿尔法狗的服务器是在美国中西部,在首尔可以通过监视器看到服务器,Aja黄坐在棋盘前,摆阿尔法狗的手数,同时输入手数。而赛后有人分析称,当时坐在李世石对面的是人而非机器,是否会在无意间对其造成影响?于是我打算做一个完全自动下棋的机器人,我的机器人主要分为三部分,机械部分,电路部分以及 Python/Arduino程序部分。

该机器人可以人机互动,玩家下棋被簧片开关传感器感应,之后运行电脑中python程序,最后通过 Arduino来控制机器人手臂的运动,从而达到人机互动下棋的目的。

1.材料

2个24”acme丝杆 2个0.5“球轴承 2个24“碳钢棒 一个国际象棋棋盘(1x 14” - 1.5”x1.5”) 2个5mm x 6.35mm电机联轴器 1个5mm x 5mm 电机联轴器 2个57步进电机 一个42步进电机 2个57步进电机架 3个步进电机驱动器 1.75mm直径 FDM ABS 3D 打印机熔丝(1kg) 一个Trossen ASM-RGS-13伺服电机 1个 1/2“厚,4”宽,2英尺长的pvc棒 1个1“厚,3”宽,1英尺长的PVC棒 3个1/2“厚,1-1 / 2”宽,2英尺长的PVC棒 2x 1/2“厚,1”宽,2英尺PVC棒 2x 1/2“厚,2”宽,1英尺PVC棒 1x 1“厚,2”宽,1英尺PVC棒 100个6号1/2“长螺丝(1/8钻头) 100个6号1“长螺丝(1/8钻头) 100个6号1-1 / 2“长螺丝(1/8钻头) 100个6号4-40螺纹1/2“2.5M长六角螺丝 25个4-40螺纹1“2.5M长六角螺丝 100个4-40螺纹钢六角螺母 1个4’x 4’长胶合板(底座) 1个1x4 - 8 英尺长胶合板(机械手臂部分) 2个1.5“x3.25”x20“长木头(支座) 一个Arduino Uno 一个 Mux Sheild(Arduino) 3个面包板 1卷铜芯导线线 一块焊料 一卷绝缘胶带 一条延长线 3个限位开关 3组杜邦线 100个 4.7k欧姆电阻 100个220欧姆电阻 1个24V电源 2条高级跳线(线材规格:M TO M、20 x 6”) 2条高级跳线(线材规格:M TO M、20 x 12” ) 3包按钮(注:每包100个) 64个簧片开关(后来由于出现失误,购买100个) 一条带状电缆 1/2-10acme丝锥 台钻 钻头 Z字母钻头 六角螺丝扳手 热胶枪 车床(用于切割3个5mm acme丝杠来固定之前的三个电机联轴器) 3D打印机(打印夹具) 锯(推荐使用电动) 螺丝刀 电烙铁

2.构建机械结构

利用3个PVC棒来组成机械手臂移动的轨道,分为定义为X、Y、Z。根据图纸来安装X轨道,只要安装螺丝之间不相互抵触,那么图纸中直径为1/8螺丝安装位置也没有那么重要了。在做外X轨道之后

你就可以按照图纸制作Y,Z轨道。这样就可以保证机械手臂可以有充足的空间在里面通过。这些可以下载的图纸里面包含X、Y、Z轨道的详细参数、尺寸。按照图纸详细的制作机器人。

详细图纸下载:0、1、2、 3、4、5、6、 7、8、9

3.固定螺丝和步进电机

每个在前面的丝锥(1/2 - 10“Acme丝锥)在安装时,保证向下位移5 mm以便安装电机联轴器,在联轴器另外一端连接步进电机,当步进电机转动时候,丝锥也会转动,球轴承在X,Y轨道末端,

有助于支撑丝锥,同时保证其顺利旋转。在前面的材料清单里面可以看到57步进电机,并将其固定在X和Y轨道。至于42步进电机 ,可以使用Z字母钻头将它固定在PVC棒,然后固定在轨道。

4.制作夹具

制作夹具则需要清单里面的3D打印机,Trossen ASM-RGS-13伺服电机以及螺丝(M2、M3)

下面可以下载到 制作夹具需要的STL文件,根据上图制作夹具,最后用螺丝(M3)固定在Z轨道。

3D打印文件:1、2、3、 4、5

5.电路部分

Arduino开发板以及之前清单中MUX Shield,共有2个MCP23017芯片以及93个引脚在此项目中使用。有关电路的信息可以通过上图或者下载下面的文件来获取信息,有关Arduino开发板引脚需要连接器件:

64个簧片开关 3个步进电机驱动器(每个需要2个引脚) 1个伺服电机 3个限位开关 3个按钮 6.连接开关

文件下载:<点击文末的阅读原文查看>

6.连接开关

材料列表中的电线在棋盘的一侧布线,同时连接簧片开关组成了一个简单的连接。开关一边连接到棋盘上每个方框的底部,另外一边连接到Arduino引脚的带状电缆。在使用胶水粘黏开关玻璃外壳的时候,只能连接开关裸露在外的导线部分,这样做是为了解决电路过热问题。

7.连接步进电机驱动器

通过驱动器上注释的A +、A-、B +、B-来连接步进电机(ST-6600),步进电机的文档将显示彩色导线的连接位置,根据文档将PIL +和DIR +端连接到Arduino 引脚,PUL-和DIR-端连接到Arduino

接地端。 DC +、 DC- 端连接到24V电源正极以及接地。控制夹具的伺服电机不需要电机驱动器,它直接连接到Arduino引脚。

8.按钮以及限位开关的安装

将按钮以及限位开关各自连接到对应的位置上,其中3个限位开关可以帮助机械手臂在下完棋之后复位,如上图所示,3个按钮可以简单地放在机器人前面的面包板上。

顶部按钮是向机器人反馈这样一组信息,即对手已经走完一步棋。中间按钮用于复位,底部按钮用于恢复计数,以防人类玩家在移动棋子过程中混淆。

9.Arduino以及Python程序

这个项目中主要使用两组程序一组是Arduino,另外一组是Python,下棋过程中核心引擎以及算法主要是 Python,控制机器人的程序则在Arduino中。

Arduino代码负责检测玩家下棋中的移动棋子过程,通过计算将结果发送到Python程序中。Arduino还负责从Python程序中计算到的结果,然后在计算机输出结果之后通过步进电机进行移动来显示结果。

Python代码中存储国际象棋所需要的信息,如片段定位、判断国王以及城堡位置等。Python程序还可以利用Minimax风格的AlphaBeta算法来让计算机选择输出结果。

项目代码下载点击文末的阅读原文查看。

注:在GitHub上下载Arduino和Python代码后,请将ChessRobotControl.ino文件上传到您的Arduino Uno,一旦完成,运行Python程序PlayerVsAi.py来玩机器人下棋!

如果没有机器人也没有关系,可以将PlayerVsAi.py文件中的robot参数更改为False,然后运行PlayerVsAi.py,来开始游戏之旅吧。

原文发布于微信公众号 - FreeBuf(freebuf)

原文发表时间:2017-07-23

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏知晓程序

铲屎官们千万别点!这个小程序,有毒

而这个单纯的小程序只有一个目的,就是让你尽情地看猫,每天不看个 100 来遍都停不下来的那种。

6420
来自专栏FreeBuf

极客DIY:教你做一个简单的“太阳能”移动电源

在这篇分享中,我将向大家一步一步的展示如何手工制作一个简单的太阳能移动电源。同时因为我个人的喜好,漂亮且艺术感十足的木质外在的制作过程也会包含其中。 类似的分享...

20990
来自专栏知晓程序

举报!这里有人,在光天化日之下聚众撸猫

但并不是每个人都有机会成为「猫奴」。这时候,你需要 「吸猫君」 ,来帮你开启「云吸猫」的生活。

9420
来自专栏蓝天

Mac Pro Windows 8屏幕偏暗原因

实际使用过程中会发现,刚进入Windows时,屏幕很亮,但一会儿就暗下来了,之后怎么调节也亮不起来,调到最亮也偏暗。这说明Mac Pro本身还是可以很亮的,应当...

9620
来自专栏TensorFlow从0到N

点亮深度学习工作站

终于赶在2017年结束前,点亮了我的深度学习工作站。 ? 小核武.jpg ? ? 配置表 配件 型号 价格 数量 合计 GPU 微星 GTX 10...

40090
来自专栏智能大石头

MF前传——探索者一号简介

    MF让我们这些C#程序员能够把手伸到嵌入式行业,大大增强我们在各种项目中的竞争能力。无奈国内研究MF的人少之又少,为了加速MF技术的研究,我们团队采用少...

21690
来自专栏FD的专栏

国外整理的一套渗透测试资源合集

30730
来自专栏FreeBuf

如何制造一个可以绕过摄像头监控的“隐身面具”?

如今,摄像头已经无处不在,高清摄像结合人脸识别可以迅速锁定身份。在一些场合,这可能看起来有助于维护社会治安,制造一个安全的环境。但大多情况下,这种随时随地的监控...

52560
来自专栏FreeBuf

百足之虫死而不僵:Auto456家族木马的死灰复燃

作者 tianjiyun 就在今年上半年,456游戏大厅还是金钱的代名词。一个看起来并不起眼的游戏平台,注册用户却达2000余万,每天获利最高可达100余万。这...

23270
来自专栏编程直播室

BEC和UBEC

19750

扫码关注云+社区

领取腾讯云代金券