一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

對(duì)弈人工智能!myCobot 280開(kāi)源六軸機(jī)械臂Connect 4 四子棋對(duì)弈下篇

大象機(jī)器人科技 ? 來(lái)源:大象機(jī)器人科技 ? 作者:大象機(jī)器人科技 ? 2023-06-16 17:16 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

前言

在上篇文章中,我們探討了如何創(chuàng)造一個(gè)能夠進(jìn)行Connect4的對(duì)弈大腦。簡(jiǎn)單的介紹了幾種對(duì)弈算法,例如極小化極大算法,Alpha-Beta剪枝算法等,最關(guān)鍵的是目前最流行的神經(jīng)網(wǎng)絡(luò)算法和深度學(xué)習(xí)。神經(jīng)網(wǎng)絡(luò)算法,讓計(jì)算機(jī)也有一個(gè)想人類(lèi)一樣能夠思考的大腦,設(shè)置獨(dú)特的場(chǎng)景來(lái)進(jìn)行學(xué)習(xí)下棋。在本篇文章中,我們將進(jìn)一步探討如何讓機(jī)械臂來(lái)實(shí)現(xiàn)下棋動(dòng)作,將想法給實(shí)現(xiàn)出來(lái)。(換句話(huà)說(shuō)就是,AI機(jī)械臂下棋)

如果感興趣歡迎觀看上篇文章。

Introduction

下面的內(nèi)容主要分為四個(gè)部分來(lái)進(jìn)行介紹。

● 獲取信息:用攝像頭獲取到棋盤(pán)上的信息,進(jìn)行對(duì)弈


            ● 處理信息:處理獲取到的信息識(shí)別出棋子的位置,通過(guò)對(duì)弈算法,計(jì)算出下一步棋子應(yīng)該在哪里下


            ● 機(jī)械臂的軌跡:設(shè)計(jì)機(jī)械臂如何抓取棋子,設(shè)計(jì)放置棋子的路徑


            ● 功能的整合:將上面三個(gè)功能結(jié)合在一起,實(shí)現(xiàn)AI機(jī)械臂下棋。

讓我們一起來(lái)看看吧~

項(xiàng)目

獲取信息

環(huán)境:python,最新版的opencv,numpy

首先需要獲取棋盤(pán)的信息,信息包括棋盤(pán),棋盤(pán)上的棋子。我們用到的是OpenCV當(dāng)中cv2.aruco.ArucoDetector(dictionary, parameters)

該方法用來(lái)檢測(cè)Aruco二維碼,從圖片當(dāng)中標(biāo)記出Aruco的位置,并且計(jì)算出標(biāo)記的位置和姿態(tài)信息。這樣就能夠確定整個(gè)棋盤(pán)的位置了,確定四個(gè)角的位置。

Code:代碼是用cv2.aruco.ArucoDetector(dictionary, parameters)方法來(lái)確定我們棋盤(pán)的位置。

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

確定完棋盤(pán)之后,我們用不同的顏色來(lái)當(dāng)棋子,這里就用兩種區(qū)分度比較大的顏色,紅色和黃色,并且標(biāo)注出來(lái)。

設(shè)置一個(gè)邏輯,當(dāng)棋面每多一枚棋子的時(shí)候,將當(dāng)前棋盤(pán)的數(shù)據(jù)返回給到對(duì)弈算法,進(jìn)行判斷下一步棋應(yīng)該如何走。

處理信息

接下來(lái)需要處理棋盤(pán)的信息。

從上邊可以看到我們獲取到了棋盤(pán)的數(shù)據(jù),接下來(lái)我們需要把數(shù)據(jù),傳遞給對(duì)弈算法,讓對(duì)弈算法將下一步棋子的位置預(yù)測(cè)出來(lái)。

下面是處理的偽代碼:

functionmodel_predict(state, available_actions):
# 將available_actions轉(zhuǎn)換為numpy數(shù)組
    available_actions = np.array(available_actions)
# 對(duì)state進(jìn)行擴(kuò)展,以適應(yīng)ONNX模型的輸入要求
    state = np.expand_dims(np.expand_dims(np.array(state, dtype=np.float32), axis=0), axis=0)
# 構(gòu)建ONNX模型的輸入
    ort_inputs ={self.policy_net.get_inputs()[0].name: state}
# 進(jìn)行模型預(yù)測(cè),獲取每個(gè)可用位置的預(yù)測(cè)值
    r_actions =self.policy_net.run(None, ort_inputs)[0][0,:]
