電子發(fā)燒友App

硬聲App

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

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

3天內(nèi)不再提示
創(chuàng)作
電子發(fā)燒友網(wǎng)>電子資料下載>電子資料>AI解迷宮機(jī)器人

AI解迷宮機(jī)器人

2023-07-11 | zip | 7.77 MB | 次下載 | 2積分

資料介紹

構(gòu)建機(jī)器人

要構(gòu)建機(jī)器人,我們只需遵循 TI RSLK 基本套件構(gòu)建說明即可。我們已將它們附在這篇文章的示意圖部分。我們對(duì)說明所做的唯一更改是我們沒有切斷 PCB 上的任何連接。TI 提供的說明將幫助您完成除了構(gòu)建面包板和將面包板放在機(jī)器人頂部之外的所有操作。

在將面包板放在機(jī)器人頂部之前,請(qǐng)按照本文原理圖部分中的面包板原理圖將 LED 連接到它上面。以后很難做到這一點(diǎn),因?yàn)殡娋€連接將位于面包板下方。然后,為了將面包板連接到機(jī)器人,我們使用透明膠帶。您可以使用任何您喜歡的東西,包括套件中提供的螺絲,但膠帶很便宜,而且比試圖擰穿面包板容易得多。

編程機(jī)器人

要對(duì)機(jī)器人進(jìn)行編程,必須將其插入計(jì)算機(jī)上的 USB 端口,并且必須使用電機(jī)板(黑板)上的開關(guān)關(guān)閉電池。然后,在 Code Composer Studio (CCS) 中打開可下載項(xiàng)目后,單擊“調(diào)試”按鈕。這將編譯代碼并將其加載到機(jī)器人上。一旦 CCS 完成加載代碼,它就會(huì)停止機(jī)器人并等待您按下黃色播放按鈕來調(diào)試機(jī)器人。可以,也可以按紅色停止鍵,不用插電就可以使用機(jī)器人。

操作機(jī)器人

?
pYYBAGOrz2OAAQncAA0zNX88ohA919.png
?

在沒有 USB 電源的情況下打開機(jī)器人:斷開 USB 并確保機(jī)器人中有電池。如果您之前拔下了上面顯示的 2 根電線,請(qǐng)將它們插入,然后將靠近左輪的電機(jī)板(黑板)上的電源開關(guān)滑動(dòng)到打開位置。

左 Launchpad 按鈕:告訴機(jī)器人解決一個(gè)新的迷宮或停止它正在做的任何事情。充當(dāng)切換按鈕。

右 Launchpad 按鈕:告訴機(jī)器人顯示它找到的最短路徑。如果迷宮沒有完全解決,它將顯示目前為止所知道的盡可能多的迷宮。

使用 USB 調(diào)試機(jī)器人:如果您想在使用機(jī)器人時(shí)查看控制臺(tái)輸出,請(qǐng)確保您有足夠長的微型 USB 電纜讓機(jī)器人四處漫游;套件中只有一個(gè)短的。斷開下面所附 TI 構(gòu)建說明末尾提到的 2 根電源線和地線(如上圖所示)。通過 USB 將機(jī)器人插入計(jì)算機(jī),然后將電機(jī)板上的電源開關(guān)滑動(dòng)到打開位置以打開電機(jī)。重要的是不要從 USB 運(yùn)行電機(jī),因?yàn)樗鼈兊男袨榕c使用電池供電不同。這就是為什么我們斷開那 2 根電線并打開電池。

關(guān)閉機(jī)器人:將電機(jī)板(黑板)電源開關(guān)撥到關(guān)閉位置。然后按下開關(guān)旁邊的電源按鈕關(guān)閉機(jī)器人。

整體算法

機(jī)器人使用具有 4 種可能狀態(tài)的狀態(tài)機(jī):停止、運(yùn)行、獲勝和解決。

  • 停止?fàn)顟B(tài):當(dāng)機(jī)器人開啟或用戶在解決迷宮或顯示解決方案的過程中停止機(jī)器人時(shí)。
  • 運(yùn)行狀態(tài):當(dāng)它正在解決一個(gè)新的迷宮時(shí)。
  • 獲勝狀態(tài):如果它在迷宮中找到了寶藏。
  • 求解狀態(tài):當(dāng)機(jī)器人正在顯示解決迷宮的最短路徑(解決方案)時(shí)。

