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

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

3天內(nèi)不再提示

用鍵盤與搖桿控制Jetbot智能小車行動

NVIDIA英偉達(dá)企業(yè)解決方案 ? 來源:NVIDIA英偉達(dá)企業(yè)解決方案 ? 作者:NVIDIA英偉達(dá)企業(yè)解 ? 2022-01-21 10:09 ? 次閱讀

如果已經(jīng)將 Jetbot 智能小車組裝好的話,現(xiàn)在就可以開始執(zhí)行 Jetbot 智能小車實(shí)驗(yàn),接下來的操作都在以下環(huán)境中執(zhí)行:

1. 無線的方式連接 Jetbot 與 PC:

關(guān)于這部分的設(shè)置,請參考“NVIDIA Jetson Nano 2GB 系列文章(42):無線WIFI的安裝與調(diào)試”文章,有詳細(xì)的說明。

我們采用如下圖的“Jetbot 熱點(diǎn)”方式連接,就是將 Jetbot 無線網(wǎng)卡設(shè)置為“熱點(diǎn)”模式,將 PC 的 WIFI 連上 Jetbot 設(shè)置的熱點(diǎn),如此 Jetbot 的 IP 固定為 “10.42.0.1”,操作起來方便。

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 的使用技巧請自行在網(wǎng)上學(xué)習(xí),這里只對 Jetbot 各個(gè)項(xiàng)目的代碼進(jìn)行探索與調(diào)試建議。

4. 所有實(shí)驗(yàn)都需要為 Jetbot 提供足夠的運(yùn)動空間:最好直接在空曠而且平坦的地面上運(yùn)行,避免在桌子之類與地面有高度落差的地方,以及凹凸不平、阻力較大(例如地毯)、泥沙淤積的地面上,以免對 Jetbot 造成傷害。

5. 最后提醒一點(diǎn),Jetbot 的重點(diǎn)是在于“學(xué)習(xí)”而非“競技”,因此避免將電機(jī)馬達(dá)轉(zhuǎn)速調(diào)到太快,如果感覺車速太快時(shí),請自行將實(shí)驗(yàn)代碼里的速度調(diào)低。

現(xiàn)在就開始兩個(gè)基礎(chǔ)的 Jetbot “手動”運(yùn)行實(shí)驗(yàn),這兩個(gè)實(shí)驗(yàn)最重要的目的是讓大家熟悉代碼的運(yùn)作。第一個(gè)實(shí)驗(yàn)是以鍵盤的“上下左右”去控制 Jetbot 的行進(jìn),第二個(gè)實(shí)驗(yàn)是使用游戲用的搖桿設(shè)備來進(jìn)行控制,前提是您得采購一個(gè)最簡單的搖桿設(shè)備,我們測試了幾種包括有線以及無線的搖桿設(shè)備,都能正確使用。

現(xiàn)在就開始 Jetbot 的基礎(chǔ)項(xiàng)目,請自行登陸 Jupyter 并進(jìn)入 jetbot/notebooks 目錄下,總共有 5 個(gè)實(shí)驗(yàn)?zāi)夸洝?/p>

基本動作(Basci Motion)

在 Jupyter 進(jìn)入 basic_motion 目錄,里面有 basic_motion.ipynb 這個(gè)實(shí)驗(yàn)內(nèi)容,點(diǎn)選后就能打開,這里的代碼主要分為四大段:

1. 基本操作:

這部分的代碼非常直觀,并且有很詳盡的英文解說,最主要是讓大家了解如何導(dǎo)入關(guān)于電機(jī)控制的模塊,并且創(chuàng)建 robot 對象來控制 Jetbot 的行進(jìn):

fromjetbotimportRobotrobot = Robot()

我們只要分別對 robot 對象的左右輪設(shè)定速度,就能實(shí)現(xiàn)讓 Jetbot 移動的任務(wù)。這里“設(shè)定速度”的方法,是以“全速”為基準(zhǔn)給定[-1, +1]之間的相對值,但給定“負(fù)值”表示“反向”旋轉(zhuǎn),這是不建議的做法。

下面有三種設(shè)置左右輪的方法,如下:

(1) 用 robot.left (速度)與 robot.right (速度)分別設(shè)置左右輪速度:

robot.left(speed=0.3)robot.stop()import timerobot.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) 對 robot.left_motor.value 與 robot.right_motor.value 這兩個(gè)變量進(jìn)行設(shè)置:

robot.left_motor.value=0.3robot.right_motor.value=0.6time.sleep(1.0)robot.left_motor.value=0.0robot.right_motor.value = 0.0

上面的這些數(shù)值您可以在要求的范圍內(nèi)自由設(shè)置,最好能試著將兩個(gè)值調(diào)成一樣,并且讓延續(xù)時(shí)間稍微長一點(diǎn),例如 3~5 秒,可以先檢查一下左右輪的轉(zhuǎn)速是否一致!

2. 使用 traitlets 庫將 robot 左右輪與小部件進(jìn)行連接:

在“Jetbot 實(shí)戰(zhàn)系列 04:CSI 攝像頭安裝與測試”里已經(jīng)使用過 traitlets 這個(gè)非常強(qiáng)大的庫,將攝像頭捕獲的畫面與 widgets.image 小部件連接,再透過 display(image) 顯示動態(tài)的圖像。

這里也用相同的方法,創(chuàng)建兩個(gè)“滑塊(slider)”小部件與 robot 左右輪的數(shù)值進(jìn)行捆綁,可以單向地在兩個(gè)滑塊上顯示輪的速度值,還可以進(jìn)一步透過兩個(gè)滑塊去控制個(gè)別輪的速度。下面是這個(gè)用途的執(zhí)行步驟:

(1) 創(chuàng)建兩個(gè)垂直滑塊小部件,再用一個(gè)水平框部件將兩個(gè)滑塊放在一起:

importipywidgets.widgetsaswidgetsfrom 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è)滑塊的值會跟著兩個(gè)輪的值而改變。

importtraitletsleft_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)對象發(fā)生更改時(shí),這些函數(shù)都會被調(diào)用,并且會被傳遞一些有關(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è)方向的動作指令:

defstop(change):defstep_forward(change):defstep_backward(change):defstep_left(change):def step_right(change):

在這里可以看到 robot 對象還提供 stop/forword/backword/left/right 等五個(gè)預(yù)定義的動作,可以直接使用。這里的 left 與 right 所定義的方式是“原地旋轉(zhuǎn)”的動作,如果要讓小車往“左前方”或“右前方”行進(jìn)的話,則需要自行對左右輪設(shè)置不同速度比的方式來處理。

(3) 將按鈕與動作定義進(jìn)行捆綁:

#捆綁方式:按鈕.on_click(動作)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è)捆綁的步驟之后,按下按鈕才會向 Jetbot 發(fā)送控制指令,現(xiàn)在試試看能不能用這個(gè)方向鍵來控制 Jetbot 小車!

4. 心跳停止開關(guān):

這是個(gè)預(yù)防 Jetbot 與 PC 直接因?yàn)榫嚯x過遠(yuǎn)而失去控制能力狀況下,提供的一種安全管理措施,這部分的內(nèi)容請自行測試即可,沒什么難度,這里不做說明。

以上就完成這個(gè)智能小車的最基本運(yùn)動功能,大家可以多嘗試調(diào)整轉(zhuǎn)速、方向、持續(xù)時(shí)間等參數(shù),感受一下這個(gè)基本運(yùn)動的處理方式。

搖桿操作(Teleoperation)

項(xiàng)目代碼在 notebooks/teleoperation 目錄的 teleoperation.ipynb,在 Jupyter 里打開這個(gè)文件就能執(zhí)行。這是在 PC 控制機(jī)上,用游戲搖桿(gamepad)來控制 Jetbot 小車的左右輪,基本邏輯與上面的“滑塊控制輪速”的原理是一致的,只不過將設(shè)備從鼠標(biāo)變成搖桿而已。

我們將手邊的四種游戲搖桿(如下圖)都做過測試,不過有線無線、單價(jià)高低的都能使用,如果手上沒有這類搖桿的,可以簡單選個(gè) 30 元左右的也可以執(zhí)行這些測試,并且以后做些這類相關(guān)的應(yīng)用。

將搖桿接上 PC 之后,如果是 Linux 操作系統(tǒng)請執(zhí)行以下指令,檢查是否已經(jīng)安裝:

ls /dev/input/js*

至于 Windows 或 MacOS 請自行在設(shè)備列表中檢查。

