電子發(fā)燒友App

硬聲App

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

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

3天內(nèi)不再提示
創(chuàng)作
電子發(fā)燒友網(wǎng)>電子資料下載>電子資料>機(jī)器人系統(tǒng)研討會:TI RSLK MAX上的Arduino編程

機(jī)器人系統(tǒng)研討會:TI RSLK MAX上的Arduino編程

2022-11-16 | zip | 49.65 MB | 次下載 | 免費(fèi)

資料介紹

描述

此頁面上提供了研討會體驗(yàn)所需的一切。

本次研討會的參與者將獲得構(gòu)建 TI-RSLK MAX 機(jī)器人平臺、測試、定制和與之競爭的經(jīng)驗(yàn)。它是一款輪式機(jī)器人車輛,使用 TI SimpleLink MSP432 LaunchPad,使其高度模塊化。使用 Energia,TI 相當(dāng)于簡單的 Arduino 風(fēng)格的腳本代碼,您將獲得完整的實(shí)驗(yàn)室設(shè)置和教學(xué)材料。這是一種以可訪問和有趣的方式引入電子嵌入式系統(tǒng)的興奮的低成本方式。由于 TI LaunchPad 是開源和模塊化硬件,我們還可以添加 BoosterPack 模塊來擴(kuò)充我們的電路。本次研討會將重點(diǎn)介紹使用基本 TI-RSLK MAX 套件隨附的板載傳感。IR 反射、凹凸開關(guān)和編碼器。

Arduino 編程適用于編程經(jīng)驗(yàn)很少或沒有編程經(jīng)驗(yàn)的學(xué)生,適合 K-12 學(xué)生或大學(xué)一年級學(xué)生使用電子產(chǎn)品進(jìn)行探索和原型制作。對于高級功能,鼓勵學(xué)生使用 Code Composer Studio 和 C 編程為 TI-RSLK MAX 系統(tǒng)編寫固件代碼。

如需了解更多機(jī)器人學(xué)知識,請查看 TI-RSLK MAX,這是一個全面的開源課程和硬件包,通過機(jī)電一體化的應(yīng)用教授嵌入式系統(tǒng)的基礎(chǔ)知識。TI-RSLK 為機(jī)器人系統(tǒng)知識提供了先進(jìn)的墊腳石,但初學(xué)者仍然可以通過完整的講座和實(shí)驗(yàn)室活動獲得。

實(shí)驗(yàn)室 0 - 準(zhǔn)備工作

準(zhǔn)備好電腦和螺絲刀。建議使用 Chrome 瀏覽器來使用本次研討會的一些在線元素。

在我們開始之前,請確保您:

1.下載并安裝最新版本的Arduino IDE(1.8.13)。

2.將 URL 添加到您的 File > Preferences > Additional Board Manager URLs。如果您愿意,還可以選中顯示行號框,如果您希望它更大,請調(diào)整字體大小。

3.轉(zhuǎn)到 Tools > Boards > Boards Manager 并使用 Energia MSP432 滾動到列表底部并安裝 5.29.1

注意:此步驟需要幾分鐘,安裝時間在 10-20 分鐘之間。

4.安裝完成后,需要在Arduino IDE中選擇板子和COM口。轉(zhuǎn)到 Tool > Boards,現(xiàn)在您應(yīng)該會看到“Energia MSP432 Red Boards”>“Red LaunchPad MSP432P401R EMT”,并確保選中它。

5.您還應(yīng)該選擇正確的 COM 端口。在通過 USB 將 LaunchPad 插入計(jì)算機(jī)并安裝 LaunchPad 驅(qū)動程序(在后面的步驟中使用 RSLK 調(diào)試工具 GUI 完成)之后,可以完成此步驟。轉(zhuǎn)到工具 > COM 端口以從可用選項(xiàng)中進(jìn)行選擇。LaunchPad 填充了兩個 COM 端口。MacOS 用戶將看到端口 001 和 004 已填充,請使用端口 1。Windows 用戶可以通過轉(zhuǎn)到設(shè)備管理器并找到 XDS110 UART 來驗(yàn)證他們的 COM 端口。

