作者:Travis Foss
一個反復(fù)提出的有趣問題是控制 XRP 的不同方法是什么。我碰巧發(fā)現(xiàn)了適用于 Raspberry Pi Pico 的 Kitronik 迷你控制器,Kitronik 有一篇關(guān)于將此控制器與他們的 Pico 自主機(jī)器人平臺一起使用的精彩文章,該平臺也是一個基于 Raspberry Pi Pico 的機(jī)器人。我認(rèn)為由于這兩個平臺相似,因此使用 XRP 會更容易過渡。
我開始深入研究他們的 GitHub 存儲庫[KitronikLtd/Kitronik-Pico-Mini-Controller-MicroPython (github.com)] ,我在 GitHub 頁面的自述文件部分注意到的第一件事是控制器和機(jī)器人都需要一份KitronikPicoWBluetooth.py 來自此頁面[,Kitronik-Pico-W-Bluetooth-MicroPython/KitronikPicoWBluetooth.py 位于 main · Kitronik Ltd/Kitronik-Pico-W-Bluetooth-MicroPython (github.com)] 。我將此文件的副本下載到我的計算機(jī)上以供將來使用。
瀏覽 Pico Controller.py 后,我發(fā)現(xiàn)該文件無需更改即可與 XRP 配合使用。由于控制器上需要 Kitronik 藍(lán)牙和 Pico 控制器文件,因此我將 Kitronik_Pico_W_Bluetooth 和 Pico 控制器文件安裝到我要在控制器中使用的 Pico W 上
接下來,我開始深入研究機(jī)器人的代碼。在 Pico ARP.py 文件的頂部,我注意到他們導(dǎo)入了 PicoAutonomousRobotics 文件。因此,我決定深入研究該文件,該文件位于此處,[Kitronik-Pico-Autonomous-Robotics-Platform-MicroPython/PicoAutonomousRobotics.py at main · KitronikLtd/Kitronik-Pico-Autonomous-Robotics-Platform-MicroPython (github .com)] 。在查看此文件時,我注意到他們正在使用的許多功能已經(jīng)在 XRP 上設(shè)置的庫中調(diào)用。這讓我很好奇是否可以在不使用這個庫的情況下讓 XRP 工作。然后我再次研究 Pico ARP.py 文件。我知道我將嘗試在不使用前面提到的庫的情況下運(yùn)行 XRP,因此我首先注釋掉它調(diào)用該庫及其使用的函數(shù)的行。我首先刪除了設(shè)置越野車的開始部分。
然后我查看了下一部分,其中 LED 燈亮起以顯示機(jī)器人已開啟。知道它使用了我不會使用的庫,然后我決定編寫一個名為 test_leds 的新函數(shù)。然后立即調(diào)用該函數(shù),以便機(jī)器人準(zhǔn)備好后 LED 就會閃爍。目前,代碼設(shè)置為在關(guān)閉前閃爍 3 次,但是,通過更改代碼中第 20 行括號中的數(shù)字,可以輕松將其更改為閃爍更多次。
代碼中的下一系列行定義了與控制器連接相關(guān)的函數(shù),因此我將這些行保持原樣,而不進(jìn)行任何更改。
然后代碼調(diào)用將 LED 設(shè)置為綠色,以表明機(jī)器人已準(zhǔn)備好進(jìn)行控制。我決定對此代碼發(fā)表評論,因為我認(rèn)為此時不需要它。
代碼的下一部分控制機(jī)器人的運(yùn)動。在這一部分,我意識到我可以使用 XRP 庫控制機(jī)器人。
我決定讓其中一個按鈕起作用來測試代碼更改。我從第 74 行開始,該行指出如果按下控制器上的向上按鈕,就會導(dǎo)致機(jī)器人向前移動。我決定嘗試使用我根據(jù) XRP 上的原始驅(qū)動器示例設(shè)置的命令,而不是使用 Kitronik 示例中使用的 buggy.motorOn 命令。我將文件命名為 Driving_for_controller,并設(shè)置了幾個不同的函數(shù):drive_straight、drive_backwards、point_turn_left 和 point_turn_right。這些功能的設(shè)置方式與機(jī)器人的設(shè)置方式類似,機(jī)器人會施加一定的力并移動一小段時間,在本例中為 1/2 秒。
我還必須在代碼開頭調(diào)用庫才能使其正常工作。我在頂部添加了這些行。添加后,我在代碼的前部部分輸入了 Drive Straight 命令。
在 XRP 上進(jìn)行測試后,它確實有效,但是,機(jī)器人會結(jié)結(jié)巴巴,因為這會導(dǎo)致機(jī)器人向前行駛,然后在繼續(xù)執(zhí)行下一個前進(jìn)命令之前停止。這不是我希望機(jī)器人執(zhí)行的方式。因此,我開始思考想法,并想為什么不按下按鈕來設(shè)置電機(jī)的力度級別,直到釋放按鈕?為了實現(xiàn)這一點,我將代碼更改為按下按鈕時的drivetrain.set_effort命令。
然后我轉(zhuǎn)到 else 語句,當(dāng)按鈕被釋放時,并將左右輪的作用力設(shè)置為 0。檢查之間的睡眠時間已經(jīng)設(shè)置,所以我想我會像示例中那樣嘗試一下。
令我驚訝的是,這段代碼運(yùn)行得非常好。它運(yùn)行得非常好,我決定保持原樣,然后繼續(xù)設(shè)置其他方向按鈕。您會注意到,在第 76、80、84 和 88 行,我注釋掉了我在代碼中設(shè)置的先前驅(qū)動方法,并注釋了我調(diào)用控制器庫驅(qū)動的行。
最后,我留下了 A 和 B 按鈕,沒有為它們添加任何代碼,除了添加的打印語句以便我可以確認(rèn)這些按鈕是否正常工作。
根據(jù)我正在從事的項目,我可以設(shè)置這些按鈕來完成特定任務(wù),但是為了測試,我不確定我會使用什么,所以我只是給它們留下了打印語句。在稍后考慮這一點時,我可以使用它們將力度設(shè)置為一半或使用它們來控制伺服器拾取物體,但是,在編寫本指南之前我從未深入研究過這一點。這可能是未來項目的一部分。
現(xiàn)在編碼部分已在 XRP 上完成,最后一步是對其進(jìn)行測試。首先,我將為控制器編程的 Pico W 插入控制器。接下來,我打開 XRP,一旦板載 Pico 上的燈開始閃爍,我就打開控制器。使用此代碼,如果控制器和 XRP 之間的配對綁定成功,控制器上 Pico 上的 LED 將亮起并保持亮起狀態(tài)。如果由于某種原因第一次沒有發(fā)生這種情況,它似乎有助于重新啟動控制器,然后它似乎會立即綁定。一旦控制器上的燈亮起,程序就應(yīng)該啟動并運(yùn)行。將 XRP 放在有空間行駛的表面上并嘗試一下。我在頁面底部鏈接了完整的代碼供您參考。
該控制器的一個奇妙之處在于,它具有通過模擬輸入引腳添加操縱桿的引腳分配,以及帶有其他斷開的 IO 的額外按鈕。我計劃在未來的項目中嘗試使用額外的按鈕,但是目前還不需要。如果您想查看這方面的教程,請告訴我們,我可以將其放在一起。
以下是 XRP 的完整代碼:
復(fù)制代碼
從藍(lán)牙導(dǎo)入BLE
從時間導(dǎo)入sleep_ms
#from PicoAutonomousRobotics ?導(dǎo)入 KitronikPicoRobotBuggy
從KitronikPicoWBluetooth導(dǎo)入?BLEPeripheral
#from Driving_for_controller import *
? from XRPLib.defaults import *
? 導(dǎo)入時間
#設(shè)置 Pico 自主機(jī)器人 ?平臺越野車
? #buggy = KitronikPicoRobotBuggy()
? ? #將越野車速度設(shè)置為 50%
? ? #speed = 50
#將 LED 設(shè)置為紅色以顯示其已打開
? #for i in range(4):
? ? # buggy.setLED(i, (100, 0, 0))
? ? # buggy.show()
def test_leds () :
board.led_blink( 3 )
時間.睡眠( 1 )
?board.led_off()?
? ?
test_leds()?
#設(shè)置藍(lán)牙外設(shè)
外設(shè) = BLEPeripheral(BLE())?
#等待連接...
審核編輯 黃宇
-
控制器
+關(guān)注
關(guān)注
112文章
16444瀏覽量
179326 -
機(jī)器人
+關(guān)注
關(guān)注
211文章
28632瀏覽量
208281 -
XRP
+關(guān)注
關(guān)注
0文章
4瀏覽量
8485 -
Pico
+關(guān)注
關(guān)注
0文章
173瀏覽量
17161
發(fā)布評論請先 登錄
相關(guān)推薦
評論