如果確認(rèn)設(shè)備已將連上控制 PC 之后,就可以開始執(zhí)行 teleoperation.ipynb 這個(gè)項(xiàng)目,不過有個(gè)對初學(xué)者很重要的地方,卻放在不起眼的注釋里面,在這里我們特別將它提出來,在執(zhí)行項(xiàng)目之前必須先點(diǎn)進(jìn)去注釋里的“1.Visit http://html5gamepad.com.”,點(diǎn)進(jìn)這個(gè)連接之后,就能確認(rèn)您手上的這個(gè)搖桿是否能夠正常工作。

最左上角的 “INDEX” 編號就是接下來代碼中 “widgets.Controller(index=N)” 的實(shí)際編號,當(dāng)然在前面 “l(fā)s /dev/input/js*” 所顯示的編號,也能作為這個(gè)編號的依據(jù),不過在這個(gè)網(wǎng)頁上可以動一動游戲搖桿上的兩個(gè)控制桿與其他按鈕,看看在 B0~B16 以及 AXIS0~AXIS3 這些鈕上面是不是有對應(yīng)的回饋?

執(zhí)行第一步驟之后,如果出現(xiàn)以下畫面,就表示驅(qū)動的加載也都正確。

這個(gè)實(shí)驗(yàn)只要把游戲搖桿設(shè)備的部分捋順了,后面的實(shí)驗(yàn)步驟就非常直觀,包括將攝像頭“拍照”功能與游戲搖桿的某個(gè)鍵進(jìn)行綁定的部分,在執(zhí)行步驟都有非常詳細(xì)說明,大家只要順著去執(zhí)行并且閱讀說明,就能輕松完成整個(gè)任務(wù)。

原文標(biāo)題:NVIDIA Jetson Nano 2GB 系列文章(48):用鍵盤與搖桿控制行動

文章出處:【微信公眾號:NVIDIA英偉達(dá)企業(yè)解決方案】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
審核編輯:湯梓紅


聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報(bào)投訴
  • NVIDIA
    +關(guān)注

    關(guān)注

    14

    文章

    5109

    瀏覽量

    104519
  • 鍵盤
    +關(guān)注

    關(guān)注

    4

    文章

    861

    瀏覽量

    40027
  • 控制
    +關(guān)注

    關(guān)注

    4

    文章

    1018

    瀏覽量

    122889

原文標(biāo)題:NVIDIA Jetson Nano 2GB 系列文章(48):用鍵盤與搖桿控制行動