6.在本頁底部的代碼部分添加可下載的 RSLK 機(jī)器人庫。轉(zhuǎn)到 Sketch > 包含庫 > 添加 .ZIP 庫。選擇下載的zip庫的文件路徑,點(diǎn)擊ok。它應(yīng)該說添加了庫,您可以通過轉(zhuǎn)到文件 > 示例 > TI-Robot-Lib 來檢查這一點(diǎn),并查看庫中提供的示例代碼。

7.當(dāng)我們開始編程時,應(yīng)該加載并準(zhǔn)備好示例,但不要擔(dān)心運(yùn)行任何代碼。接下來,您將要組裝您的機(jī)器人并使用調(diào)試工具對其進(jìn)行功能測試。

實(shí)驗(yàn) 1 - 構(gòu)建 TI-RSLK MAX 機(jī)器人

所需硬件

  • TI-RSLK MAX 套件
  • 6 節(jié) AA 電池
  • 小十字螺絲刀(可選)

在這個實(shí)驗(yàn)室中,我們將組裝我們的機(jī)器人。

您還需要一個電源,我們可以為機(jī)器人配備電源,使其真正移動。TI-RSLK 需要 6 節(jié)標(biāo)準(zhǔn) AA 電池。如果您愿意,它也可以配備可充電的鎳氫電池,但可更換的堿性電池可以很好地供個人使用,并且可以持續(xù)很長時間。

按照這些說明組裝您的機(jī)器人

TI-RSLK MAX 只是快速組合在一起的幾個組件

1) 開始前先觀看組裝視頻并查看施工指南

- 一個。請注意,機(jī)箱板應(yīng)預(yù)先安裝,因此即使視頻涵蓋了它,您也無需將其放在上面

- 乙。請注意,視頻中沒有介紹面包板,但您可以使用下圖查看它們的安裝位置。您無需解開粘合墊,只需將螺釘穿過粘合劑即可將其擰入支架。要固定支架,您需要卸下電池蓋并將固定螺母安裝到電池倉內(nèi)側(cè)的指定位置,以便將支架擰入。

2) 驗(yàn)證所有 LaunchPad 上的 5V 跳線是否已移除,它們應(yīng)該在工廠完成,但只需驗(yàn)證,否則會導(dǎo)致災(zāi)難性故障。

pYYBAGNzcSGABnXdAAA2TtQyUfM035.png
?
pYYBAGNzcSSAMQluAAEUQ6waNt0121.png
?

3) 確保將電機(jī)安裝座完全固定好,使其與底盤齊平。如果你不這樣做,那么你很容易彎曲和折斷固定片,這會阻止你完全插入電機(jī),直到那些破損的片被移除,并且可能會在以后導(dǎo)致一些失速問題

pYYBAGNzcSaAHvnuAAB4E6t_Xh4311.png
?

4) 面包板支架放置在藍(lán)色圓圈處

poYBAGNzcSiADh7-AACGqoGh7qA440.jpg
?
pYYBAGNzcSuAVhDNAAC6wznzkQA172.jpg
?

5) 做一個快速的功能檢查。確認(rèn)碰撞開關(guān)是否發(fā)出咔噠聲,電源按鈕在 ON/OFF 開關(guān)處于 OFF 位置時工作,四個大電容器在機(jī)箱板上就位且沒有損壞,用手轉(zhuǎn)動車輪時沒有摩擦.

6) 組裝后立即使用在線調(diào)試工具:

- 一個。這使您可以驗(yàn)證一切是否正常。如果您想確保您的機(jī)器人沒有損壞,它也會在以后為您提供幫助。

