0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

对弈人工智能!myCobot 280开源六轴机械臂Connect 4 四子棋对弈下篇

大象机器人科技 来源:大象机器人科技 作者:大象机器人科技 2023-06-16 17:16 次阅读

前言

在上篇文章中,我们探讨了如何创造一个能够进行Connect4的对弈大脑。简单的介绍了几种对弈算法,例如极小化极大算法,Alpha-Beta剪枝算法等,最关键的是目前最流行的神经网络算法和深度学习。神经网络算法,让计算机也有一个想人类一样能够思考的大脑,设置独特的场景来进行学习下棋。在本篇文章中,我们将进一步探讨如何让机械臂来实现下棋动作,将想法给实现出来。(换句话说就是,AI机械臂下棋)

如果感兴趣欢迎观看上篇文章。

Introduction

下面的内容主要分为四个部分来进行介绍。

● 获取信息:用摄像头获取到棋盘上的信息,进行对弈


            ● 处理信息:处理获取到的信息识别出棋子的位置,通过对弈算法,计算出下一步棋子应该在哪里下


            ● 机械臂的轨迹:设计机械臂如何抓取棋子,设计放置棋子的路径


            ● 功能的整合:将上面三个功能结合在一起,实现AI机械臂下棋。

让我们一起来看看吧~

项目

获取信息

环境:python最新版的opencv,numpy

首先需要获取棋盘的信息,信息包括棋盘,棋盘上的棋子。我们用到的是OpenCV当中cv2.aruco.ArucoDetector(dictionary, parameters)

该方法用来检测Aruco二维码,从图片当中标记出Aruco的位置,并且计算出标记的位置和姿态信息。这样就能够确定整个棋盘的位置了,确定四个角的位置。

Code:代码是用cv2.aruco.ArucoDetector(dictionary, parameters)方法来确定我们棋盘的位置。

dictionary = cv2.aruco.getPredefinedDictionary(cv2.aruco.DICT_6X6_250)
        parameters = cv2.aruco.DetectorParameters()
        detector = cv2.aruco.ArucoDetector(dictionary, parameters)

        corners, ids, rejectedCandidates = detector.detectMarkers(bgr_data)
        rvec, tvec, _ = cv2.aruco.estimatePoseSingleMarkers(corners, 0.05, self.mtx, self.dist)

        if rvec is None or len(corners) != 4:
            return None

# debug
        if DEBUG:
            debug_img = bgr_data.copy()
            for i in range(rvec.shape[0]):
                cv2.drawFrameAxes(debug_img, self.mtx, self.dist, rvec[i, :, :, ], tvec[i, :, :, ],
                                  0.03)
# Draw a square around the marker.
                cv2.aruco.drawDetectedMarkers(debug_img, corners)
            cv2.imshow("debug1", debug_img)

# Sort the detected QR code corner points in the following order: top left, top right, bottom left, bottom right.
        corners = np.mean(corners, axis=2)
        corners = (np.ceil(corners)).astype(int)
        corners = corners.reshape((4, 2))
        cx, cy = (np.mean(corners[:, 0]), np.mean(corners[:, 1]))
        res: list = [None for _ in range(4)]
        for x, y in corners:
            if x < cx and y < cy:
                res[0] = (x, y)
            elif x > cx and y < cy:
                res[1] = (x, y)
            elif x < cx and y > cy:
                res[2] = (x, y)
            else:
                res[3] = (x, y)
        res = np.array(res)

## debug code
        if DEBUG:
            debug_img = bgr_data.copy()
            for p in res:
                cv2.circle(debug_img, p, 3, BGR_GREEN, -1)
            cv2.imshow("aruco", debug_img)

        return res

确定完棋盘之后,我们用不同的颜色来当棋子,这里就用两种区分度比较大的颜色,红色和黄色,并且标注出来。

设置一个逻辑,当棋面每多一枚棋子的时候,将当前棋盘的数据返回给到对弈算法,进行判断下一步棋应该如何走。

处理信息

接下来需要处理棋盘的信息。

从上边可以看到我们获取到了棋盘的数据,接下来我们需要把数据,传递给对弈算法,让对弈算法将下一步棋子的位置预测出来。

下面是处理的伪代码:

functionmodel_predict(state, available_actions):
# 将available_actions转换为numpy数组
    available_actions = np.array(available_actions)
# 对state进行扩展,以适应ONNX模型的输入要求
    state = np.expand_dims(np.expand_dims(np.array(state, dtype=np.float32), axis=0), axis=0)
# 构建ONNX模型的输入
    ort_inputs ={self.policy_net.get_inputs()[0].name: state}
# 进行模型预测,获取每个可用位置的预测值
    r_actions =self.policy_net.run(None, ort_inputs)[0][0,:]
# 根据预测值选择最优的落子位置
    state_action_values = np.array(
[r_actions[action]for action in available_actions])
    argmax_action = np.argmax(state_action_values)
    greedy_action = available_actions[argmax_action]