機(jī)器人使用 SysTick 計(jì)時(shí)器通過中斷定期讀取線傳感器線路傳感器無法自行發(fā)送中斷,因此這是最有效的替代方案。

當(dāng)機(jī)器人第一次進(jìn)入 main() 函數(shù)時(shí),它會(huì)初始化所有需要初始化的東西:它的狀態(tài)、時(shí)鐘速度、電機(jī)、保險(xiǎn)杠、線傳感器、板載按鈕、板載 LED、面包板 LED、定時(shí)器 A0、SysTick 定時(shí)器, 并中斷。然后它進(jìn)入一個(gè)永遠(yuǎn)運(yùn)行的 while 循環(huán)。

在這個(gè) while 循環(huán)中,機(jī)器人將線傳感器的值保存到一個(gè)臨時(shí)變量中,以防 SysTick 定時(shí)器中斷激活中間循環(huán)并更改全局線傳感器變量的值。然后它會(huì)根據(jù)所處的狀態(tài)采取不同的行動(dòng)。

如果機(jī)器人處于停止或獲勝狀態(tài),SysTick 計(jì)時(shí)器將禁用其中斷,然后機(jī)器人等待中斷,中斷可能來自保險(xiǎn)杠開關(guān)、Launchpad 板上的按鈕之一或計(jì)時(shí)器 A0(稍后討論并用于面包板上的 LED)。將機(jī)器人設(shè)置為等待中斷將其置于低功耗模式,因此不會(huì)浪費(fèi)電力。

如果機(jī)器人處于運(yùn)行狀態(tài),則機(jī)器人解決迷宮問題。該算法的詳細(xì)信息在下面的“迷宮解決算法”部分中進(jìn)行了解釋。

如果機(jī)器人處于求解狀態(tài),則機(jī)器人會(huì)顯示出最短路徑以解決迷宮問題。該算法的詳細(xì)信息在下面的“最短路徑算法”部分中進(jìn)行了解釋。

尋找最短路徑的邏輯

?
pYYBAGOrz3GAYtaMAARqKpaw3lk259.png
?

當(dāng)機(jī)器人在執(zhí)行下面“迷宮解決算法”部分中的算法時(shí),它還需要存儲(chǔ)最短路徑來解決它正在解決的迷宮問題。為此,使用了一個(gè)數(shù)組。每次機(jī)器人在十字路口轉(zhuǎn)彎(不僅僅是在別無選擇的地方轉(zhuǎn)彎)或掉頭時(shí),它都會(huì)將轉(zhuǎn)彎存儲(chǔ)在數(shù)組中。然后,如果最后一個(gè)轉(zhuǎn)彎不是掉頭,它會(huì)檢查最后 3 個(gè)轉(zhuǎn)彎是否可以簡(jiǎn)化為其他東西。

例如,機(jī)器人向左轉(zhuǎn),然后掉頭,然后向左轉(zhuǎn),可以簡(jiǎn)化為在那個(gè)十字路口直行。因?yàn)樗亲筠D(zhuǎn)后掉頭的,顯然原來的左轉(zhuǎn)是錯(cuò)誤的。

以下是可以簡(jiǎn)化的模式。“L”= 左,“R”= 右,“S”= 直線,“U”= 掉頭。

  • 南 -> R
  • LUL -> S
  • 規(guī)則 -> U
  • LUS -> R

迷宮解決算法

當(dāng)機(jī)器人正在解決一個(gè)新的迷宮時(shí),該算法就會(huì)運(yùn)行。它由多個(gè) if-else-if-statements 組成,其中只有一個(gè)執(zhí)行。if 語句遵循左偏規(guī)則,這意味著機(jī)器人總是走它可能走的最左邊的路徑。

首先,如果線傳感器讀取全白,這意味著機(jī)器人不在一條線上,它可能只是跑出了線。機(jī)器人因此轉(zhuǎn)身并重新讀取線傳感器以獲得更新值。它還添加了一個(gè)“U”來表示最短路徑數(shù)組中的掉頭。

