赞
踩
目录
本文介绍了一种中国扑克自玩机器人,它是一种集成系 统,使TM5-900机械臂能够独立玩四人牌中国扑克。该 机器人使用自定义吸盘机制来捡牌和打牌。利用基于 YOLOv5的目标检测模型识别发给机器人的花色和13张 牌的牌号。开发了一种贪心算法,将13张牌分成3、5、5 张牌的最优手牌进行出牌。实验表明,机器人可以成功 地获得这些牌,利用计算机视觉识别这些牌,利用算法 战略性地选择出牌手,并在游戏中物理地出选中的牌。 该系统展示了机械设计、计算机视觉、算法设计和机器 人控制的有效集成,以完成独立出牌的复杂任务。
中国扑克是一种深受台湾老年人喜爱的纸牌游戏,一般 需要4个人才能玩。不过,和麻将类似,经常会遇到找不 到第四个玩家的情况,导致玩不下去。为了解决这个问 题,我们提出了一个机器人,可以使用吸盘机制自动玩 中国扑克,同时使用YOLOv5进行对象检测和分类。 YOLOv5[1]是一个经典的目标检测模型。它的架构允许 用输入的RGB图像实现单阶段的目标检测,这使得它比 两阶段的模型快得多。这导致了更高效的实际应用。此 外,我们自己设计的贪心算法是为了选择要出的牌。这 使得机器人可以执行从发牌到出牌的所有动作。为了更 好地理解中国扑克,有必要对游戏过程进行解释。四名 牌手每人发十三张牌,他们分成三、五、五堆牌,并保 持面朝下。牌的顺序从小到大,先按牌的类型进行比较, 再按数值[2]进行比较。最高的手牌是同花(straight flush), 即5张同花 色的牌不分先后。接下来是四张同牌,也就是四张大小 相同的牌加上一张其他牌。第三大的是满屋牌(full house),包含三张一阶牌和两张另一阶牌。接下来是同 花(flush),即5张花色相同但没有先后顺序的牌。排名第 五的是直,即五张花色顺序相同但花色不同的牌。然后 一种有三张,包含三张点数相同的牌和两张其他牌。第 二低的手牌是两对牌,其中有两张牌的点数相同,另外 两张牌的点数不同但匹配,还有一张额外的牌。最后, 可能的最低手牌是1对,其中包含2张牌的点数相同,以 及3张其他的非匹配牌。这个顺序决定了在中国扑克中比 较手牌时,哪位玩家获胜。一旦所有玩家都决定了他们 出的牌,他们就会公开牌。然后比较两个人每一手牌的 大小。每对玩家比较自己的牌,如果玩家的牌型比对手 大,就得1分,如果牌型比对手小,就得1分。如果一名 玩家的三堆牌都比对手的大,则在比较过程中获得的分 数将乘以2。这项工作通过展示一个涉及复杂感知和决策 的应用程序,为游戏机器人和人机交互做出了贡献。这 些技术可以推广到未来的辅助智能体或游戏系统。
近年来,一些研究集中在设计计算机程序或机器人来玩 扑克以及棋盘游戏。由DeepMind开发的AlphaGo就是一 个突出的例子,它使用人工智能(AI)技术,特别是深度 学习和神经网络来玩桌游[3]。2016年,它在一场五局对 弈中击败了世界围棋冠军李世石,获得了国际关注。在 [4]中,为纸牌游戏Sueca引入了一名社交机器人玩家,用 完美的信息蒙特卡洛算法应对隐藏信息游戏中的挑战。 通过FAtiMA框架结合情绪智力,机器人在用户研究中达 到了60%的胜率,培养了与人类伙伴相似的信任水平。 对于机器人来说,计算机视觉技术在理解和解释来自世 界的视觉信息方面发挥着至关重要的作用。YOLOv5用 于各种领域的机器人对象检测。[5]针对机器人目标检测中的挑战,提出了一 种基于改进YOLOv5的轻量级算法。在YOLOv5中引入 C3Ghost, GhostConv, DWConv和coordination Attention模 块,优化了特征提取,加快了检测速度,提高了准确性。 文献[6]提出了一种基于深度学习的游戏图像AIMBOT, 利用YOLOv5模型进行快速准确的检测。基于AI视觉的 自瞄准系统在aibot游戏平台上的跟踪和射击测试中表现 出色,与竞争对手相比展现了优越的性能。此外,在[7] 中研究了用于玩扑克的策略,其中一个名为Loki的扑克 程序通过有选择地采样对手纸牌和模拟游戏来采用隐式 学习,同时还包括涉及对手观察和动态玩法适应的显式 学习。
整体框架如图1所示。具体来说,3名人类玩家将以设计 的get-card位置向机器人手臂发13张扑克牌。之后,机 器手臂将进入get-card过程,通过我们设计的吸牌过程, 将设计好的get-card位置的13张牌放入卡架上。13张卡 片都放在卡架上后,机器手臂就会移动到拍照位置。这 个动作是试图将卡片图像传送到计算机上。接下来,计 算机将做对象检测模块,通过YOLOv5获取13张牌的实 际花色和牌号。如果检测没有得到这13张牌的信息,机 械臂就会回去再次获取图像。在得到正确的牌的信息后, 计算机将进入算法模块,找到最佳的一副牌。目标检测 模块和算法模块的结果会显示在电脑上进行复核。最后, 机器人手臂将进行出牌过程,按顺序出牌,完成整轮中 国扑克游戏。在下一节中,将对每个模块进行更详细的 阐述。
硬件设计我们需要设计三种硬件。第一个是get-card位 置上的卡架。我们只是用一个适合一张卡片大小的盒子。 通过使用这个,当机器人手臂吸了不止一张牌,并试图 摆脱其他牌时,其他牌就会停留在一个固定的药水中, 因为位置和最后一张一样,所以很容易拿到第二张牌。 第二张是让机器手臂放扑克牌的牌架。该卡架的CAD设 计如图2所示。我们设计了一些斜面和槽,以确保卡片 在一个稳定的位置。并且有一个小板来挡住花色和号码 的下摆牌。原因是我们想要确保
照片不会得到这些信息来混淆YOLOv5对象检测。我们 设计的最后一个硬件是sucker mechanism。吸盘机构如 图3所示,我们用一个吸盘球来产生吸力,用吸盘来触 碰扑克牌。在这个设计中,当机械臂的夹持器握牌时, 它会挤压吸球,然后如果吸球碰牌,夹持器就会释放吸 球,使球内产生一些负压。由于吸球不会漏气,而且扑 克牌的重量也很轻,所以它的吸力足够吸一张牌。因此, 在做了上面的过程后,扑克牌就会被紧紧吸进去。对于 释放部分,夹持器会握紧并释放一次,将卡片从吸盘中 喷射出来。
从相机到机器人底座的转换为了精确地吸牌,我们必 须将相机框中给定点的坐标转换为机器人的位置的末端执行器。这个过程称为帧变换,它推导出的变换 矩阵基Tcamera如下[8]。设C =[cx ,cy ,1] T是一个三维向量,其 中cx和cy分别表示卡片在相机帧坐标中的x轴和y轴。B =[bx , by ,1] T为三维向量,其中bx和by分别表示卡片在基框坐标中 的x轴和y轴。首先,我们要计算B和C向量的关系。
我们将确定三个不同的点b1=[b1x ,b1y ,1], T b2 = [b2x,b2y,1]T,b3 = [b3x,b3y,1]T在机器人基框坐标从工 作空间。然后,我们将机器人手臂移动到预定义位置,为 工作空间拍照。之后,我们可以得到b1 ,b2 ,b3点在相机帧坐 标中的像素值,分别表示为c1=[c1x ,c1y ,1] T,c2 = [c2x,c2y,1] T,c3 = [c3x,c3y,1]T。由于来自相机和机器人基坐标系的单 位不同,我们必须计算r, r是像素与mm的比值,然后,我们 取相机帧坐标系和机器人基坐标系三个不同的点,通过对 相机帧矩阵c求逆很容易得到变换矩阵,(1)可以重写为:
在定义了变换矩阵之后,我们可以使用它来控制末端执行 器和工作空间的关系,使用Python向机械臂发出移动命令以 获得所需的点。
取卡过程是机械臂的一系列过程。首先,抓手会挤压吸球 准备吸扑克卡。然后,机器人手臂会走到预定义的get-card位置, 触摸最上面的卡片。之后,gripper会释放吸牌球来吸牌。而 且机械臂会晃动抓手,确保只吸一张卡。最后,机械臂将卡 片吸到卡架上并握把卡片释放。在上面的机械臂的动作中, 我们都是通过反复试验,通过定义的中间位置来让轨迹平滑。
移动到照片位置是一个拍摄13张扑克牌图像的过程。在执行 13次取卡过程后,机器人将获得它需要获得的所有卡。然后, 机器人手臂会做这个移动到照片位置的过程。为了确保一幅 图像将获得所有卡片的信息,并且图像中的卡片将是完美的 矩形,机器人手臂的相机在基础框架上的位置和方向被定义 为(x,y,z,α,β,γ) =(100,610,250,125,0,45)。
移动到照片位置是一个拍摄13张扑克牌图像的过程。在执行 13次取卡过程后,机器人将获得它需要获得的所有卡。然后, 机器人手臂会做这个移动到照片位置的过程。为了确保一幅 图像将获得所有卡片的信息,并且图像中的卡片将是完美的 矩形,机器人手臂的相机在基础框架上的位置和方向被定义 为(x,y,z,α,β,γ) =(100,610,250,125,0,45)。
机器人拍完所有13张牌的照片后,我们需要确定每张牌的 编号和花色。为了处理这种情况,我们通过引入来获取物 体检测技术预测卡片的深度学习模型。对于数据集,我们从roboflo w[9]下载了扑克牌数据集,并收集了大约14000张图像 用于训练,4000张图像用于验证,4000张图像用于测试, 总共有52类代表52种扑克牌。所有的图像都包含了一张 到几张具有不同类型背景的扑克牌,训练和验证图像包 含了每个类别的类和边界框坐标。我们选择YOLOv5作 为最终的训练模型,将图像大小调整为416×416,将 batch size设置为16,从头开始训练120个epoch,在GTX 1080 GPU上大约需要一天的时间。作为训练结果,图4 显示,该模型在训练和验证数据集上都表现良好,损失 如此之低(约0.01),精度如此之高(接近0.99)。此外,从 图5所示的验证数据集的准确率-召回率曲线来看,模型 以0.5的置信度达到了0.989的mAP。我们还用我们自己 的手机拍摄的扑克牌图像进行了测试,证实了该模型可 以在不同背景和不同角度的扑克牌中输出正确的类和边 界框位置,从而表明该模型足够鲁棒,适用于我们的任 务-检测由机器人手臂拍摄的图像。然后我们将训练好 的模型引入到我们的系统中,让机器人对自己拍摄的照 片进行推理。一个检测结果示例如图6所示,包括输出 边框和牌套和牌号。这里我们设置置信度为0.1,非极 大值抑制的阈值为0.45。因为两个卡架包含13张卡,所 以我们编写额外的代码来检查检测是否成功检测到所有 卡。首先,由于同一张牌上可能有2个或更多不同类别 的边界框,我们在这种情况下选择置信度更高的那个。 其次,如果输出包含两个相同的类别但边界框位置不同, 我们也选择置信度更高的那个。第三,我们用范围来过 滤卡的边界框输出边界框y坐标的中心,这是用来过滤掉不在卡牌实 际号码和花色位置上的边界框。在完成以上步骤后, 如果输出包含的总数仍然不等于13类,我们让机器人 手臂回到照片位置重新拍摄一张照片,然后再做上面 提到的三个步骤。最后,我们就可以得到准确的卡片 信息了。
将机器人拥有的13张牌分成3手的算法遵循从最大到最 小的贪心算法[10],伪代码如算法1所示。在这个算法 中考虑了一些因素;例如,如果卡片是由一个直的、四 个K和两对组成,该算法会将较小的一对分开,用于四 对一类中的任意一张卡片;再比如,如果牌由六张同花 色的牌、一张满牌和一对牌组成,同花顺会取该花色 中最大的牌,并将该花色中的四张牌从小到大附加在 一起;再比如,如果牌由4对和1对同花顺组成,算法会 取这4对牌中最大的和最小的两对牌,以使最后3张牌 最大;再举个例子,如果牌是由三张值相同的牌和十张 空牌组成的,那么同类型的三张牌将在与它一起的十 张牌中有两张最小的牌,而高牌将由剩余的八张牌中 的一张最大的牌和四张最小的牌组成;最少但不是最后 一张,再举个例子,如果牌是由3张K、3张Q、3张J和2 对组合而成,那么算法就不会打破J来为满屋的3张K和 3张Q服务,以确保最后3张牌同样大。此外,在运行算法之前,我们还检查了给定输入 的完整性,包括无效的牌数、无效的花色或牌的值和重复的 牌,以确保输出是正确的。而且我们还记录了每一张牌的位 置,一旦手牌确定,我们就可以根据给定的位置使用我们的 吸盘来吸牌。
实验设置如图7所示,包括机器人手臂、手眼相机模块、吸盘 机构、卡片架和工作空间。 我们使用的是TM5-900机械臂,其有效载荷为4公斤,可达900 毫米,典型速度为1.4(m/s),可重复性为0.05毫米(可重复精度) [11]。机械臂的工作空间和速度都符合我们的实验。 Eye in Hand Camera模块在TM5-900机械臂上,有一个Eye in Hand Camera模块。我们使用这个摄像头来获取扑克牌的“图 像”,然后通过目标检测来获取扑克牌的信息。 吸盘机制我们使用一个吸盘球和一个吸盘来构建吸盘。吸盘 可以帮助我们拿到扑克牌,打出扑克牌。 牌架系统中有两种牌架。第一种是在get-card位置上的牌架。 它的作用是当机械臂吸一张牌,让其他牌为a
第二种机架是为放置机器人手臂得到的卡片 而设计的,它是由3D打印制成的。 工作空间:一个机器手臂可以伸到的卡牌可以打出的空间。 该空间分为三个部分,包括get-card位置、put-card位置、 play-card位置。
我们设计的机器人能够有效地完成一系列动作,包括取牌、 放置在牌架上、识别牌的数量和花色、选择牌的类型以及 出牌。为了更有效地展示打牌过程,我们还生成了一个展 示机器人[12]所选牌的窗口。如图8所示,机器人选择直牌、 两对牌和高牌进行出牌。完成以上所有过程后,中国扑克 自玩机器人的出牌结果如图9所示,与图8所示相同。由于 缺乏一个具体的指标来评估组装纸牌的算法组合的最优性, 确定算法是否达到了最佳解决方案是具有挑战性的。然而, 对图像的视觉检查表明,当与机械臂集成时,该算法能够 成功地组装卡片的形成。
在本文中,我们提出了一个机器人系统,称为中国扑克自 玩机器人。该机器人能够自己玩纸牌游戏。有了吸盘机制, 机器人可以从初始的牌堆中吸牌并放到牌架上,或者打出 牌架上的牌。借助YOLOv5对象检测模型,机器人只需简 单地给卡架拍照,就能得到正确的卡牌信息。通过分手算 法,机器人可以确定是哪一个要出的牌。实验结果表明,该机器人能够获得所需的牌序, 并能顺利进行中国扑克纸牌游戏。对于未来的工作,我们 可以进一步在开始的任意位置发牌,并改进我们的play card算法而不是greedy算法,使系统更具鲁棒性。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。