- 乙。使用 Chrome 或 Firefox 瀏覽器并安裝瀏覽器擴(kuò)展 + TI Cloud Agent 本地驅(qū)動程序。這些對于讓 LaunchPad 正常工作至關(guān)重要,因此如果安裝不正確,GUI 將無法工作。當(dāng)我們稍后運(yùn)行 Arduino 時,安裝 TI Cloud Agent 也很重要。

- C。如果儀表板有任何問題(未連接硬件等),請嘗試刷新頁面并重試。如果您完全無法讓 GUI 工作,您也可以嘗試下載本地副本嘗試。

?

Mac 操作系統(tǒng)

Linux 64 位

- d。每次都會下載測試固件,因此在加載頁面時請確保 LaunchPad 已通過 USB 數(shù)據(jù)線連接到 PC

- e。在您確認(rèn)機(jī)箱板的電源打開之前,電機(jī)或光傳感器將無法工作。使用機(jī)箱板上的電源按鈕,您應(yīng)該看到藍(lán)色電源 LED 指示它已打開。開/關(guān)開關(guān)可能會令人困惑,但最好將其留在關(guān)閉位置。如果您將其打開,它將工作,但無法將其關(guān)閉,直到您將其關(guān)閉并按下電源按鈕。

- F。要將其關(guān)閉,請確保將開/關(guān)開關(guān)撥到 OFF 并按下電源按鈕,您應(yīng)該會看到藍(lán)色 LED 熄滅

- G。如果您發(fā)現(xiàn)電機(jī)不工作或聽到一些摩擦聲,請確保磁鐵沒有太緊并防止電機(jī)齒輪移動。您可以用指甲松開電機(jī)軸上的磁鐵。

- H。如果您發(fā)現(xiàn)碰撞開關(guān)有任何問題,請確保連接正確對齊。對于線路傳感器的任何問題,請確保其方向正確并且所有連接都對齊。

您的機(jī)器人已組裝并驗(yàn)證功能正常。希望它感覺相當(dāng)穩(wěn)定并準(zhǔn)備好滾動。

實(shí)驗(yàn) 2 - Arduino 編程介紹

所需硬件

  • 組裝好的 TI-RSLK MAX(安裝電池并進(jìn)行功能測試)

所需軟件

  • Arduino IDE
  • TI-RSLK MAX 機(jī)器人庫

Arduino IDE 允許您通過 TI LaunchPad 使用 Arduino 風(fēng)格編程開始快速原型設(shè)計(jì)。這使得在項(xiàng)目開始時測試不同的社區(qū)硬件解決方案并將它們集成到自定義應(yīng)用程序中非常棒。

在本實(shí)驗(yàn)中,我們將設(shè)置我們的開發(fā)環(huán)境。我們可以做的第一件事是讓 LED 閃爍,以確保我們可以用計(jì)算機(jī)對微控制器進(jìn)行編程。

1.打開 Arduino IDE。

2.首先,確保您選擇了您的開發(fā)板,方法是轉(zhuǎn)到工具 > 開發(fā)板并在菜單上查找“LaunchPad with MSP432”(如果您還沒有的話)。如果您的 LaunchPad 板不存在,請轉(zhuǎn)到 Boards Manager 并安裝您的 LaunchPad 板包。MSP432 板應(yīng)該是列表中的最后一個選項(xiàng)。注意:MSP432 EMT 表示多任務(wù)處理并具有 RTOS 功能,但我們現(xiàn)在不需要。

3.如果您正確安裝了驅(qū)動程序,那么您應(yīng)該會在工具 > 端口下看到 COM 端口。如果有多個選項(xiàng),請選擇具有 UART 功能的端口。您可以在計(jì)算機(jī)的設(shè)備管理器中驗(yàn)證 COM 端口。

現(xiàn)在我們將第一次運(yùn)行我們的代碼示例。

庫中的前兩個示例是相同的代碼 01_Bump_Switch_Motor_Bare 和 02_Bump_Switch_Motor_Simplified,它們將向前移動機(jī)器人,直到碰撞開關(guān)碰到什么東西。非常簡單,可以跳過。裸代碼使用對庫的直接調(diào)用,簡化代碼使用庫中定義的函數(shù)。