如果所有傳感器都是黑色的,則機(jī)器人位于丁字路口或四向路口。因?yàn)闄C(jī)器人偏左,它會(huì)走左路,重新讀取線傳感器以獲得更新值,并在最短路徑數(shù)組中存儲(chǔ)一個(gè)“L”。在左轉(zhuǎn)之前,機(jī)器人向前移動(dòng)半輛汽車,使車輪與十字路口對(duì)齊。它還在左轉(zhuǎn)時(shí)保持面包板上的左側(cè) LED 亮起。

如果機(jī)器人找到了寶藏,它會(huì)向前移動(dòng)一點(diǎn)點(diǎn)并重新檢查以確保它真的找到了寶藏。如果是,機(jī)器人進(jìn)入勝利狀態(tài),停止電機(jī),并設(shè)置定時(shí)器 A0 使機(jī)器人頂部面包板上的 LED 閃爍。

如果有左轉(zhuǎn)彎,機(jī)器人會(huì)向前移動(dòng)半輛車,看看是在十字路口還是只是轉(zhuǎn)彎。然后它向左轉(zhuǎn),同時(shí)打開面包板上的左側(cè) LED,如果它是一個(gè)交叉路口而不僅僅是一個(gè)轉(zhuǎn)彎,它還會(huì)在最短路徑數(shù)組中添加一個(gè)“L”。

如果有右轉(zhuǎn)彎,機(jī)器人首先向前移動(dòng)一點(diǎn)點(diǎn),然后重新讀取線傳感器以確保它是右轉(zhuǎn)彎,左轉(zhuǎn)彎不是一個(gè)選項(xiàng)。如果左邊不是一個(gè)選項(xiàng),它會(huì)向前移動(dòng)汽車的剩余一半并檢查直行是否是一個(gè)選項(xiàng)。然后它要么直行要么右轉(zhuǎn)。如果它直行,它會(huì)在最短路徑數(shù)組中保存一個(gè)“S”。如果它走對(duì)了,它會(huì)在轉(zhuǎn)彎時(shí)打開右側(cè)的面包板 LED。

接下來的 else-if 語句用于簡(jiǎn)單地沿著一條直線,因?yàn)槠渌厥鈼l件都不為真。為此,它會(huì)找到最外面的線傳感器并相應(yīng)地進(jìn)行校正。例如,如果最左側(cè)的線傳感器檢測(cè)到黑色,則機(jī)器人應(yīng)通過向左轉(zhuǎn)大量并同時(shí)直行來進(jìn)行糾正。

最短路徑算法

當(dāng)機(jī)器人顯示通過已解決的迷宮的最短路徑時(shí),該算法就會(huì)運(yùn)行。就像迷宮解決算法一樣,它由多個(gè) if-else-if 語句組成,每次 while 循環(huán)運(yùn)行時(shí)只執(zhí)行其中的一個(gè)。

首先,如果機(jī)器人的第一個(gè)轉(zhuǎn)彎是掉頭,它會(huì)向前移動(dòng) 1 個(gè)汽車長度,然后掉頭。它需要先向前移動(dòng),以便在它轉(zhuǎn)身后線傳感器處于一個(gè)好的位置。

如果機(jī)器人已經(jīng)展示了目前在迷宮中解決的所有問題,但仍未找到寶藏,則機(jī)器人切換到運(yùn)行狀態(tài)并開始解決迷宮問題。

如果機(jī)器人找到了寶藏,它的行為與它在迷宮解決算法中的行為完全相同。它向前移動(dòng)了一點(diǎn)點(diǎn)并重新檢查以確保它真的找到了寶藏。如果是,機(jī)器人進(jìn)入勝利狀態(tài),停止電機(jī),并設(shè)置定時(shí)器 A0 使機(jī)器人頂部面包板上的 LED 閃爍。

如果前方有左轉(zhuǎn)和/或右轉(zhuǎn)彎,這意味著前方有潛在的交叉路口,機(jī)器人會(huì)首先向前移動(dòng)半輛車,并檢查是否可以直行。然后,它使用它對(duì)左、直和右可用性的了解來確定這是一個(gè)十字路口還是一個(gè)轉(zhuǎn)彎。如果它只是一個(gè)轉(zhuǎn)彎,它會(huì)跟隨轉(zhuǎn)彎。如果是十字路口,它會(huì)根據(jù)最短路徑數(shù)組的指示行事。