# 根據(jù)預(yù)測(cè)值選擇最優(yōu)的落子位置
    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模型來(lái)進(jìn)行模型預(yù)測(cè),并根據(jù)預(yù)測(cè)結(jié)果選擇最優(yōu)的落子位置。首先,將可用位置available_actions轉(zhuǎn)換為numpy數(shù)組,并將當(dāng)前游戲狀態(tài)state進(jìn)行擴(kuò)展,以適應(yīng)ONNX模型的輸入要求。然后,將擴(kuò)展后的state傳遞給ONNX模型進(jìn)行預(yù)測(cè),并將預(yù)測(cè)結(jié)果保存在r_actions變量中。接著,根據(jù)預(yù)測(cè)結(jié)果以及可用的落子位置,計(jì)算出每個(gè)可用位置的預(yù)測(cè)值,選取其中最大的一個(gè)對(duì)應(yīng)的落子位置作為最優(yōu)的落子位置,并將其返回。

機(jī)械臂的軌跡

大腦(對(duì)弈算法),眼睛(識(shí)別算法)都有了,現(xiàn)在就差一個(gè)手去執(zhí)行動(dòng)作。我們使用python庫(kù)pymycobot來(lái)對(duì)機(jī)械臂進(jìn)行控制。因?yàn)槠灞P(pán)的原因,棋子只能從棋盤(pán)的上方投下,我們給每一條數(shù)列的棋個(gè)上設(shè)置一個(gè)坐標(biāo)點(diǎn)位,就可以完成機(jī)械臂的路徑規(guī)劃了。因?yàn)槠迕姹容^干凈沒(méi)有遮擋物,所以不用考慮過(guò)多的路徑因素。

下面是機(jī)械臂運(yùn)行軌跡位置的偽代碼:

# 初始化定義幾個(gè)坐標(biāo)點(diǎn)
# 設(shè)定一個(gè)長(zhǎng)度為7的列表
self.chess_table = [None for _ in range(7)]
self.chess_table[0]-[6] = [J1,J2,J3,J4,J5,J6] # 七個(gè)棋格的位置

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],#吸取棋子的位置
        }

接下來(lái)介紹一下pymycobot當(dāng)中控制機(jī)械臂的一些方法:

#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)

功能的整合

將功能點(diǎn)整合之前我們得整理它們之間的邏輯。

下棋的流程圖有了接下來(lái)就是,將功能點(diǎn)結(jié)合在一起.

這是程序的結(jié)構(gòu)文件。

├── 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.

總結(jié)

從理論上來(lái)說(shuō)的話(huà),幾乎沒(méi)有人能夠在贏得勝利。因?yàn)闄C(jī)器的算法可以預(yù)測(cè)到后面將要下在幾步棋甚至更多,而對(duì)于普通人來(lái)說(shuō),一般能夠預(yù)測(cè)的也就兩三步棋。但是從視頻上來(lái)看,AI只贏了一場(chǎng)比賽,輸?shù)舻哪且粓?chǎng)是因?yàn)榻Y(jié)構(gòu)因素的影響,本來(lái)該下的棋盤(pán)的位置,被迫換了一個(gè)地方。

你覺(jué)得這個(gè)項(xiàng)目有意思嗎?我們會(huì)在后續(xù)將Connect4 這個(gè)套裝進(jìn)行完善后,上架在我們的網(wǎng)站,有興趣的朋友可以關(guān)注我們,后續(xù)會(huì)進(jìn)行更新。

你是否會(huì)嘗試用機(jī)械臂來(lái)實(shí)現(xiàn)其他的棋藝呢?例如國(guó)際象棋,中國(guó)象棋等,不同的棋藝所使用的算法也會(huì)大大不同,歡迎大家在地下跟我們留言進(jìn)行分享你們的想法。