4.轉(zhuǎn)到文件 > 示例 > 自定義機(jī)器人庫 > TI-Robot-Lib > 03_Bump_Switch_LED_Bare。單擊上傳按鈕,完成后您可以點(diǎn)擊碰撞開關(guān)以測試不同的 LED 并驗(yàn)證新代碼是否可以閃爍到 RSLK MAX。

5.接下來,您可以運(yùn)行跳舞機(jī)器人示例。這將為您的機(jī)器人編程提供一個有趣的開始。轉(zhuǎn)到文件 > 示例 > 自定義機(jī)器人庫 > TI-Robot-Lib > 05_Dancing_Robot_Simplified。程序上傳后,綠色 LED 將閃爍,表示正在等待按鈕按下。按 S1(左側(cè))按鈕或 S2(右側(cè))按鈕告訴機(jī)器人開始舞蹈序列。您也可以嘗試 06_Dancing_Robot_2_Simplified,這是一個略有不同的動作。

或者,通過轉(zhuǎn)到文件 > 新建打開一個新草圖。粘貼下面的示例代碼并運(yùn)行它。

#include "Energia.h"  
#include "SimpleRSLK.h"  
  
bool hit_obstacle = false;  
void waitBtnPressed() {  
 while(digitalRead(LP_S2_PIN) == 1){  
   digitalWrite(LP_RGB_LED_GREEN_PIN, HIGH);  
   delay(500);  
   digitalWrite(LP_RGB_LED_GREEN_PIN, LOW);  
   delay(500);  
 }  
}  
void checkCollision() {  
 for(int x = 0;x<6;x++)  
 {  
   /* Check if bump switch was pressed  
    *  Parameter:  
    *    bump switch number -> 0-5  
    *    Returns:  
    *      true -> if specific switch was pressed  
    *      false -> if specific switch was not pressed  
    */  
   if(isBumpSwitchPressed(x) == true) {  
     hit_obstacle = true;  
     Serial.println("Collision detected");  
     disableMotor(BOTH_MOTORS);  
     break;  
   }  
 }  
}  
void setup() {  
 /* Set serial communication to 115200 baud rate for MSP432 */  
 Serial.begin(115200);  
 delay(500);  
 /* Run setup code */  
 setupRSLK();  
 /* Initialize LED pins as outputs */  
 pinMode(LED_FR_PIN, OUTPUT);   
 pinMode(LED_FL_PIN, OUTPUT);   
 pinMode(LED_BR_PIN, OUTPUT);   
 pinMode(LED_BL_PIN, OUTPUT);  
 pinMode(LP_RED_LED_PIN, OUTPUT);  
 pinMode(LP_RGB_LED_RED_PIN, OUTPUT);  
 pinMode(LP_RGB_LED_BLUE_PIN, OUTPUT);   
 pinMode(LP_RGB_LED_GREEN_PIN, OUTPUT);  
 /* Initialize LaunchPad buttons as inputs */  
 pinMode(LP_S1_PIN, INPUT_PULLUP);  
 pinMode(LP_S2_PIN, INPUT_PULLUP);  
}  
void loop() {  
 Serial.println("Waiting until left button is pushed");  
 /* Wait until button is pressed to start robot */  
 waitBtnPressed();  
 /* Wait two seconds before starting */  
 delay(2000);  
 digitalWrite(LP_RGB_LED_BLUE_PIN, HIGH);  
/* Enables specified motor.  
 *  Parameter:  
 *   Motor your referencing -> LEFT_MOTOR  RIGHT_MOTOR  BOTH_MOTORS  
 */  
 enableMotor(BOTH_MOTORS);  
/* Set direction of motor rotation.  
 *  Parameter:  
 *   Motor your referencing -> LEFT_MOTOR  RIGHT_MOTOR  BOTH_MOTORS  
 *   Direction -> MOTOR_DIR_FORWARD  MOTOR_DIR_BACKWARD  
 */  
 setMotorDirection(LEFT_MOTOR,MOTOR_DIR_FORWARD);  
 setMotorDirection(RIGHT_MOTOR,MOTOR_DIR_FORWARD);  
/* Set speed of motor.  
 *  Parameter:  
 *   Motor your referencing -> LEFT_MOTOR  RIGHT_MOTOR  BOTH_MOTORS  
 *   Speed -> 0 - 100  
 */  
 setMotorSpeed(BOTH_MOTORS,10);  
 while(!hit_obstacle) {  
   /* Move robot in place */  
   /* Right turn in place */  
   setMotorDirection(LEFT_MOTOR, MOTOR_DIR_BACKWARD);  
   setMotorDirection(RIGHT_MOTOR, MOTOR_DIR_FORWARD);  
   delay(1000);  
   /* Left turn in place */  
   setMotorDirection(LEFT_MOTOR, MOTOR_DIR_FORWARD);  
   setMotorDirection(RIGHT_MOTOR, MOTOR_DIR_BACKWARD);  
   delay(1000);  
   /* 360 spin right */  
   setMotorDirection(LEFT_MOTOR, MOTOR_DIR_FORWARD);  
   setMotorDirection(RIGHT_MOTOR, MOTOR_DIR_BACKWARD);  
   setMotorSpeed(BOTH_MOTORS,50);  
   delay(800);  
   setMotorSpeed(BOTH_MOTORS,10);  
   /* 360 spin left */  
   setMotorDirection(LEFT_MOTOR, MOTOR_DIR_BACKWARD);  
   setMotorDirection(RIGHT_MOTOR, MOTOR_DIR_FORWARD);  
   setMotorSpeed(BOTH_MOTORS,50);  
   delay(800);  
   setMotorSpeed(BOTH_MOTORS,10);  
   /* Left turn in place */  
   setMotorDirection(LEFT_MOTOR, MOTOR_DIR_BACKWARD);  
   setMotorDirection(RIGHT_MOTOR, MOTOR_DIR_FORWARD);  
   delay(500);  
   /* Right turn in place */  
   setMotorDirection(LEFT_MOTOR, MOTOR_DIR_FORWARD);  
   setMotorDirection(RIGHT_MOTOR, MOTOR_DIR_BACKWARD);  
   delay(1000);  
   /* Left turn in place */  
   setMotorDirection(LEFT_MOTOR, MOTOR_DIR_BACKWARD);  
   setMotorDirection(RIGHT_MOTOR, MOTOR_DIR_FORWARD);  
   delay(1000);  
   /* 360 spin right */  
   setMotorDirection(LEFT_MOTOR, MOTOR_DIR_FORWARD);  
   setMotorDirection(RIGHT_MOTOR, MOTOR_DIR_BACKWARD);  
   setMotorSpeed(BOTH_MOTORS,50);  
   delay(800);  
   setMotorSpeed(BOTH_MOTORS,10);  
   /* 360 spin left */  
   setMotorDirection(LEFT_MOTOR, MOTOR_DIR_BACKWARD);  
   setMotorDirection(RIGHT_MOTOR, MOTOR_DIR_FORWARD);  
   setMotorSpeed(BOTH_MOTORS,50);  
   delay(800);  
   setMotorSpeed(BOTH_MOTORS,10);  
 }   
}