最后,如果上述 if 語句均不成立,機(jī)器人將像在迷宮解決算法中一樣簡(jiǎn)單地沿著這條線走。

循環(huán)迷宮

我們的代碼使機(jī)器人能夠通過循環(huán)解決迷宮問題,并顯示它找到的通往寶藏的路徑。然而,它不一定會(huì)找到穿過這樣一個(gè)迷宮的最短路徑,因?yàn)檠h(huán)允許通往寶藏的多條路徑。

要修改算法以找到帶環(huán)路的最短路徑,機(jī)器人需要在移動(dòng)時(shí)跟蹤距離或時(shí)間,以便識(shí)別它已經(jīng)訪問了哪些交叉路口以及它從每個(gè)交叉路口行進(jìn)的方向。它還需要沿著迷宮中的每條線行進(jìn),以確保它找到了最短路徑。

其他雜項(xiàng)算法

SysTick 計(jì)時(shí)器/線路傳感器:SysTick 計(jì)時(shí)器設(shè)置為每 0.025 秒發(fā)送一次中斷,此時(shí)機(jī)器人將讀取 8 個(gè)線路傳感器。為讀取線傳感器,代碼使用 LED 為每個(gè)傳感器的電容器充電 10μs。接下來,它將線路傳感器切換為輸入并使電容器放電 800μs。然后讀取每個(gè)傳感器的數(shù)字值。最后,LED 被關(guān)閉。該算法之所以有效,是因?yàn)槊總€(gè)線傳感器中的電容器在黑紙和白紙上以不同的速率放電。

定時(shí)器 A0/LED 閃爍:定時(shí)器 A0 在機(jī)器人開啟時(shí)初始化,但直到機(jī)器人頂部面包板上的 1 個(gè)或多個(gè) LED 需要開始閃爍時(shí)才啟動(dòng)。然后,它通過使用中斷調(diào)用上次啟動(dòng)時(shí)提供給它的函數(shù)來處理閃爍適當(dāng)?shù)?LED。因?yàn)槎〞r(shí)器A0只是一個(gè)16位的定時(shí)器,定時(shí)器還使用了一個(gè)計(jì)數(shù)器,所以該函數(shù)只在每50次中斷時(shí)調(diào)用一次,而不是每次中斷都調(diào)用一次。

電機(jī):電機(jī)使用 PWM(脈沖寬度調(diào)制)運(yùn)行。為了使輪子旋轉(zhuǎn)得更快,它們?cè)诟叩臅r(shí)間百分比(每個(gè)周期幾微秒)內(nèi)被賦予數(shù)字 1 值。當(dāng)電機(jī)需要做某事時(shí),它們會(huì)得到一個(gè)方向并被阻止休眠。然后根據(jù)他們需要的速度為他們提供適當(dāng)?shù)?PWM 信號(hào)。

緩沖開關(guān):緩沖開關(guān)在 Launchpad 板上使用低電平有效邏輯和內(nèi)部上拉電阻。當(dāng)按下保險(xiǎn)杠開關(guān)時(shí),會(huì)發(fā)生中斷,使機(jī)器人打開綠色 LED,反轉(zhuǎn),轉(zhuǎn)身 180 度,然后繼續(xù)解決迷宮。它還向最短路徑數(shù)組添加了一個(gè)“U”。

開始/停止按鈕:Launchpad 板上有左右按鈕。它們的功能在上一節(jié)“操作機(jī)器人”中進(jìn)行了描述。每個(gè)按鈕在釋放時(shí)發(fā)送中斷,而不是在按下時(shí)發(fā)送中斷。這確保了當(dāng)用戶仍在按下按鈕時(shí)機(jī)器人不會(huì)突然開始移動(dòng)。

