如果已經(jīng)將 Jetbot 智能小車組裝好的話,現(xiàn)在就可以開始執(zhí)行 Jetbot 智能小車實(shí)驗(yàn),接下來(lái)的操作都在以下環(huán)境中執(zhí)行:
1. 無(wú)線的方式連接 Jetbot 與 PC:
關(guān)于這部分的設(shè)置,請(qǐng)參考“NVIDIA Jetson Nano 2GB 系列文章(42):無(wú)線WIFI的安裝與調(diào)試”文章,有詳細(xì)的說(shuō)明。
我們采用如下圖的“Jetbot 熱點(diǎn)”方式連接,就是將 Jetbot 無(wú)線網(wǎng)卡設(shè)置為“熱點(diǎn)”模式,將 PC 的 WIFI 連上 Jetbot 設(shè)置的熱點(diǎn),如此 Jetbot 的 IP 固定為 “10.42.0.1”,操作起來(lái)方便。
2. 所有實(shí)驗(yàn)的界面都在 PC 上的瀏覽器操作:確定好連線之后,在 PC 的瀏覽器(推薦使用 Google Chrome)輸入“https://10.42.0.1:8888” 就可以進(jìn)入,第一次連上去需要輸入 “jetbot” 這個(gè)預(yù)設(shè)的密碼,只要第一次選擇保存密碼,以后進(jìn)入就不需要再輸入密碼。
3. 關(guān)于 Jupyter 的使用技巧請(qǐng)自行在網(wǎng)上學(xué)習(xí),這里只對(duì) Jetbot 各個(gè)項(xiàng)目的代碼進(jìn)行探索與調(diào)試建議。
4. 所有實(shí)驗(yàn)都需要為 Jetbot 提供足夠的運(yùn)動(dòng)空間:最好直接在空曠而且平坦的地面上運(yùn)行,避免在桌子之類與地面有高度落差的地方,以及凹凸不平、阻力較大(例如地毯)、泥沙淤積的地面上,以免對(duì) Jetbot 造成傷害。
5. 最后提醒一點(diǎn),Jetbot 的重點(diǎn)是在于“學(xué)習(xí)”而非“競(jìng)技”,因此避免將電機(jī)馬達(dá)轉(zhuǎn)速調(diào)到太快,如果感覺車速太快時(shí),請(qǐng)自行將實(shí)驗(yàn)代碼里的速度調(diào)低。
現(xiàn)在就開始兩個(gè)基礎(chǔ)的 Jetbot “手動(dòng)”運(yùn)行實(shí)驗(yàn),這兩個(gè)實(shí)驗(yàn)最重要的目的是讓大家熟悉代碼的運(yùn)作。第一個(gè)實(shí)驗(yàn)是以鍵盤的“上下左右”去控制 Jetbot 的行進(jìn),第二個(gè)實(shí)驗(yàn)是使用游戲用的搖桿設(shè)備來(lái)進(jìn)行控制,前提是您得采購(gòu)一個(gè)最簡(jiǎn)單的搖桿設(shè)備,我們測(cè)試了幾種包括有線以及無(wú)線的搖桿設(shè)備,都能正確使用。
現(xiàn)在就開始 Jetbot 的基礎(chǔ)項(xiàng)目,請(qǐng)自行登陸 Jupyter 并進(jìn)入 jetbot/notebooks 目錄下,總共有 5 個(gè)實(shí)驗(yàn)?zāi)夸洝?/p>
基本動(dòng)作(Basci Motion)
在 Jupyter 進(jìn)入 basic_motion 目錄,里面有 basic_motion.ipynb 這個(gè)實(shí)驗(yàn)內(nèi)容,點(diǎn)選后就能打開,這里的代碼主要分為四大段:
1. 基本操作:
這部分的代碼非常直觀,并且有很詳盡的英文解說(shuō),最主要是讓大家了解如何導(dǎo)入關(guān)于電機(jī)控制的模塊,并且創(chuàng)建 robot 對(duì)象來(lái)控制 Jetbot 的行進(jìn):
fromjetbotimportRobot
robot = Robot()
我們只要分別對(duì) robot 對(duì)象的左右輪設(shè)定速度,就能實(shí)現(xiàn)讓 Jetbot 移動(dòng)的任務(wù)。這里“設(shè)定速度”的方法,是以“全速”為基準(zhǔn)給定[-1, +1]之間的相對(duì)值,但給定“負(fù)值”表示“反向”旋轉(zhuǎn),這是不建議的做法。
下面有三種設(shè)置左右輪的方法,如下:
(1) 用 robot.left (速度)與 robot.right (速度)分別設(shè)置左右輪速度:
robot.left(speed=0.3)
robot.stop()
import time
robot.left(0.3)
time.sleep(0.5)
robot.stop()
(2) 用 robot.set_motor (左輪速, 右輪速) 同時(shí)設(shè)置左右輪速度:
robot.set_motors(0.3,0.6)
time.sleep(1.0)
robot.stop()
(3) 對(duì) robot.left_motor.value 與 robot.right_motor.value 這兩個(gè)變量進(jìn)行設(shè)置:
robot.left_motor.value=0.3
robot.right_motor.value=0.6
time.sleep(1.0)
robot.left_motor.value=0.0
robot.right_motor.value = 0.0
上面的這些數(shù)值您可以在要求的范圍內(nèi)自由設(shè)置,最好能試著將兩個(gè)值調(diào)成一樣,并且讓延續(xù)時(shí)間稍微長(zhǎng)一點(diǎn),例如 3~5 秒,可以先檢查一下左右輪的轉(zhuǎn)速是否一致!
2. 使用 traitlets 庫(kù)將 robot 左右輪與小部件進(jìn)行連接:
在“Jetbot 實(shí)戰(zhàn)系列 04:CSI 攝像頭安裝與測(cè)試”里已經(jīng)使用過(guò) traitlets 這個(gè)非常強(qiáng)大的庫(kù),將攝像頭捕獲的畫面與 widgets.image 小部件連接,再透過(guò) display(image) 顯示動(dòng)態(tài)的圖像。
這里也用相同的方法,創(chuàng)建兩個(gè)“滑塊(slider)”小部件與 robot 左右輪的數(shù)值進(jìn)行捆綁,可以單向地在兩個(gè)滑塊上顯示輪的速度值,還可以進(jìn)一步透過(guò)兩個(gè)滑塊去控制個(gè)別輪的速度。下面是這個(gè)用途的執(zhí)行步驟:
(1) 創(chuàng)建兩個(gè)垂直滑塊小部件,再用一個(gè)水平框部件將兩個(gè)滑塊放在一起:
importipywidgets.widgetsaswidgets
from IPython.display import display
#創(chuàng)建”left”與”right”兩個(gè)垂直滑塊小部件,數(shù)值范圍在[-1.0,1.0]之間
left_slider=widgets.FloatSlider(description='left',min=-1.0,max=1.0,step=0.01,orientation='vertical')
right_slider= widgets.FloatSlider(description='right', min=-1.0, max=1.0, step=0.01, orientation='vertical')
#創(chuàng)建一個(gè)水平框,放置前面生成的兩個(gè)垂直滑塊
slider_container = widgets.HBox([left_slider, right_slider])
#在下面這個(gè)滑塊容器
display(slider_container)
(2) 單向顯示:使用 traitlets.link 函數(shù)將左右滑塊的值分別與左右輪的值進(jìn)行連接,這樣就能看到兩個(gè)滑塊的值會(huì)跟著兩個(gè)輪的值而改變。
importtraitlets
left_link=traitlets.link((left_slider,'value'),(robot.left_motor,'value'))
right_link=traitlets.link((right_slider,'value'),(robot.right_motor,'value'))
robot.forward(0.3)
time.sleep(1.0)
robot.stop()
left_link.unlink()
right_link.unlink()
(3) 雙向控制:使用 traitlets.dlink 函數(shù)將左右滑塊的值分別與左右輪的值進(jìn)行連接,這時(shí)候可以試試看調(diào)整兩個(gè)滑塊的值(上下拖),就能改變兩個(gè)輪的轉(zhuǎn)速。
left_link=traitlets.dlink((robot.left_motor,'value'),(left_slider,'value'))
right_link = traitlets.dlink((robot.right_motor, 'value'), (right_slider, 'value'))
3. 將控制函數(shù)附加到事件:
使用 traitlets 的另一種方法是將函數(shù)(如 forward)附加到事件。每當(dāng)對(duì)象發(fā)生更改時(shí),這些函數(shù)都會(huì)被調(diào)用,并且會(huì)被傳遞一些有關(guān)該更改的信息,如舊值和新值。讓我們創(chuàng)建并顯示一些用于控制機(jī)器人的按鈕。
(1)創(chuàng)建并顯示 4 個(gè)方向按鈕與中間的“停止”按鈕:
#創(chuàng)建5個(gè)按鈕
stop_button=widgets.Button(省略)
forward_button=widgets.Button(省略)
backward_button=widgets.Button(省略)
left_button=widgets.Button(省略)
right_button=widgets.Button(省略)
#顯示按鈕
middle_box=widgets.HBox([left_button,stop_button,right_button],layout=widgets.Layout(align_self='center'))
controls_box=widgets.VBox([forward_button,middle_box,backward_button])
display(controls_box)
(2) 定義 5 個(gè)方向的動(dòng)作指令:
defstop(change):
defstep_forward(change):
defstep_backward(change):
defstep_left(change):
def step_right(change):
在這里可以看到 robot 對(duì)象還提供 stop/forword/backword/left/right 等五個(gè)預(yù)定義的動(dòng)作,可以直接使用。這里的 left 與 right 所定義的方式是“原地旋轉(zhuǎn)”的動(dòng)作,如果要讓小車往“左前方”或“右前方”行進(jìn)的話,則需要自行對(duì)左右輪設(shè)置不同速度比的方式來(lái)處理。
(3) 將按鈕與動(dòng)作定義進(jìn)行捆綁:
#捆綁方式:按鈕.on_click(動(dòng)作)
stop_button.on_click(stop)
forward_button.on_click(step_forward)
backward_button.on_click(step_backward)
left_button.on_click(step_left)
right_button.on_click(step_right)
完成這個(gè)捆綁的步驟之后,按下按鈕才會(huì)向 Jetbot 發(fā)送控制指令,現(xiàn)在試試看能不能用這個(gè)方向鍵來(lái)控制 Jetbot 小車!
4. 心跳停止開關(guān):
這是個(gè)預(yù)防 Jetbot 與 PC 直接因?yàn)榫嚯x過(guò)遠(yuǎn)而失去控制能力狀況下,提供的一種安全管理措施,這部分的內(nèi)容請(qǐng)自行測(cè)試即可,沒(méi)什么難度,這里不做說(shuō)明。
以上就完成這個(gè)智能小車的最基本運(yùn)動(dòng)功能,大家可以多嘗試調(diào)整轉(zhuǎn)速、方向、持續(xù)時(shí)間等參數(shù),感受一下這個(gè)基本運(yùn)動(dòng)的處理方式。
搖桿操作(Teleoperation)
項(xiàng)目代碼在 notebooks/teleoperation 目錄的 teleoperation.ipynb,在 Jupyter 里打開這個(gè)文件就能執(zhí)行。這是在 PC 控制機(jī)上,用游戲搖桿(gamepad)來(lái)控制 Jetbot 小車的左右輪,基本邏輯與上面的“滑塊控制輪速”的原理是一致的,只不過(guò)將設(shè)備從鼠標(biāo)變成搖桿而已。
我們將手邊的四種游戲搖桿(如下圖)都做過(guò)測(cè)試,不過(guò)有線無(wú)線、單價(jià)高低的都能使用,如果手上沒(méi)有這類搖桿的,可以簡(jiǎn)單選個(gè) 30 元左右的也可以執(zhí)行這些測(cè)試,并且以后做些這類相關(guān)的應(yīng)用。
將搖桿接上 PC 之后,如果是 Linux 操作系統(tǒng)請(qǐng)執(zhí)行以下指令,檢查是否已經(jīng)安裝:
ls /dev/input/js*
至于 Windows 或 MacOS 請(qǐng)自行在設(shè)備列表中檢查。
如果確認(rèn)設(shè)備已將連上控制 PC 之后,就可以開始執(zhí)行 teleoperation.ipynb 這個(gè)項(xiàng)目,不過(guò)有個(gè)對(duì)初學(xué)者很重要的地方,卻放在不起眼的注釋里面,在這里我們特別將它提出來(lái),在執(zhí)行項(xiàng)目之前必須先點(diǎn)進(jìn)去注釋里的“1.Visit http://html5gamepad.com.”,點(diǎn)進(jìn)這個(gè)連接之后,就能確認(rèn)您手上的這個(gè)搖桿是否能夠正常工作。
最左上角的 “INDEX” 編號(hào)就是接下來(lái)代碼中 “widgets.Controller(index=N)” 的實(shí)際編號(hào),當(dāng)然在前面 “l(fā)s /dev/input/js*” 所顯示的編號(hào),也能作為這個(gè)編號(hào)的依據(jù),不過(guò)在這個(gè)網(wǎng)頁(yè)上可以動(dòng)一動(dòng)游戲搖桿上的兩個(gè)控制桿與其他按鈕,看看在 B0~B16 以及 AXIS0~AXIS3 這些鈕上面是不是有對(duì)應(yīng)的回饋?
執(zhí)行第一步驟之后,如果出現(xiàn)以下畫面,就表示驅(qū)動(dòng)的加載也都正確。
這個(gè)實(shí)驗(yàn)只要把游戲搖桿設(shè)備的部分捋順了,后面的實(shí)驗(yàn)步驟就非常直觀,包括將攝像頭“拍照”功能與游戲搖桿的某個(gè)鍵進(jìn)行綁定的部分,在執(zhí)行步驟都有非常詳細(xì)說(shuō)明,大家只要順著去執(zhí)行并且閱讀說(shuō)明,就能輕松完成整個(gè)任務(wù)。
原文標(biāo)題:NVIDIA Jetson Nano 2GB 系列文章(48):用鍵盤與搖桿控制行動(dòng)
文章出處:【微信公眾號(hào):NVIDIA英偉達(dá)企業(yè)解決方案】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
審核編輯:湯梓紅
-
NVIDIA
+關(guān)注
關(guān)注
14文章
5078瀏覽量
103788 -
鍵盤
+關(guān)注
關(guān)注
4文章
859瀏覽量
39884 -
控制
+關(guān)注
關(guān)注
4文章
1016瀏覽量
122785
原文標(biāo)題:NVIDIA Jetson Nano 2GB 系列文章(48):用鍵盤與搖桿控制行動(dòng)
文章出處:【微信號(hào):NVIDIA-Enterprise,微信公眾號(hào):NVIDIA英偉達(dá)企業(yè)解決方案】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
[下載]4功能智能小車設(shè)計(jì)論文(電路+程序+論文)
智能小車
智能小車地面控制端的設(shè)置
【HC-02V1.1藍(lán)牙串口模塊申請(qǐng)】智能藍(lán)牙尋跡小車
智能循跡小車簡(jiǎn)介
使用鍵盤控制智能小車的資料合集免費(fèi)下載
![使用<b class='flag-5'>鍵盤</b><b class='flag-5'>控制</b><b class='flag-5'>智能</b><b class='flag-5'>小車</b>的資料合集免費(fèi)下載](https://file.elecfans.com/web1/M00/95/B4/pIYBAFz_dWeAR8GQAANHMLph_t8395.png)
52單片機(jī)對(duì)智能小車的控制設(shè)計(jì)
![52單片機(jī)對(duì)<b class='flag-5'>智能</b><b class='flag-5'>小車</b>的<b class='flag-5'>控制</b>設(shè)計(jì)](https://file.elecfans.com/web1/M00/A3/6F/pIYBAF1TrXuAeO3kAABjurAsCTw688.png)
藍(lán)牙控制小車行駛的實(shí)驗(yàn)指導(dǎo)書詳細(xì)說(shuō)明
![藍(lán)牙<b class='flag-5'>控制</b><b class='flag-5'>小車行</b>駛的實(shí)驗(yàn)指導(dǎo)書詳細(xì)說(shuō)明](https://file.elecfans.com/web1/M00/B5/DC/pIYBAF5oPhGALgwFAANZf6raOFI268.png)
STM32F103+NRF2401+游戲搖桿ADC雙單片機(jī)通信遙控小車
![STM32F103+NRF2401+游戲<b class='flag-5'>搖桿</b>ADC雙單片機(jī)通信遙控<b class='flag-5'>小車</b>](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
Jetbot智能車如何識(shí)別與周邊物體的距離
從ROS控制jetbot機(jī)器人
![從ROS<b class='flag-5'>控制</b><b class='flag-5'>jetbot</b>機(jī)器人](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
評(píng)論