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