檢查寶藏:作為解決迷宮和顯示最短路徑算法的一部分,機(jī)器人會(huì)不斷檢查是否找到寶藏。它通過尋找一個(gè)黑色傳感器,然后是一個(gè)白色傳感器,然后是另一個(gè)黑色傳感器來檢測(cè)它是否找到了寶藏。只要存在黑到白和白到黑的過渡,就可以有任意數(shù)量的黑白傳感器。它不檢查黑-白-黑-白-黑,即使寶藏看起來就是這樣,因?yàn)檫@需要機(jī)器人很好地居中,從而使其不可靠。我們也從未使用黑-白-黑算法和上面“迷宮解決算法”部分中描述的對(duì)獲勝條件的雙重檢查得到誤報(bào)。


下載該資料的人也在下載 下載該資料的人還在閱讀
更多 >

評(píng)論

查看更多

下載排行

本周

  1. 1無鉛焊接的可靠性
  2. 1.03 MB   |  5次下載  |  1 積分
  3. 2GBT1094.11-2022電力變壓器第11部分:干式變壓器
  4. 14.12 MB   |  3次下載  |  免費(fèi)
  5. 3PT500齒輪傳動(dòng)動(dòng)力學(xué)綜合測(cè)試實(shí)驗(yàn)臺(tái)
  6. 0.16 MB   |  3次下載  |  免費(fèi)
  7. 4爬電距離和電氣間隙計(jì)算
  8. 0.75 MB   |  2次下載  |  1 積分
  9. 5SX1308應(yīng)用電路圖與SX1308升壓電路圖
  10. 0.18 MB   |  1次下載  |  免費(fèi)
  11. 6ADC參數(shù)單位換算
  12. 761.94KB   |  1次下載  |  免費(fèi)
  13. 7串口工具UartAssist5.0.exe
  14. 0.60 MB   |  1次下載  |  免費(fèi)
  15. 8UCC38C42 25瓦自諧振復(fù)位正激變換器
  16. 320.6KB   |  1次下載  |  免費(fèi)

本月

  1. 1ACDC變換器的原理圖免費(fèi)下載
  2. 0.26 MB   |  65次下載  |  免費(fèi)
  3. 2無刷電機(jī)控制方案設(shè)計(jì)合作
  4. 1.05 MB   |  22次下載  |  免費(fèi)
  5. 3美的超薄電磁爐TM-S1-09B主板原理圖
  6. 0.08 MB   |  20次下載  |  免費(fèi)
  7. 4純電動(dòng)汽?的主要部件及?作原理
  8. 5.76 MB   |  12次下載  |  5 積分
  9. 5GP328和GP88S對(duì)講機(jī)的維修實(shí)列資料合集免費(fèi)下載
  10. 0.03 MB   |  10次下載  |  10 積分
  11. 6舒爾SLX4無線話筒接收機(jī)原理圖:二次變頻超外差部分
  12. 0.27 MB   |  8次下載  |  免費(fèi)
  13. 7IP5385_DEMO開發(fā)資料
  14. 1.96 MB   |  7次下載  |  2 積分
  15. 8i.MX Linux開發(fā)實(shí)戰(zhàn)指南—基于野火i.MX系列開發(fā)板
  16. 17.86 MB   |  7次下載  |  免費(fèi)

總榜

  1. 1matlab軟件下載入口
  2. 未知  |  935115次下載  |  10 積分
  3. 2開源硬件-PMP21529.1-4 開關(guān)降壓/升壓雙向直流/直流轉(zhuǎn)換器 PCB layout 設(shè)計(jì)
  4. 1.48MB  |  420061次下載  |  10 積分
  5. 3Altium DXP2002下載入口
  6. 未知  |  233084次下載  |  10 積分
  7. 4電路仿真軟件multisim 10.0免費(fèi)下載
  8. 340992  |  191363次下載  |  10 積分
  9. 5十天學(xué)會(huì)AVR單片機(jī)與C語言視頻教程 下載
  10. 158M  |  183329次下載  |  10 積分
  11. 6labview8.5下載
  12. 未知  |  81581次下載  |  10 積分
  13. 7Keil工具M(jìn)DK-Arm免費(fèi)下載
  14. 0.02 MB  |  73805次下載  |  10 積分
  15. 8LabVIEW 8.6下載
  16. 未知  |  65985次下載  |  10 積分