你好,游客 登录
背景:
阅读新闻

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

[日期:2017-07-23] 来源: 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个1×4 – 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,来开始游戏之旅吧。

收藏 推荐 打印 | 录入:admin | 阅读:
相关新闻      
本文评论   查看全部评论 (0)
表情: 表情 姓名: 字数
点评:
       
评论声明
  • 尊重网上道德,遵守中华人民共和国的各项有关法律法规
  • 承担一切因您的行为而直接或间接导致的民事或刑事法律责任
  • 本站管理人员有权保留或删除其管辖留言中的任意内容
  • 本站有权在网站内转载或引用您的评论
  • 参与本评论即表明您已经阅读并接受上述条款