下棋的机械臂会打败你!

它使用来自免费资源的 3D 打印机器人手臂和我的代码来识别人类的动作并控制手臂

项目介绍

我想造一个可以下棋并打败我的国际象棋机器人。我以前 使用商业套件 (AL5D) 制作了 $,但它非常昂贵。因此,我决定3D打印一个机器人,并为它重写代码。

(我随后制作了 $ SCARA 版本 $ )。

它的工作原理如下:

人类,扮演白色,采取行动。这是由视觉识别系统检测到的。然后机器人思考,然后移动。

等等……

也许这个机器人最新颖的东西是移动识别的代码。

因为人类的动作是由视觉系统识别的,所以不需要特殊的棋盘硬件(如簧片开关或其他东西)。

USB 或 IP 摄像头直接安装在棋盘上方。

大多数代码在Raspberry Pi上运行,Arduino代码用于逆向运动学和步进电机控制。

该代码还支持其他 Linux 或 Windows 作为 Raspberry Pi 的替代品。

硬件构建

机器人的 3D 打印机文件可免费获得,如“其他贡献者”下的链接所示。Tobler机械臂经过改装,增加了更长的机械臂组件和迷你夹持器。Tobler对硬件、Arduino软件和机器人组装进行了很好的描述。

Tobler 还提到了一个社区,那里有一些很棒的图表(链接到此处的“原理图”下)——但请注意,硬件构建是针对带有皮带传动的略有不同的机械臂。

因此,我们有一个Raspberry Pi通过打印机电缆连接到Arduino。Arduino 上有一个 Ramps 1.4 板,通过 A4988 电机驱动板驱动电机。

步进电机具有非常高的精度和可重复性。

作为来自 Raspberry Pi、其他 Linux 或 Windows 的 USB 连接的替代方案,该代码支持使用 HC-05 的蓝牙(而不是 BLE)。

移动机器人的软件

所有 Raspberry Pi 代码都是用 Python 3 编写的。

因此,我们有了可以移动棋子、拿走棋子、城堡、支持传递等的代码。

国际象棋引擎是 Stockfish – 它可以击败任何人!“Stockfish是世界上最强大的国际象棋引擎之一。它也比人类最好的国际象棋特级大师要强大得多。

我使用 chessfortherapy.co.uk 的一些代码来验证人类的动作并与 Stockfish 进行交互。我用于识别人类移动和移动机械臂的代码与此接口。

在Arduino上,使用I $ nverse kinematics c $ ode来正确移动各种电机,以便可以移动棋子。代码可从 Tobler 获得。

识别人类动作的软件

玩家移动后,相机会拍照。代码对此进行裁剪和旋转,使棋盘完全适合后续图像。棋盘方块需要看起来方正!图像中可能会出现失真,因为电路板的边缘比电路板的中心离相机更远。但是,相机距离足够远,因此在代码裁剪图像后,这种失真并不明显。因为机器人知道计算机移动后所有部分的位置,所以在人类移动后所要做的就是让代码能够区分以下三种情况:

  1. 一个空的正方形
  2. 任何种类的黑色碎片
  3. 任何种类的白色碎片

这涵盖了所有情况,包括铸造和通行。

机器人会检查人类的动作是否正确,如果不正确,就会通知他们!唯一没有涵盖的情况是人类玩家将棋子提升为非女王。然后,玩家必须告诉机器人推广的棋子是什么。

我们现在可以用棋盘方块来考虑图像。

在最初的棋盘设置中,我们知道所有白色和黑色棋子的位置以及空方块的位置。

空方块的颜色变化比占用方块少得多。我们计算每个正方形的三种RGB颜色中每一种在其所有像素(靠近正方形边界的像素除外)上的标准偏差。任何空方格的最大标准差都远小于任何占用方格的最小标准差,这使我们能够在随后的玩家移动后确定哪些方格是空的。

在确定了空方块与占用方块的阈值之后,我们现在需要确定占用方块的块颜色:

在初始板上,我们计算每个白色方块,对于 R、G、B 中的每一个,其像素的平均值(平均值)值(靠近正方形边界的像素除外)。对于任何白色方块,这些均值的最小值大于任何黑色方块中均值的最大值,因此我们可以确定占用方块的棋子颜色。如前所述,这就是我们需要做的,以确定人类玩家的动作是什么。

其他注意事项

如果棋盘的颜色与棋子的颜色相去甚远,则算法效果最佳!在我的机器人中,棋子是灰白色和哑光黑色的,棋盘是用彩色打印机在薄卡上手工制作的。从视频中可以看出。

棋盘应光线充足且光线均匀,棋子的阴影最小。光线不应从电路板或棋子反射回相机。需要一张坚固的桌子。

我的代码包含用于校准相机和机器人的例程。

用于 3D 打印国际象棋机器人的 Raspberry Pi 代码

GitHub – rpd123/chess-robot: 3D printed chess robot, code for Raspberry Pi or Windows

可下载文件

社区机械臂

从 https://github.com/20sffactory/community_robot_arm 获取指南

Similar Posts

Leave a Reply