這段代碼讓您的機(jī)器人在原地旋轉(zhuǎn)以顯示我們擁有的簡單電機(jī)控制。您可能需要對其進(jìn)行修改,因?yàn)闄C(jī)器人所在的表面會影響其轉(zhuǎn)動速度。不要太掛在這部分上,因?yàn)槲覀儗⒃谙乱粋€實(shí)驗(yàn)室中添加更多的自治層。這再次證明了我們的電機(jī)確實(shí)可以工作,并讓我們對電機(jī)邏輯有所了解。

6.一些可選的練習(xí)可以用編碼器和線跟隨例子來完成。轉(zhuǎn)到文件 > 示例 > 自定義機(jī)器人庫 > TI-Robot-Lib > 04_Encoder_Simplified。此編碼器示例將通過串行監(jiān)視器向您顯示值,這有利于調(diào)試。

如果您想嘗試以下線路,結(jié)果將根據(jù)您可用的線路類型而有所不同。您可以通過在白紙上使用記號筆或使用電工膠帶繪制高對比度線條。您還可以從在線示例打印線軌。機(jī)器人跟隨路線的能力將根據(jù)軌道的條件而變化。

現(xiàn)在我們準(zhǔn)備測試線路跟蹤能力。通過打印出軌跡或使用黑色電工膠帶制作軌跡,在白色表面上設(shè)置黑線。設(shè)置好線路后,在以下示例中加載線路。轉(zhuǎn)到文件 > 示例 > 自定義機(jī)器人庫 > TI-Robot-Lib > 07_Line_Following_Simplified。它首先通過前進(jìn)和后退對線路進(jìn)行校準(zhǔn)。然后您可以通過再次單擊該按鈕來開始線檢測。機(jī)器人將嘗試保持在線。如果您將機(jī)器人設(shè)置為較慢的速度,它可能會更好地工作。注意:根據(jù)您的線路設(shè)置,此示例可能有點(diǎn)棘手,因此請隨意跳過。