審核編輯 黃宇

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 機(jī)器人
    +關(guān)注

    關(guān)注

    213

    文章

    29756

    瀏覽量

    213050
  • 算法
    +關(guān)注

    關(guān)注

    23

    文章

    4711

    瀏覽量

    95446
  • 人工智能
    +關(guān)注

    關(guān)注

    1807

    文章

    49035

    瀏覽量

    249779
  • 機(jī)械臂
    +關(guān)注

    關(guān)注

    13

    文章

    554

    瀏覽量

    25400
  • 大象機(jī)器人
    +關(guān)注

    關(guān)注

    0

    文章

    86

    瀏覽量

    126
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    使用myCobot 280 Jeston Nano進(jìn)行物體精確識(shí)別追蹤

    ,以便在實(shí)際應(yīng)用中發(fā)揮作用,這個(gè)項(xiàng)目涉及到許多技術(shù)和算法,包括視覺(jué)識(shí)別、手眼協(xié)同和機(jī)械控制等方面。 機(jī)械的介紹 mycobot280-J
    的頭像 發(fā)表于 05-24 18:20 ?2245次閱讀
    使用<b class='flag-5'>myCobot</b> <b class='flag-5'>280</b> Jeston Nano進(jìn)行物體精確識(shí)別追蹤

    對(duì)弈人工智能!myCobot 280開(kāi)源機(jī)械Connect 4 對(duì)弈

    Introduction Hi,guys.今天我們來(lái)介紹一下人工智能下棋,我們將用機(jī)械來(lái)作為對(duì)手跟你進(jìn)行下棋。 人工智能下棋的研究可以追溯到20世紀(jì)50年代。當(dāng)時(shí),計(jì)算機(jī)科學(xué)家開(kāi)始探
    的頭像 發(fā)表于 05-29 15:26 ?1639次閱讀
    <b class='flag-5'>對(duì)弈</b><b class='flag-5'>人工智能</b>!<b class='flag-5'>myCobot</b> <b class='flag-5'>280</b><b class='flag-5'>開(kāi)源</b><b class='flag-5'>六</b><b class='flag-5'>軸</b><b class='flag-5'>機(jī)械</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'>對(duì)弈</b>

    結(jié)合大象機(jī)器人協(xié)作機(jī)械myCobot 280 ,解決特定的自動(dòng)化任務(wù)和挑戰(zhàn)?。ㄏ拢?/a>

    。 本文主要深入項(xiàng)目?jī)?nèi)核的主要部分,同樣也主要分為三個(gè)部分:機(jī)械的視覺(jué)抓取,LIMO?Pro在ROS中的功能,建圖導(dǎo)航避障等,以及兩個(gè)系統(tǒng)的集成。 設(shè)備準(zhǔn)備 myCobot?280?
    的頭像 發(fā)表于 03-05 15:08 ?399次閱讀
    結(jié)合大象機(jī)器人<b class='flag-5'>六</b><b class='flag-5'>軸</b>協(xié)作<b class='flag-5'>機(jī)械</b><b class='flag-5'>臂</b><b class='flag-5'>myCobot</b> <b class='flag-5'>280</b> ,解決特定的自動(dòng)化任務(wù)和挑戰(zhàn)!(下)

    大象機(jī)器人攜手進(jìn)迭時(shí)空推出 RISC-V 全棧開(kāi)源機(jī)械產(chǎn)品

    全球80多個(gè)國(guó)家和地區(qū)。 近日,大象機(jī)器人聯(lián)合進(jìn)迭時(shí)空推出全球首款RISC-V全棧開(kāi)源機(jī)器myCobot
    發(fā)表于 04-25 17:59

    子棋游戲里如何實(shí)現(xiàn)悔棋功能啊

    基于labview的五子棋游戲,有人機(jī)對(duì)弈和雙人對(duì)弈模式,雙人對(duì)弈在不聯(lián)網(wǎng)的情況下
    發(fā)表于 10-10 14:18

    怎樣去設(shè)計(jì)一種人機(jī)對(duì)弈子棋程序

    子棋游戲應(yīng)達(dá)到幾方面的要求?怎樣去設(shè)計(jì)一種人機(jī)對(duì)弈子棋程序?
    發(fā)表于 09-29 07:26

    基于LabVIEW的五子棋博弈算法

    針對(duì)目前五子棋人機(jī)對(duì)弈多數(shù)基于電腦、手機(jī),缺少真實(shí)環(huán)境的問(wèn)題,提出一種基于LabVIEW的博弈算法,并運(yùn)用于真實(shí)的五子棋人機(jī)對(duì)弈。首先通過(guò)圖像采集系統(tǒng)獲取當(dāng)前狀態(tài)下棋盤(pán)及人機(jī)雙方棋子的
    發(fā)表于 12-17 11:32 ?29次下載

    實(shí)現(xiàn)人與機(jī)器人的直接對(duì)弈_強(qiáng)大的對(duì)弈系統(tǒng)如何實(shí)現(xiàn)

    機(jī)器人技術(shù)是綜合了計(jì)算機(jī)、控制論、結(jié)構(gòu)學(xué)、信息與傳感技術(shù)、仿生學(xué)及人工智能等多學(xué)科的一門(mén)高新技術(shù)。目前的人機(jī)對(duì)弈軟件不直觀、缺乏真正的對(duì)弈環(huán)境,而人機(jī)對(duì)弈機(jī)器人正是針對(duì)這些不足而設(shè)計(jì)的
    發(fā)表于 02-12 12:05 ?4875次閱讀

    3個(gè)時(shí)代,3盤(pán)對(duì)弈,人工智能是否能繼續(xù)戰(zhàn)勝人類(lèi)?

    從人機(jī)對(duì)弈這件小事,和你聊聊人工智能的發(fā)展。
    的頭像 發(fā)表于 03-30 10:19 ?1.3w次閱讀

    對(duì)弈機(jī)器人與圖像識(shí)別

    對(duì)弈機(jī)器人是河南省人工智能展覽館的明星展品之一,參與者可以體驗(yàn)到“人機(jī)對(duì)戰(zhàn)”的挑戰(zhàn)與樂(lè)趣,在往期活動(dòng)中深受大小學(xué)生的歡迎。與對(duì)弈機(jī)器人的對(duì)戰(zhàn)簡(jiǎn)單來(lái)說(shuō)可以分為:圖像識(shí)別信息獲取分析計(jì)算控制落子
    的頭像 發(fā)表于 01-13 11:28 ?2482次閱讀

    myCobot機(jī)械應(yīng)用于Unity機(jī)器人編程實(shí)戰(zhàn)課

    ER myCobot 280 Pi ,采用樹(shù)莓派微處理器,內(nèi)置ubuntu18.04系統(tǒng),無(wú)需搭配PC主控,鏈接外設(shè),即可快速構(gòu)建機(jī)械 編程教育、
    的頭像 發(fā)表于 06-16 14:33 ?3075次閱讀
    <b class='flag-5'>myCobot</b><b class='flag-5'>機(jī)械</b><b class='flag-5'>臂</b>應(yīng)用于Unity機(jī)器人編程實(shí)戰(zhàn)課

    MyCobot機(jī)械開(kāi)箱及開(kāi)發(fā)前的準(zhǔn)備工作(一)

    MyCobot機(jī)械是一款入門(mén)級(jí)的自由度機(jī)械,目前是國(guó)產(chǎn)
    的頭像 發(fā)表于 09-30 10:00 ?1849次閱讀
    <b class='flag-5'>MyCobot</b><b class='flag-5'>六</b><b class='flag-5'>軸</b><b class='flag-5'>機(jī)械</b><b class='flag-5'>臂</b>開(kāi)箱及開(kāi)發(fā)前的準(zhǔn)備工作(一)

    開(kāi)源機(jī)械myCobot 280末端執(zhí)行器實(shí)用案例解析

    使用。 本文中主要介紹4款常用的機(jī)械的末端執(zhí)行器。 Product myCobot 280 M5Stack
    的頭像 發(fā)表于 10-16 16:28 ?1895次閱讀
    <b class='flag-5'>開(kāi)源</b><b class='flag-5'>六</b><b class='flag-5'>軸</b><b class='flag-5'>機(jī)械</b><b class='flag-5'>臂</b><b class='flag-5'>myCobot</b> <b class='flag-5'>280</b>末端執(zhí)行器實(shí)用案例解析

    使用myCobot 280機(jī)械結(jié)合ROS2系統(tǒng)搭建機(jī)械分揀站

    這篇文章是來(lái)自Automatic Addison的開(kāi)源項(xiàng)目,已獲作者授權(quán)轉(zhuǎn)載自github。本項(xiàng)目的主要內(nèi)容是使用myCobot 280機(jī)械
    的頭像 發(fā)表于 01-15 09:22 ?823次閱讀
    使用<b class='flag-5'>myCobot</b> <b class='flag-5'>280</b><b class='flag-5'>機(jī)械</b><b class='flag-5'>臂</b>結(jié)合ROS2系統(tǒng)搭建<b class='flag-5'>機(jī)械</b>分揀站

    大象機(jī)器人攜手進(jìn)迭時(shí)空推出 RISC-V 全棧開(kāi)源機(jī)械產(chǎn)品

    全球80多個(gè)國(guó)家和地區(qū)。近日,大象機(jī)器人聯(lián)合進(jìn)迭時(shí)空推出全球首款RISC-V全棧開(kāi)源機(jī)器myCobot280RISC-V”,為開(kāi)發(fā)者
    的頭像 發(fā)表于 06-06 16:55 ?546次閱讀
    大象機(jī)器人攜手進(jìn)迭時(shí)空推出 RISC-V 全棧<b class='flag-5'>開(kāi)源</b><b class='flag-5'>六</b><b class='flag-5'>軸</b><b class='flag-5'>機(jī)械</b><b class='flag-5'>臂</b>產(chǎn)品