文章出處:【微信號:NVIDIA-Enterprise,微信公眾號:NVIDIA英偉達(dá)企業(yè)解決方案】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    [下載]4功能智能小車設(shè)計(jì)論文(電路+程序+論文)

    的工作模式不同也可控制小車順著S形鐵片行駛;采用霍爾元件A44E檢測小車行駛速度;采用1602LCD實(shí)時(shí)顯示小車行駛的時(shí)間,小車停止行駛后,
    發(fā)表于 08-07 13:03

    智能語音控制小車

    正在做智能小車,想在加點(diǎn)語音功能,不知道什么芯片比較好,用語音控制的,求指教
    發(fā)表于 10-16 10:26

    智能小車

    HC-06作為服務(wù)端??蛻舳瞬捎肊clipse開發(fā)環(huán)境,JAVA編程,服務(wù)端采用單片機(jī)控制。雙方通過串口進(jìn)行通信,單片機(jī)驅(qū)動直流電機(jī)控制小車行動。小車實(shí)現(xiàn)接收手機(jī)遙控信號并靈活地進(jìn)行前
    發(fā)表于 10-29 16:35

    藍(lán)牙控制小車行進(jìn)

    有誰能幫忙寫一個(gè)藍(lán)牙控制小車行進(jìn)的程序??!謝謝大神了!
    發(fā)表于 04-17 19:09

    智能小車地面控制端的設(shè)置

    `要求設(shè)計(jì)地面控制端,接收按鍵信息,并將控制信號注入跑道表面的細(xì)導(dǎo)線中,以非接觸的方式控制智能小車的行進(jìn)。不允許
    發(fā)表于 05-19 16:33

    【HC-02V1.1藍(lán)牙串口模塊申請】智能藍(lán)牙尋跡小車

    項(xiàng)目名稱:智能藍(lán)牙尋跡小車試用計(jì)劃:藍(lán)牙控制小車行動,包括下載程序
    發(fā)表于 04-17 12:00

    智能循跡小車簡介

    簡介智能循跡小車是基于自動引導(dǎo)機(jī)器人系統(tǒng),用以實(shí)現(xiàn)小車自動識別路線,以及選擇正確的路線。智能循跡小車是一個(gè)運(yùn)用傳感器、單片機(jī)、電機(jī)驅(qū)動及自動
    發(fā)表于 07-21 07:29

    輪式智能小車行駛距離和速度的檢測

    輪式智能小車行駛距離和速度的檢測
    發(fā)表于 05-22 10:24 ?17次下載

    使用鍵盤控制智能小車的資料合集免費(fèi)下載

    本文檔的主要內(nèi)容詳細(xì)介紹的是使用鍵盤控制智能小車的資料合集免費(fèi)下載。
    發(fā)表于 06-11 17:20 ?12次下載
    使用<b class='flag-5'>鍵盤</b><b class='flag-5'>控制</b><b class='flag-5'>智能</b><b class='flag-5'>小車</b>的資料合集免費(fèi)下載

    52單片機(jī)對智能小車控制設(shè)計(jì)

    小車的機(jī)械要求保證預(yù)定的功能的前提下,我們還考慮到小車的經(jīng)濟(jì)、可靠、外形美觀,性能好、富有時(shí)代特點(diǎn)。 轉(zhuǎn)向機(jī)構(gòu)與驅(qū)動系統(tǒng)的設(shè)計(jì)是至關(guān)重要的。為了保證小車轉(zhuǎn)向時(shí)精確、靈敏、可靠性高且在轉(zhuǎn)向時(shí)
    發(fā)表于 08-14 17:28 ?5387次閱讀
    52單片機(jī)對<b class='flag-5'>智能</b><b class='flag-5'>小車</b>的<b class='flag-5'>控制</b>設(shè)計(jì)

    藍(lán)牙控制小車行駛的實(shí)驗(yàn)指導(dǎo)書詳細(xì)說明

    本文檔的主要內(nèi)容詳細(xì)介紹的是藍(lán)牙控制小車行駛的實(shí)驗(yàn)指導(dǎo)書詳細(xì)說明
    發(fā)表于 03-11 08:00 ?20次下載
    藍(lán)牙<b class='flag-5'>控制</b><b class='flag-5'>小車行</b>駛的實(shí)驗(yàn)指導(dǎo)書詳細(xì)說明

    STM32F103+NRF2401+游戲搖桿ADC雙單片機(jī)通信遙控小車

    STM32F103+NRF2401+游戲搖桿ADC雙單片機(jī)通信遙控小車文章目錄STM32F103+NRF2401+游戲搖桿ADC雙單片機(jī)通信遙控小車前言一、實(shí)現(xiàn)的功能?二、主要代碼及模
    發(fā)表于 12-17 18:10 ?27次下載
    STM32F103+NRF2401+游戲<b class='flag-5'>搖桿</b>ADC雙單片機(jī)通信遙控<b class='flag-5'>小車</b>

    Jetbot智能車如何識別與周邊物體的距離

      避撞功能是 Jetbot 一開始最令人矚目的功能,因?yàn)檫@是所有小車都必須具備的最基本“自我保護(hù)”的能力,而 Jetbot 沒有任何距離傳感,只憑著一個(gè) CSI 攝像頭就能完成這項(xiàng)任務(wù),對很多人來說是一件蠻神奇的事情,
    的頭像 發(fā)表于 02-07 11:35 ?1919次閱讀

    從ROS控制jetbot機(jī)器人

    電子發(fā)燒友網(wǎng)站提供《從ROS控制jetbot機(jī)器人.zip》資料免費(fèi)下載
    發(fā)表于 06-27 10:22 ?0次下載
    從ROS<b class='flag-5'>控制</b><b class='flag-5'>jetbot</b>機(jī)器人

    霍爾搖桿與電阻搖桿的區(qū)別與聯(lián)系

    目前市場上有霍爾搖桿和電位器搖桿,可用于游戲手柄,無人機(jī),智能控制等各類設(shè)備中,這兩種搖桿的利弊是什么呢?
    的頭像 發(fā)表于 10-10 12:06 ?1995次閱讀