故障排除

代碼不上傳?

  • 檢查 Arduino 調(diào)試窗口中的錯誤。編譯器會告訴你發(fā)生了什么。錯誤以紅色文本顯示。
  • 有時,您的 LaunchPad 會卡住或掛斷之前的代碼。拔下 LaunchPad 并將其重新插入以執(zhí)行完全重置。這稱為上電復(fù)位。有時使用 RESET 按鈕可以工作,但通常最好將電源斷開并讓微控制器完全復(fù)位。
  • 如果您上傳失敗,則可能是您的驅(qū)動程序未正確安裝。Arduino IDE 有時會給出錯誤“未找到未使用的 FET”,這意味著它找不到連接到您的計(jì)算機(jī)的 LaunchPad。通過運(yùn)行 TI Cloud Agent 或在本地安裝 RSLK 調(diào)試工具,確保為您的操作系統(tǒng)下載 USB 驅(qū)動程序。還要確保您的 USB 電纜不僅僅是電源。使用包裝盒中的一種以獲得最佳效果。
  • 如果您對 GUI 或第一個 LED 示例沒有任何問題,那么您的 Energia 應(yīng)該已正確設(shè)置。如果遇到任何問題,請重新啟動 LaunchPad 并重新啟動 Arduino IDE。確保在工具菜單下選擇正確的串口和板卡類型。

LED 不亮?

  • 確保您正確上傳了代碼并正確命名了 LED 引腳的變量。您的 LED 損壞的可能性很小,但我們可以通過使用相同代碼閃爍不同的 LED 來驗(yàn)證。
  • 點(diǎn)擊重置按鈕,有時 LaunchPad 需要這樣做才能運(yùn)行新上傳的程序。
?

實(shí)驗(yàn)室 3 - 基本自主機(jī)器人

所需硬件

  • 組裝好的 TI-RSLK MAX

它會導(dǎo)航嗎?

我們將繼續(xù)使用一些更復(fù)雜的示例代碼來測試我們的機(jī)器人。我們可以使用庫中的狀態(tài)機(jī)示例。轉(zhuǎn)到文件 > 示例 > 自定義機(jī)器人庫 > TI-Robot-Lib > 09_State_Machine_Simplified。或者,通過轉(zhuǎn)到文件 > 新建打開一個新草圖。粘貼下面的示例代碼并運(yùn)行它。

#include "Energia.h"  
#include "SimpleRSLK.h"  
  