return greedy_action

该方法中的主要逻辑是使用ONNX模型来进行模型预测,并根据预测结果选择最优的落子位置。首先,将可用位置available_actions转换为numpy数组,并将当前游戏状态state进行扩展,以适应ONNX模型的输入要求。然后,将扩展后的state传递给ONNX模型进行预测,并将预测结果保存在r_actions变量中。接着,根据预测结果以及可用的落子位置,计算出每个可用位置的预测值,选取其中最大的一个对应的落子位置作为最优的落子位置,并将其返回。

机械臂的轨迹

大脑(对弈算法),眼睛(识别算法)都有了,现在就差一个手去执行动作。我们使用python库pymycobot来对机械臂进行控制。因为棋盘的原因,棋子只能从棋盘的上方投下,我们给每一条数列的棋个上设置一个坐标点位,就可以完成机械臂的路径规划了。因为棋面比较干净没有遮挡物,所以不用考虑过多的路径因素。

下面是机械臂运行轨迹位置的伪代码:

# 初始化定义几个坐标点
# 设定一个长度为7的列表
self.chess_table = [None for _ in range(7)]
self.chess_table[0]-[6] = [J1,J2,J3,J4,J5,J6] # 七个棋格的位置

self.angle_table = {
    "recovery": [0, 0, 0, 0, 0, 0], #初始位置
    "observe": [-2.54, 135.0, -122.95, -32.34, 2.46, -90.35],#观察位置
    "stack-hover-1": [-47.19, -37.96, -58.53, 1.05, -1.93, -1.84],#吸取棋子的位置
        }

接下来介绍一下pymycobot当中控制机械臂的一些方法:

#Sending the angle to the robotic arm.
self.send_angles(self.chess_table[n], ARM_SPEED)

#Sending the Cartesian coordinates to the robotic arm.
self.send_coords(coord_list,ARM_SPEED)

功能的整合

将功能点整合之前我们得整理它们之间的逻辑。

下棋的流程图有了接下来就是,将功能点结合在一起.

这是程序的结构文件。

├── Agent.py The logic of the robotic arm's gameplay.

├── ArmCamera.pyCamera control.

├── ArmInterface.py Robotics Arm control

├── Board.py Data structure of the chessboard and related judgments.

├── CameraDemo.py Small program for testing camera performance.

├── config.pyUtilized to define specific configuration details.

├── Detection.py Machine vision recognition.

├── dqn.ptNeural network model file, used to implement gameplay logic.

├── main.pymain program.

├── StateMachine.pyA state machine.

总结

从理论上来说的话,几乎没有人能够在赢得胜利。因为机器的算法可以预测到后面将要下在几步棋甚至更多,而对于普通人来说,一般能够预测的也就两三步棋。但是从视频上来看,AI只赢了一场比赛,输掉的那一场是因为结构因素的影响,本来该下的棋盘的位置,被迫换了一个地方。

你觉得这个项目有意思吗?我们会在后续将Connect4 这个套装进行完善后,上架在我们的网站,有兴趣的朋友可以关注我们,后续会进行更新。

你是否会尝试用机械臂来实现其他的棋艺呢?例如国际象棋,中国象棋等,不同的棋艺所使用的算法也会大大不同,欢迎大家在地下跟我们留言进行分享你们的想法。

审核编辑 黄宇

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 机器人
    +关注

    关注

    210

    文章

    27794

    浏览量

    204223
  • 算法
    +关注

    关注

    23

    文章

    4536

    浏览量

    91918
  • 人工智能
    +关注

    关注

    1787

    文章

    45952

    浏览量

    234536
  • 机械臂
    +关注

    关注

    12

    文章

    500

    浏览量

    24238
