Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >对弈人工智能!myCobot 280开源六轴机械臂Connect 4 四子棋对弈下篇

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

原创
作者头像
大象机器人
发布于 2023-06-16 10:07:43
发布于 2023-06-16 10:07:43
48500
代码可运行
举报
文章被收录于专栏:移动机器人移动机器人
运行总次数:0
代码可运行

前言

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

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

Introduction

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
● 获取信息:用摄像头获取到棋盘上的信息,进行对弈


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


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


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

让我们一起来看看吧~

项目

获取信息

环境:python最新版的opencv,numpy

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

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

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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

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

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

处理信息

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

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

下面是处理的伪代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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来对机械臂进行控制。因为棋盘的原因,棋子只能从棋盘的上方投下,我们给每一条数列的棋个上设置一个坐标点位,就可以完成机械臂的路径规划了。因为棋面比较干净没有遮挡物,所以不用考虑过多的路径因素。

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 初始化定义几个坐标点
# 设定一个长度为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当中控制机械臂的一些方法:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#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 这个套装进行完善后,上架在我们的网站,有兴趣的朋友可以关注我们,后续会进行更新。

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

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

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

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

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

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
对弈人工智能!myCobot 280开源六轴机械臂Connect 4 四子棋对弈
Hi,guys.今天我们来介绍一下人工智能下棋,我们将用机械臂来作为对手跟你进行下棋。
大象机器人
2023/05/29
5100
对弈人工智能!myCobot 280开源六轴机械臂Connect 4 
四子棋对弈
AlphaZero 实战:从零学下五子棋(附代码)
2 个多月前,AlphaGo Zero 横空出世,完全从零开始,仅通过自我对弈就能天下无敌,瞬间刷爆朋友圈,各路大神分分出来解读,惊叹于其思想的简单、效果的神奇。很快就有大神放出了开源版的 AlphaGo Zero,但是只有代码,没有训练出来的模型,因为据大神推算,在普通消费级的电脑上想训练出 AlphaGo Zero 的模型需要 1700 年!然而 DeepMind 在 AlphaGo Zero 的论文里只强调运行的时候需要 4 个 TPU,而完全没有提及训练过程的最大计算需求在于生成 self-play
AI研习社
2018/03/16
2.9K0
AlphaZero 实战:从零学下五子棋(附代码)
七轴开源协作机械臂myArm视觉跟踪技术!
ArUco标记是一种基于二维码的标记,可以被用于高效的场景识别和位置跟踪。这些标记的简单性和高效性使其成为机器视觉领域的理想选择,特别是在需要实时和高精度跟踪的场景中。结合机器学习和先进的图像处理技术,使用ArUco标记的机械臂系统可以实现更高级的自动化功能,如精确定位、导航和复杂动作的执行。
大象机器人
2023/12/18
4730
七轴开源协作机械臂myArm视觉跟踪技术!
结合大象机器人六轴协作机械臂myCobot 280 ,解决特定的自动化任务和挑战!(下)
前景提要:我们在上文介绍了使用LIMO cobot 实现一个能够执行复杂任务的复合机器人系统的应用场景的项目,从以下三个方面:概念设计、系统架构以及关键组件。
大象机器人
2024/03/07
4711
结合大象机器人六轴协作机械臂myCobot 280 ,解决特定的自动化任务和挑战!(下)
组合游戏系列5: 井字棋、五子棋AlphaGo Zero 算法实战
上一篇我们从原理层面解析了AlphaGo Zero如何改进MCTS算法,通过不断自我对弈,最终实现从零棋力开始训练直至能够打败任何高手。在本篇中,我们在已有的N子棋OpenAI Gym 环境中用Pytorch实现一个简化版的AlphaGo Zero算法。本篇所有代码在 github.com/MyEncyclopedia/ConnectNGym 中,其中部分参考了SongXiaoJun 的 github.com junxiaosong/AlphaZero_Gomoku。
AI科技大本营
2020/09/24
1.7K0
组合游戏系列5: 井字棋、五子棋AlphaGo Zero 算法实战
六轴机械臂机械臂人脸识别和跟踪
使用一个桌面型的六轴机械臂,在机械臂的末端安装一个摄像头,来进行人脸识别和跟踪的一个功能。该功能分为两个模块,一个是人脸识别模块,另一个是机械臂的运动控制模块。
大象机器人
2023/02/10
1K0
YoloV8自定义姿势关键点检测教程:机械臂关键点姿势跟踪(步骤 + 源码)
自定义姿势关键点检测是一种计算机视觉技术,涉及识别和跟踪对象上的特定点或关键点。对于下棋机器人手臂来说,这些关键点可以代表棋子的位置、棋盘的方向,甚至机器人手臂本身的配置。
Color Space
2024/01/12
1.7K0
YoloV8自定义姿势关键点检测教程:机械臂关键点姿势跟踪(步骤 + 源码)
大象机器人开源六轴协作机械臂myCobot 320 手机摄影技术!
有没有遇到过这样的情况:当你手持手机或相机准备拍摄视频时,心中已经构想了完美的画面,但却因为实际的限制无法捕捉到理想中的角度?这种情况可能会让人感到挫折。例如,如果想要从地面一只蚂蚁的视角拍摄,镜头需要与蚂蚁处于同一水平线上,这在操作上不仅困难,而且往往难以实现。
大象机器人
2024/04/28
3130
大象机器人开源六轴协作机械臂myCobot 320 手机摄影技术!
使用myCobot 280 Jeston Nano进行物体精确识别追踪
我们在YouTube上看到有人使用机械臂实现物体跟踪功能的视频时,深受启发,对这个项目产生了浓厚的兴趣,并决定独立开发一个类似的程序。
大象机器人
2023/05/24
7791
使用 Python 和可视化编程控制树莓派机械臂myCobot
myCobot 280 Pi 是一款 6 自由度多功能桌面机械臂。它由大象机器人研发,使用 Raspberry Pi 作为主控制器。该机器人结构紧凑,运行稳定,非常适合新手入门。它还可以使用多种语言进行编程,简单易用,功能丰富。适合那些有兴趣学习如何对机械臂进行编程控制和项目开发的人。
大象机器人
2022/11/30
5K0
大象机器人开源协作机械臂机械臂接入GPT4o大模型!
随着人工智能和机器人技术的快速发展,机械臂在工业、医疗和服务业等领域的应用越来越广泛。通过结合大模型和多模态AI,机械臂能够实现更加复杂和智能化的任务,提升了人机协作的效率和效果。我们个人平时接触不太到机械臂这类的机器人产品,但是有一种小型的机械臂我们人人都可以拥有它myCobot,价格低廉的一种桌面型机械臂。
大象机器人
2024/07/03
7370
大象机器人开源协作机械臂机械臂接入GPT4o大模型!
人工智能套装myCobot 320版视觉算法深度解析
当今社会,随着人工智能技术的不断发展,机械臂的应用越来越广泛。作为一种能够模拟人类手臂动作的机器人,机械臂具有高效、精准、灵活、安全等一系列优点。在工业、物流、医疗、农业等领域,机械臂已经成为了许多自动化生产线和系统中不可或缺的一部分。例如,在工厂生产线上的自动化装配、仓库物流中的货物搬运、医疗手术中的辅助操作、农业生产中的种植和收获等场景中,机械臂都能够发挥出其独特的作用。本文将重点介绍机械臂结合视觉识别技术在myCobot 320 AI Kit场景中的应用,并探讨机械臂视觉控制技术的优势和未来发展趋势。
大象机器人
2023/08/14
3960
大象机器人六轴协作机械臂myCobot 320 进行手势识别
我是一名专注于机器学习和机器人技术自由者。我的热情始于大学期间的人工智能课程,这促使我探索人机交互的新方法。尤其对于机械臂的操作,我一直想要简化其复杂性,使之更加直观和易于使用。
大象机器人
2024/02/01
4180
大象机器人六轴协作机械臂myCobot 320 进行手势识别
Python 人工智能:6~10
在本章中,我们将学习集成学习以及如何将其用于预测分析。 在本章的最后,您将对这些主题有更好的理解:
ApacheCN_飞龙
2023/04/23
1.5K0
详解强化学习多智能体博弈算法——蒙特卡洛树搜索
👆点击“博文视点Broadview”,获取更多书讯 强化学习,除了可以用于单个强化学习智能体和环境的相互作用,也可以用于两个或者多个智能体在某个强化学习环境下的博弈。 关于这种类型的算法,最有名的应该是蒙特卡洛树搜索(Monte Carlo Tree Search,MCTS)。 随着AlphaGo和AlphaZero算法在围棋、国际象棋和将棋等棋类领域的广泛应用,并且在这些领域内均取得了相比传统的Alpha-Beta 剪枝算法更加优异的性能,蒙特卡洛树搜索算法作为这些智能体使用的算法也被越来越多的人研究
博文视点Broadview
2022/03/30
2.8K0
【Nature重磅封面】Google人工智能击败欧洲围棋冠军,3月挑战世界冠军!
围棋一直被视为人工智能最难破解的游戏。就在今天,《Nature》杂志以封面论文的形式,介绍了 Google DeepMind 开发的人工智能程序 AlphaGo,它击败了欧洲围棋冠军樊麾,并将在 3 月和世界冠军李世乭对战!Google 特地为此准备了 100 万美元奖金。 从国际象棋的经验看,1997 年人工智能第一次打败人类后,2006 年成为了人类在国际象棋的绝唱,自此之后人类没有战胜过最顶尖的人工智能国际象棋选手。在 AlphaGo 打败了欧洲围棋冠军后,世界冠军李世乭和 AlphaGo 的对弈,
新智元
2018/03/14
1.6K0
【Nature重磅封面】Google人工智能击败欧洲围棋冠军,3月挑战世界冠军!
教育场景中的自动化分拣系统!基于大象机器人UltraArm P340机械臂和传送带的实现
今天我们将展示一个高度自动化的模拟场景,展示多个机械臂与传送带协同工作的高效分拣系统。在这个场景中,机械臂通过视觉识别技术对物体进行分类,并通过精确的机械操作将它们放置在指定的位置。这一系统不仅提高了分拣的速度和准确性,还展示了现代自动化技术在工业领域的巨大潜力。无论是处理大量的日常物品,还是在复杂的工业流程中应用,这种自动化分拣解决方案都体现出了极高的灵活性和效率。
大象机器人
2024/07/03
2810
教育场景中的自动化分拣系统!基于大象机器人UltraArm P340机械臂和传送带的实现
结合大象机器人六轴协作机械臂myCobot 280 ,解决特定的自动化任务和挑战!(上)
本项目致力于探索和实现一种高度集成的机器人系统,旨在通过结合现代机器人操作系统(ROS)和先进的硬件组件,解决特定的自动化任务和挑战。一部分是基于Jetson Orin主板的LIMO PPRO SLAM雷达小车,它具备自主导航、地图构建和路径规划的能力;另一部分是Mycobot 280 M5机械臂,这是一个具有六自由度、工作半径280mm的紧凑型机械臂,能够进行精确的物品搬运和操作。
大象机器人
2024/03/07
4290
结合大象机器人六轴协作机械臂myCobot 280 ,解决特定的自动化任务和挑战!(上)
机械臂技术的前沿探索:年度案例回顾!
在过去的几年里,机械臂技术经历了前所未有的发展,其应用领域从传统的制造业扩展到了医疗、服务、物流等多个新兴行业。这种跨界扩展得益于科技的飞速进步,尤其是在传感器、控制系统和人工智能领域的突破。特别是去年,人工智能技术的热潮为机械臂的智能化升级提供了更多的可能性,从而极大地拓宽了其应用场景和提高了作业效率与智能水平。
大象机器人
2024/03/13
6780
机械臂技术的前沿探索:年度案例回顾!
精通 Python OpenCV4:第二部分
在本书的第二部分中,您将更深入地了解 OpenCV 库。 更具体地说,您将看到计算机视觉项目中所需的大多数常见图像处理技术。 此外,您还将看到如何创建和理解直方图,直方图是用于更好地理解图像内容的强大工具。 此外,您将在计算机视觉应用中看到所需的主要阈值处理技术,这是图像分割的关键部分。 此外,您还将看到如何处理轮廓,轮廓用于形状分析以及对象检测和识别。 最后,您将学习如何构建第一个增强现实应用。
ApacheCN_飞龙
2023/04/27
2.3K0
推荐阅读
相关推荐
对弈人工智能!myCobot 280开源六轴机械臂Connect 4 四子棋对弈
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验