/* Defines struct for state machine states */  
typedef enum  
{  
   START = 0,  
   WAIT,  
   GO,  
   GO2,  
   BUMPED1a,  
   BUMPED1b,  
   DRIVE,  
   STOP  
} my_state_t;  
/* Initialize state machine in START state */  
my_state_t state = START;  
/* Variable that will take the state machine to the STOP state */  
bool done;  
/* Initialize objects */   
void setup() {  
   /* Set serial communication to 115200 baud rate for MSP432 */  
   Serial.begin(115200);  
   delay(500);  
   Serial.println("Initializing.....");  
   setupRSLK();  
   /* Initialize LED pins as outputs */  
   pinMode(LED_FR_PIN, OUTPUT);   
   pinMode(LED_FL_PIN, OUTPUT);   
   pinMode(LED_BR_PIN, OUTPUT);   
   pinMode(LED_BL_PIN, OUTPUT);  
   pinMode(LP_RED_LED_PIN, OUTPUT);  
   pinMode(LP_RGB_LED_RED_PIN, OUTPUT);  
   pinMode(LP_RGB_LED_BLUE_PIN, OUTPUT);   
   pinMode(LP_RGB_LED_GREEN_PIN, OUTPUT);  
   /* Initialize LaunchPad buttons as inputs */  
   pinMode(LP_S1_PIN, INPUT_PULLUP);  
   pinMode(LP_S2_PIN, INPUT_PULLUP);  
   Serial.println("Initializing System Complete.");  
}  
void loop() {  
 // Emergency stop switch S2  
 // Switch to state "STOP" if pressed  
 if (digitalRead(LP_S2_PIN) == 0) state = STOP;  
 //-----------------------------------  
 //        Main State Machine  
 //-----------------------------------  
 switch (state) {  
   case START:  
           Serial.println("Enter START state");  
           state = WAIT;  
   break;  
   case WAIT:  
       Serial.println("Enter WAIT state");  
       digitalWrite(LP_RGB_LED_GREEN_PIN, HIGH);  
       delay(200);  
       digitalWrite(LP_RGB_LED_GREEN_PIN, LOW);  
       delay(200);  
       if (digitalRead(LP_S1_PIN) == 0) {  
           state = GO;  
       }  
   break;  
   case GO:  
       Serial.println("Enter GO state");  
       /* Start running the motors */  
       /* Enables specified motor.  
        *  Parameter:  
        *   Motor your referencing -> LEFT_MOTOR  RIGHT_MOTOR  BOTH_MOTORS  
        */  
       enableMotor(BOTH_MOTORS);  
       setMotorDirection(BOTH_MOTORS, MOTOR_DIR_FORWARD);  
       setMotorSpeed(BOTH_MOTORS, 25);  
       state = GO2;  
   break;  
   case GO2:  
       Serial.println("Enter GO2 state");  
       /* Detect a bump and then switch to bump correction state */  
       for(int x = 0;x<6;x++)  
       {  
           if(isBumpSwitchPressed(x) == true) state = BUMPED1a;  
       }  
       /* Continue to rotate until done condition is met */  
       /* Certain distance traveled or other conditions can be set */  
       if (getEncoderLeftCnt() > 50000) {  
         done = 1;   
       }  
       if (done) state = STOP;  
   break;  
   case BUMPED1a:  
       Serial.println("Enter BUMPED1a state");  
       /* Stop the motors */  
       setMotorSpeed(BOTH_MOTORS,0);  
       /* Reverse the robot */  
       setMotorDirection(BOTH_MOTORS, MOTOR_DIR_BACKWARD);  
       setMotorSpeed(BOTH_MOTORS,25);  
       delay(500);  
       state = BUMPED1b;  
   break;  
   case BUMPED1b:  
       Serial.println("Enter BUMPED1b state");  
       /* Turn robot to avoid obstacle */  
       setMotorSpeed(LEFT_MOTOR,0);  
       setMotorSpeed(RIGHT_MOTOR,25);  
       delay(100);  
       state = DRIVE;  
   break;  
   case DRIVE:  
       Serial.println("Enter DRIVE state");  
       /* Put motors back to forward direction */  
       setMotorDirection(BOTH_MOTORS, MOTOR_DIR_FORWARD);  
       setMotorSpeed(BOTH_MOTORS, 25);  
       state = GO2;  
   break;  
   case STOP:  
       Serial.println("Enter STOP state");  
       Serial.println("Press Reset to begin again");  
       /* Stop all motors */  
       disableMotor(BOTH_MOTORS);  
   break;  
 }  
 delay(10);  
}