收藏 人收藏

    评论

    相关推荐

    使用myCobot 280 Jeston Nano进行物体精确识别追踪

    ,以便在实际应用中发挥作用,这个项目涉及到许多技术和算法,包括视觉识别、手眼协同和机械控制等方面。 机械的介绍 mycobot280-J
    的头像 发表于 05-24 18:20 1393次阅读
    使用<b class='flag-5'>myCobot</b> <b class='flag-5'>280</b> Jeston Nano进行物体精确识别追踪

    对弈人工智能myCobot 280开源机械Connect 4 对弈

    Introduction Hi,guys.今天我们来介绍一下人工智能下棋,我们将用机械来作为对手跟你进行下棋。 人工智能下棋的研究可以追溯到20世纪50年代。当时,计算机科学家开始探
    的头像 发表于 05-29 15:26 1186次阅读
    <b class='flag-5'>对弈</b><b class='flag-5'>人工智能</b>!<b class='flag-5'>myCobot</b> <b class='flag-5'>280</b><b class='flag-5'>开源</b><b class='flag-5'>六</b><b class='flag-5'>轴</b><b class='flag-5'>机械</b><b class='flag-5'>臂</b><b class='flag-5'>Connect</b> <b class='flag-5'>4</b> <b class='flag-5'>四</b><b class='flag-5'>子</b><b class='flag-5'>棋</b><b class='flag-5'>对弈</b>

    子棋游戏里如何实现悔棋功能啊

    基于labview的五子棋游戏,有人机对弈和双人对弈模式,双人对弈在不联网的情况下
    发表于 10-10 14:18

    怎样去设计一种人机对弈子棋程序

    子棋游戏应达到几方面的要求?怎样去设计一种人机对弈子棋程序?
    发表于 09-29 07:26

    基于LabVIEW的五子棋博弈算法

    针对目前五子棋人机对弈多数基于电脑、手机,缺少真实环境的问题,提出一种基于LabVIEW的博弈算法,并运用于真实的五子棋人机对弈。首先通过图像采集系统获取当前状态下棋盘及人机双方棋子的
    发表于 12-17 11:32 29次下载

    实现人与机器人的直接对弈_强大的对弈系统如何实现

    机器人技术是综合了计算机、控制论、结构学、信息与传感技术、仿生学及人工智能等多学科的一门高新技术。目前的人机对弈软件不直观、缺乏真正的对弈环境,而人机对弈机器人正是针对这些不足而设计的
    发表于 02-12 12:05 4566次阅读

    3个时代,3盘对弈人工智能是否能继续战胜人类?

    从人机对弈这件小事,和你聊聊人工智能的发展。
    的头像 发表于 03-30 10:19 1.2w次阅读

    对弈机器人与图像识别

    对弈机器人是河南省人工智能展览馆的明星展品之一,参与者可以体验到“人机对战”的挑战与乐趣,在往期活动中深受大小学生的欢迎。与对弈机器人的对战简单来说可以分为:图像识别信息获取分析计算控制落子
    的头像 发表于 01-13 11:28 2190次阅读

    机械免费使用,学习ROS、Python火热报名中

    延续至今。 今天我们将秉承自由共享的精神,和Arduino社区发起“百城万里公益行”myCobot 280机械漂流活动。 极客爱好者通过由大象机器人学院提供的
    发表于 03-31 15:28 1187次阅读

    myCobot机械应用于Unity机器人编程实战课

    ER myCobot 280 Pi ,采用树莓派微处理器,内置ubuntu18.04系统,无需搭配PC主控,链接外设,即可快速构建机械 编程教育、
    的头像 发表于 06-16 14:33 2491次阅读
    <b class='flag-5'>myCobot</b><b class='flag-5'>机械</b><b class='flag-5'>臂</b>应用于Unity机器人编程实战课

    MyCobot机械开箱及开发前的准备工作(一)

    MyCobot机械是一款入门级的自由度机械,目前是国产
    的头像 发表于 09-30 10:00 1374次阅读
    <b class='flag-5'>MyCobot</b><b class='flag-5'>六</b><b class='flag-5'>轴</b><b class='flag-5'>机械</b><b class='flag-5'>臂</b>开箱及开发前的准备工作(一)

    Mycobot机械各关节的运动(三)

    这一节我们开始第一个程序,就是机械各关节的运动。让我们首先打开Mycobot,然后登入一个终端,我们输入“python”进入python环境。   我们采用一边实验一边介绍MyCobot
    的头像 发表于 09-30 18:08 1198次阅读
    <b class='flag-5'>Mycobot</b><b class='flag-5'>机械</b><b class='flag-5'>臂</b>各关节的运动(三)

    开源机械myCobot 280末端执行器实用案例解析

    使用。 本文中主要介绍4款常用的机械的末端执行器。 Product myCobot 280 M5Stack
    的头像 发表于 10-16 16:28 951次阅读
    <b class='flag-5'>开源</b><b class='flag-5'>六</b><b class='flag-5'>轴</b><b class='flag-5'>机械</b><b class='flag-5'>臂</b><b class='flag-5'>myCobot</b> <b class='flag-5'>280</b>末端执行器实用案例解析

    开源获奖案例】机械控制系统

    ——来自迪文开发者论坛本期为大家推送迪文开发者论坛获奖开源案例——机械控制系统。工程师采用T5L
    的头像 发表于 12-23 08:13 821次阅读
    【<b class='flag-5'>开源</b>获奖案例】<b class='flag-5'>四</b><b class='flag-5'>轴</b><b class='flag-5'>机械</b><b class='flag-5'>臂</b>控制系统

    大象机器人开源协作机械机械接入GPT4o大模型!

    本文已经或者同济豪兄作者授权对文章进行编辑和转载 引言 随着人工智能和机器人技术的快速发展,机械在工业、医疗和服务业等领域的应用越来越广泛。通过结合大模型和多模态AI,
    的头像 发表于 07-03 14:09 498次阅读
    大象机器人<b class='flag-5'>开源</b>协作<b class='flag-5'>机械</b><b class='flag-5'>臂</b><b class='flag-5'>机械</b><b class='flag-5'>臂</b>接入GPT<b class='flag-5'>4</b>o大模型!