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

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

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

Vision Board 輕松完成【電賽E題】

RT-Thread官方賬號 ? 2024-08-01 10:00 ? 次閱讀

題目簡述

一、 任務

設計并制作三子棋游戲裝置,能夠控制機械臂或其他機構放置棋子,實現(xiàn)人 機對弈。圖 1 所示的三子棋棋盤和棋子位置示意圖中,棋盤由黑色實線圍成 9 個方格,人、機分別從棋子放置處拾取棋子并放置到方格中,先將己方的 3 個棋 子連成一線(橫連、豎連、斜連皆可)即獲勝。

c7abedb4-4fa9-11ef-817b-92fbcf53809c.png

二、 要求

(1)裝置能將任意 1 顆黑棋子放置到 5 號方格中。(5 分)

(2)裝置能將任意 2 顆黑棋子和 2 顆白棋子依次放置到指定方格中。(20 分)

(3)將棋盤繞中心±45°范圍內(nèi)旋轉(zhuǎn)后,裝置能將任意 2 顆黑棋子和 2 顆 白棋子依次放置到指定方格中。(20 分)

(4)裝置執(zhí)黑棋先行與人對弈(第 1 步方格可設置),若人應對的第 1 步白 棋有錯誤,裝置能獲勝。(20 分)

(5)人執(zhí)黑棋先行,裝置能正確放置白棋子以保持不輸棋。(20 分)

(6)對弈過程中,若人將裝置下過的 1 顆棋子變動位置,裝置能自動發(fā)現(xiàn) 并將該棋子放置回原來位置。(10 分)

Vision Broad開發(fā)板簡述

開發(fā)板描述:Vision Board搭載全球首顆 480 MHz Arm Cortex-M85芯片,擁有Helium和TrustZone技術的加持。SDK包里集成了OpenMV機器視覺例程,配合MicroPython 解釋器,使其可以流暢地開發(fā)機器視覺應用。Vision Board具有以下主要特點:

強大的處理性能:Vision Board搭載了全球首款基于 ARM Cortex-M85 架構的瑞薩電子RA8 MCU,6.39 CoreMark/MHz,可以快速而高效地運行機器視覺算法,實現(xiàn)圖像處理、等功能。

完整支持OpenMV生態(tài):Vision Board完全兼容OpenMV開發(fā)平臺,用戶可以直接使用OpenMV IDE進行編程和開發(fā),利用豐富的API和庫函數(shù)進行圖像處理和計算機視覺任務。

友好的學習環(huán)境:提供簡潔易用的開發(fā)環(huán)境和示例項目,帶領初學者快速上手機器視覺、GUI等應用。同時具有豐富的文檔資料供給開發(fā)者學習。

可擴展性:豐富的擴展接口,如攝像頭、MIPI-DSI、RGB666、樹莓派兼容IO、BTB拓展接口等,用戶可以根據(jù)自己的需求連接其他外設或模塊,如以太網(wǎng)、CAN/LIN、傳感器、執(zhí)行器等,實現(xiàn)更復雜的應用場景。

c7bc77ba-4fa9-11ef-817b-92fbcf53809c.png

板載資源:

c7dad534-4fa9-11ef-817b-92fbcf53809c.png

外設支持情況:

c7ea1f62-4fa9-11ef-817b-92fbcf53809c.png

支持的 IDE:RT-Thread Studio、MDKV538。OpenMV工程目前僅支持MDK開發(fā)

三子棋思路

找棋盤

生成居中的九宮格區(qū)域

函數(shù) generate_centered_rois 的目的是生成一個九宮格的區(qū)域,每個區(qū)域都包含棋盤上的一個方塊,并且這些區(qū)域在整個圖像中居中。函數(shù)的參數(shù)包括圖像的寬度和高度、每個方塊的邊長 b 以及感興趣區(qū)域(ROI)的邊長 k。

函數(shù)定義

c7fb5746-4fa9-11ef-817b-92fbcf53809c.png

