精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

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

    文章

    28205

    瀏覽量

    206532
  • 算法
    +關注

    關注

    23

    文章

    4599

    瀏覽量

    92643
  • 人工智能
    +關注

    關注

    1791

    文章

    46859

    瀏覽量

    237577
  • 機械臂
    +關注

    關注

    12

    文章

    509

    瀏覽量

    24493
收藏 人收藏

    評論

    相關推薦

    使用myCobot 280 Jeston Nano進行物體精確識別追蹤

    ,以便在實際應用中發揮作用,這個項目涉及到許多技術和算法,包括視覺識別、手眼協同和機械控制等方面。 機械的介紹 mycobot280-J
    的頭像 發表于 05-24 18:20 ?1669次閱讀
    使用<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 ?1273次閱讀
    <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 ?4644次閱讀

    3個時代,3盤對弈人工智能是否能繼續戰勝人類?

    從人機對弈這件小事,和你聊聊人工智能的發展。
    的頭像 發表于 03-30 10:19 ?1.2w次閱讀

    對弈機器人與圖像識別

    對弈機器人是河南省人工智能展覽館的明星展品之一,參與者可以體驗到“人機對戰”的挑戰與樂趣,在往期活動中深受大小學生的歡迎。與對弈機器人的對戰簡單來說可以分為:圖像識別信息獲取分析計算控制落子
    的頭像 發表于 01-13 11:28 ?2258次閱讀

    機械免費使用,學習ROS、Python火熱報名中

    延續至今。 今天我們將秉承自由共享的精神,和Arduino社區發起“百城萬里公益行”myCobot 280機械漂流活動。 極客愛好者通過由大象機器人學院提供的
    發表于 03-31 15:28 ?1240次閱讀

    myCobot機械應用于Unity機器人編程實戰課

    ER myCobot 280 Pi ,采用樹莓派微處理器,內置ubuntu18.04系統,無需搭配PC主控,鏈接外設,即可快速構建機械 編程教育、
    的頭像 發表于 06-16 14:33 ?2632次閱讀
    <b class='flag-5'>myCobot</b><b class='flag-5'>機械</b><b class='flag-5'>臂</b>應用于Unity機器人編程實戰課

    MyCobot機械開箱及開發前的準備工作(一)

    MyCobot機械是一款入門級的自由度機械,目前是國產
    的頭像 發表于 09-30 10:00 ?1458次閱讀
    <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 ?1296次閱讀
    <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 ?1203次閱讀
    <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 ?1186次閱讀
    【<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 ?784次閱讀
    大象機器人<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大模型!