前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >如何做一个完全体的阿尔法狗

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

作者头像
FB客服
发布2018-02-28 16:32:39
1.5K0
发布2018-02-28 16:32:39
举报
文章被收录于专栏:FreeBuf

在去年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,来开始游戏之旅吧。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2017-07-23,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 FreeBuf 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1.材料
  • 2.构建机械结构
  • 3.固定螺丝和步进电机
  • 4.制作夹具
  • 5.电路部分
    • 文件下载:<点击文末的阅读原文查看>
    • 6.连接开关
    • 8.按钮以及限位开关的安装
    • 9.Arduino以及Python程序
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档