步驟解析

1.初始化區(qū)域列表:

c836aad0-4fa9-11ef-817b-92fbcf53809c.png

rois 是一個列表,用于存儲每個 ROI 的坐標和大小。

2.計算每個 ROI 中心的位置偏移:

c84a3b40-4fa9-11ef-817b-92fbcf53809c.png

偏移量 offset 是為了確保 ROI 在每個方塊的中心。b 是方塊的邊長,而 k 是 ROI 的邊長。

3.計算整個九宮格的總寬度和高度:

c85ebaac-4fa9-11ef-817b-92fbcf53809c.png

因為九宮格有 3 行 3 列,每個方塊的邊長為 b,所以總寬度和高度分別是 3 * b。

4.計算左上角的起始點:

c86d508a-4fa9-11ef-817b-92fbcf53809c.png

為了使九宮格在圖像中居中,我們計算左上角的起始點 start_x 和 start_y。它們分別是圖像寬度和高度減去九宮格的總寬度和高度的一半。

5.生成九宮格區(qū)域:

c87f93bc-4fa9-11ef-817b-92fbcf53809c.png

使用雙重循環(huán)生成每個 ROI 的坐標。

x_center 和 y_center 計算每個方塊的中心位置。

x 和 y 是 ROI 的左上角坐標,減去 k // 2 是為了將 ROI 的中心對齊到方塊的中心。

最后,將每個 ROI 添加到 rois 列表中。

6.返回 ROI 列表:

c88a2a48-4fa9-11ef-817b-92fbcf53809c.png

視覺化解釋

假設圖像的寬度和高度分別為 320 和 240,每個方塊的邊長 b 為 43,每個 ROI 的邊長 k 為 10。九宮格將會在圖像中居中,每個 ROI 將位于方塊的中心,形成一個規(guī)則的 3x3 矩陣。

找棋子

棋子識別的關鍵在于處理圖像并根據(jù)灰度值來判斷每個方塊中是否存在棋子,以及棋子的顏色是黑色還是白色。這個過程在 while 循環(huán)中進行。

代碼段

c8946832-4fa9-11ef-817b-92fbcf53809c.png

步驟解析

1.抓取圖像和鏡頭矯正:

c8a56bb4-4fa9-11ef-817b-92fbcf53809c.png

使用 Vision Broad的攝像頭捕獲當前圖像,并進行鏡頭矯正,以減少鏡頭畸變。

2.遍歷所有 ROI(感興趣區(qū)域):

c8b801e8-4fa9-11ef-817b-92fbcf53809c.png

使用雙重循環(huán)遍歷之前生成的九宮格區(qū)域 rois。

3.計算灰度值的平均值:

c8ce1ffa-4fa9-11ef-817b-92fbcf53809c.png

對每個 ROI 計算灰度值的平均值。img.get_statistics(roi=rois[y][x]) 返回一個統(tǒng)計對象,包含了該 ROI 內(nèi)的像素統(tǒng)計數(shù)據(jù)。通過 mean() 方法可以得到該區(qū)域的平均灰度值。

4.判斷灰度值來確定棋子:

c8daf3e2-4fa9-11ef-817b-92fbcf53809c.png

如果灰度值小于 100,則認為該區(qū)域有一個黑色棋子("X")。

如果灰度值大于 200,則認為該區(qū)域有一個白色棋子("O")。

否則,該區(qū)域為空(" ")。

博弈策略計算

minimax 函數(shù)

minimax 函數(shù)使用遞歸的方法評估所有可能的棋步,并為每個棋步計算一個分數(shù),以確定最佳移動。

c8ed3e26-4fa9-11ef-817b-92fbcf53809c.png

步驟解析

1.定義變量:

c9336f18-4fa9-11ef-817b-92fbcf53809c.png

定義機器人棋子為 ‘X’,玩家棋子為 ‘O’。

2.檢查終止條件:

c93e548c-4fa9-11ef-817b-92fbcf53809c.png

如果機器人贏了,返回一個正分(10 減去深度,越快贏分數(shù)越高)。

如果玩家贏了,返回一個負分(深度減去 10,越快輸分數(shù)越低)。

如果平局,返回 0 分。

遞歸搜索:

機器人最大化得分:

c94e9f40-4fa9-11ef-817b-92fbcf53809c.png

初始化 best_score 為負無窮。

遍歷每個空位置,模擬機器人下棋。

遞歸調(diào)用 minimax 計算對方的最佳應對分數(shù)。

恢復棋盤狀態(tài),更新 best_score。

返回最佳分數(shù)。

玩家最小化得分:

c96a749a-4fa9-11ef-817b-92fbcf53809c.png

初始化 best_score 為正無窮。

遍歷每個空位置,模擬玩家下棋。

遞歸調(diào)用 minimax 計算機器人的最佳應對分數(shù)。

恢復棋盤狀態(tài),更新 best_score。

返回最佳分數(shù)。

computer_move 函數(shù)

computer_move 函數(shù)用來確定機器人下一步應該下到哪里。

c97cb24a-4fa9-11ef-817b-92fbcf53809c.png

步驟解析

1.初始化變量:

c98d4812-4fa9-11ef-817b-92fbcf53809c.png

初始化 best_score 為負無窮,用來追蹤最佳分數(shù)。move 用來記錄最佳移動位置。

2.遍歷棋盤找空位:

c996bbb8-4fa9-11ef-817b-92fbcf53809c.png

遍歷每個位置,如果是空位,模擬機器人在此下棋。

調(diào)用 minimax 計算此移動的分數(shù)。

恢復棋盤狀態(tài)。

如果當前移動的分數(shù)大于 best_score,更新 best_score 和 move。

3.返回最佳移動位置:

c9a32d9e-4fa9-11ef-817b-92fbcf53809c.png

如果找到最佳移動位置,返回該位置的坐標。

總結

Minimax 算法:通過遞歸搜索所有可能的棋步,評估每個棋步的得分,最大化機器人的得分,最小化玩家的得分。

確定最佳移動:遍歷所有可能的移動,調(diào)用 minimax 算法計算每個移動的得分,并選擇得分最高的移動。

贏者檢測

贏者檢測是通過 check_win 函數(shù)實現(xiàn)的。該函數(shù)會檢查棋盤的行、列和對角線,判斷某個玩家是否已經(jīng)獲勝。

check_win 函數(shù)

c9ab09f6-4fa9-11ef-817b-92fbcf53809c.png

步驟解析

1.檢查行和列:

c9c1fff8-4fa9-11ef-817b-92fbcf53809c.png

遍歷每一行,檢查該行是否全部是當前玩家的棋子。如果是,返回 True。

遍歷每一列,檢查該列是否全部是當前玩家的棋子。如果是,返回 True。

2.檢查對角線:

c9cdac2c-4fa9-11ef-817b-92fbcf53809c.png

檢查主對角線(從左上到右下),是否全部是當前玩家的棋子。如果是,返回 True。

檢查副對角線(從右上到左下),是否全部是當前玩家的棋子。如果是,返回 True。

3.未找到獲勝者:

c9dec25a-4fa9-11ef-817b-92fbcf53809c.png

如果沒有找到任何一行、一列或?qū)蔷€全部是當前玩家的棋子,返回 False。

c9ef77ee-4fa9-11ef-817b-92fbcf53809c.gif

完整代碼:

c9feb344-4fa9-11ef-817b-92fbcf53809c.pngca0bcbb0-4fa9-11ef-817b-92fbcf53809c.pngca179b02-4fa9-11ef-817b-92fbcf53809c.pngca332412-4fa9-11ef-817b-92fbcf53809c.pngca47de0c-4fa9-11ef-817b-92fbcf53809c.png

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

    關注

    25

    文章

    4898

    瀏覽量

    97063
  • board
    +關注

    關注

    0

    文章

    37

    瀏覽量

    19692
  • Vision
    +關注

    關注

    1

    文章

    194

    瀏覽量

    18013