此代碼將使用基本狀態(tài)機(jī)向機(jī)器人展示如何撞到墻壁和物體并避免它們。這稱為航位推算導(dǎo)航。

嘗試其他一些庫示例。您可以看到它們基于名為 SimpleRSLK.h 的文件。如果您想在自己的代碼中使用這些函數(shù),或者只是知道它在做什么,請進(jìn)入您的 Arduino Libraries 文件夾,您可以查看庫源文件。

希望您喜歡 TI-RSLK MAX 的體驗(yàn)!

結(jié)論

學(xué)習(xí)不止于此。通過探索課程,深入了解 TI-RSLK MAX 的高級主題。與 Jonathan Valvano 博士一起獲得有關(guān)嵌入式系統(tǒng)的指導(dǎo)學(xué)習(xí)體驗(yàn)。在 20 多個學(xué)習(xí)模塊中查看講座視頻和更多內(nèi)容。

您可以學(xué)習(xí)如何使用模塊 1 中的代碼項(xiàng)目設(shè)置 Code Composer Studio。還有使用 DriverLib 進(jìn)行編程。這是這種風(fēng)格編程的示例

您還可以從 edX 了解有關(guān)機(jī)電一體化主題的更多信息,并將您的知識應(yīng)用于任何系統(tǒng)。

?

?


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

評論

查看更多

下載排行

本周

  1. 1GBT1094.11-2022電力變壓器第11部分:干式變壓器
  2. 14.12 MB   |  3次下載  |  免費(fèi)
  3. 2PT500齒輪傳動動力學(xué)綜合測試實(shí)驗(yàn)臺
  4. 0.16 MB   |  3次下載  |  免費(fèi)
  5. 3FT-7800R對講機(jī)維修手冊附原理圖
  6. 3.35 MB   |  2次下載  |  免費(fèi)
  7. 4串口工具UartAssist5.0.exe
  8. 0.60 MB   |  2次下載  |  免費(fèi)
  9. 5爬電距離和電氣間隙計(jì)算
  10. 0.75 MB   |  2次下載  |  1 積分
  11. 6UC3584DW次級側(cè)后置穩(wěn)壓器EVM板原理圖
  12. 38.97KB   |  2次下載  |  免費(fèi)
  13. 7UCC38C42 25瓦自諧振復(fù)位正激變換器
  14. 320.6KB   |  1次下載  |  免費(fèi)
  15. 8使用15個時鐘周期的ADS7841和ADS7844
  16. 188.55KB   |  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純電動汽?的主要部件及?作原理
  8. 5.76 MB   |  12次下載  |  5 積分
  9. 5GP328和GP88S對講機(jī)的維修實(shí)列資料合集免費(fèi)下載
  10. 0.03 MB   |  10次下載  |  10 積分
  11. 6舒爾SLX4無線話筒接收機(jī)原理圖:二次變頻超外差部分
  12. 0.27 MB   |  8次下載  |  免費(fèi)
  13. 7i.MX Linux開發(fā)實(shí)戰(zhàn)指南—基于野火i.MX系列開發(fā)板
  14. 17.86 MB   |  7次下載  |  免費(fèi)
  15. 8Type-C VL160數(shù)據(jù)手冊
  16. 0.92 MB   |  7次下載  |  3 積分

總榜

  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é)會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 積分