收藏 人收藏

    評論

    相關推薦

    2013全國電子預測

    2013預測
    發(fā)表于 08-20 22:25

    歷年元器件清單與賽

    2003--2013年歷年元器件清單與賽,可以幫助分析預測,很全
    發(fā)表于 08-08 13:05

    ` 本帖最后由 1767802879 于 2015-8-6 10:49 編輯 猜:1.視頻傳輸:針對今年提供的器件攝像頭,它的規(guī)定很奇怪,指定為AV輸出。這也就意味著,攝像頭和數(shù)字電路相關
    發(fā)表于 08-06 10:46

    天津ti

    天津ti。。。
    發(fā)表于 07-25 08:24

    浙江

    一共七,一樣的吧
    發(fā)表于 07-25 10:25

    2017年全國E如何實現(xiàn)?

    今年的已經(jīng)公布,對于E大家有何想法?
    發(fā)表于 08-09 10:53

    2017全國I如何實現(xiàn)?

    2017全國I如何實現(xiàn)?
    發(fā)表于 08-09 11:17

    2020E復盤相關資料分享

    其實對于大二的我來說也還好啦,也可以為2021的國備戰(zhàn)起著指導作用了。第一次接觸電還是在大一下的暑假,當時的在我們學校舉辦,而我的學長們也在
    發(fā)表于 02-14 07:54

    2014專科電子(J、I、G

    專用資料,很詳細,2014??齐娮?b class='flag-5'>賽(J、I、G)題目,感興趣的小伙伴們可以看看。
    發(fā)表于 07-26 11:37 ?0次下載

    2019年H電磁炮實錄

    2019年H電磁炮實錄你好學弟!這里...
    發(fā)表于 11-10 09:05 ?44次下載
    2019年<b class='flag-5'>電</b><b class='flag-5'>賽</b>H<b class='flag-5'>題</b>電磁炮實錄

    梁山派開發(fā)板-21年F-送藥小車-分析

    全國產(chǎn)開源開發(fā)板,基于GD32F4系列,21F-送藥小車分析
    的頭像 發(fā)表于 07-31 10:13 ?1191次閱讀
    梁山派開發(fā)板-21年<b class='flag-5'>電</b><b class='flag-5'>賽</b>F<b class='flag-5'>題</b>-送藥小車-<b class='flag-5'>賽</b><b class='flag-5'>題</b>分析

    2023年E國獎開源分享

    2023年E開源分享,主控為CW32!
    的頭像 發(fā)表于 10-09 16:18 ?6948次閱讀
    2023年<b class='flag-5'>電</b><b class='flag-5'>賽</b><b class='flag-5'>E</b><b class='flag-5'>題</b>國獎開源分享

    2023A國獎CW32 開源分享

    A開源分享,主控為CW32
    的頭像 發(fā)表于 11-02 10:16 ?2260次閱讀
    2023<b class='flag-5'>電</b><b class='flag-5'>賽</b>A<b class='flag-5'>題</b>國獎CW32 開源分享

    Vision_Board_schematic

    Vision_Board_schematic
    發(fā)表于 03-20 09:59 ?9次下載

    Vision Board 創(chuàng)客營】Vision Board上的DAC實踐

    1、概述 感謝官方舉辦【Vision Board 創(chuàng)客營】活動,使得我有機會試用Vision Board開發(fā)板,體驗嵌入式AI的快樂。在此,再次感謝官方以及導師們的熱情幫助。在本次活動
    的頭像 發(fā)表于 04-24 21:55 ?528次閱讀
    【<b class='flag-5'>Vision</b> <b class='flag-5'>Board</b> 創(chuàng)客營】<b class='flag-5'>Vision</b> <b class='flag-5'>Board</b>上的DAC實踐