<acronym id="s8ci2"><small id="s8ci2"></small></acronym>
<rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
<acronym id="s8ci2"></acronym>
<acronym id="s8ci2"><center id="s8ci2"></center></acronym>
0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

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

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

如果已經將 Jetbot 智能小車組裝好的話,現在就可以開始執行 Jetbot 智能小車實驗,接下來的操作都在以下環境中執行:

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

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

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

2. 所有實驗的界面都在 PC 上的瀏覽器操作:確定好連線之后,在 PC 的瀏覽器(推薦使用 Google Chrome)輸入“https://10.42.0.1:8888” 就可以進入,第一次連上去需要輸入 “jetbot” 這個預設的密碼,只要第一次選擇保存密碼,以后進入就不需要再輸入密碼。

3. 關于 Jupyter 的使用技巧請自行在網上學習,這里只對 Jetbot 各個項目的代碼進行探索與調試建議。

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

5. 最后提醒一點,Jetbot 的重點是在于“學習”而非“競技”,因此避免將電機馬達轉速調到太快,如果感覺車速太快時,請自行將實驗代碼里的速度調低。

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

現在就開始 Jetbot 的基礎項目,請自行登陸 Jupyter 并進入 jetbot/notebooks 目錄下,總共有 5 個實驗目錄。

基本動作(Basci Motion)

在 Jupyter 進入 basic_motion 目錄,里面有 basic_motion.ipynb 這個實驗內容,點選后就能打開,這里的代碼主要分為四大段:

1. 基本操作:

這部分的代碼非常直觀,并且有很詳盡的英文解說,最主要是讓大家了解如何導入關于電機控制的模塊,并且創建 robot 對象來控制 Jetbot 的行進:

fromjetbotimportRobotrobot = Robot()

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

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

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

robot.left(speed=0.3)robot.stop()import timerobot.left(0.3)time.sleep(0.5)robot.stop()

(2) 用 robot.set_motor (左輪速, 右輪速) 同時設置左右輪速度:

robot.set_motors(0.3,0.6)time.sleep(1.0)robot.stop()

(3) 對 robot.left_motor.value 與 robot.right_motor.value 這兩個變量進行設置:

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

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

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

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

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

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

importipywidgets.widgetsaswidgetsfrom IPython.display import display
#創建”left”與”right”兩個垂直滑塊小部件,數值范圍在[-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')
#創建一個水平框,放置前面生成的兩個垂直滑塊slider_container = widgets.HBox([left_slider, right_slider])
#在下面這個滑塊容器display(slider_container)

(2) 單向顯示:使用 traitlets.link 函數將左右滑塊的值分別與左右輪的值進行連接,這樣就能看到兩個滑塊的值會跟著兩個輪的值而改變。

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 函數將左右滑塊的值分別與左右輪的值進行連接,這時候可以試試看調整兩個滑塊的值(上下拖),就能改變兩個輪的轉速。

left_link=traitlets.dlink((robot.left_motor,'value'),(left_slider,'value'))right_link = traitlets.dlink((robot.right_motor, 'value'), (right_slider, 'value'))

3. 將控制函數附加到事件:

使用 traitlets 的另一種方法是將函數(如 forward)附加到事件。每當對象發生更改時,這些函數都會被調用,并且會被傳遞一些有關該更改的信息,如舊值和新值。讓我們創建并顯示一些用于控制機器人的按鈕。

(1)創建并顯示 4 個方向按鈕與中間的“停止”按鈕:

#創建5個按鈕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 個方向的動作指令:

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

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

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

#捆綁方式:按鈕.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)

完成這個捆綁的步驟之后,按下按鈕才會向 Jetbot 發送控制指令,現在試試看能不能用這個方向鍵來控制 Jetbot 小車!

4. 心跳停止開關:

這是個預防 Jetbot 與 PC 直接因為距離過遠而失去控制能力狀況下,提供的一種安全管理措施,這部分的內容請自行測試即可,沒什么難度,這里不做說明。

以上就完成這個智能小車的最基本運動功能,大家可以多嘗試調整轉速、方向、持續時間等參數,感受一下這個基本運動的處理方式。

搖桿操作(Teleoperation)

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

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

將搖桿接上 PC 之后,如果是 Linux 操作系統請執行以下指令,檢查是否已經安裝:

ls /dev/input/js*

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

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

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

執行第一步驟之后,如果出現以下畫面,就表示驅動的加載也都正確。

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

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

文章出處:【微信公眾號:NVIDIA英偉達企業解決方案】歡迎添加關注!文章轉載請注明出處。
審核編輯:湯梓紅


聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • NVIDIA
    +關注

    關注

    14

    文章

    4598

    瀏覽量

    101772
  • 鍵盤
    +關注

    關注

    4

    文章

    843

    瀏覽量

    39011
  • 控制
    +關注

    關注

    4

    文章

    997

    瀏覽量

    122157

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

文章出處:【微信號:NVIDIA-Enterprise,微信公眾號:NVIDIA英偉達企業解決方案】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

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

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

    簡單解碼PS2鍵盤

    簡單的解碼PS2鍵盤的W/A/S/D四個按鍵,用來控制H橋,從而控制小車行進的方向
    發表于 07-08 19:02

    智能語音控制小車

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

    觸屏尋跡智能車使用“安芯一號”SLH89F5162

    推算出小車運行的速度以及方向,然后通過無線發送的方式送給小車,從而控制智能小車的行走路線和速度、路程,實現
    發表于 10-15 12:46

    智能小車

    HC-06作為服務端??蛻舳瞬捎肊clipse開發環境,JAVA編程,服務端采用單片機控制。雙方通過串口進行通信,單片機驅動直流電機控制小車行動。小車實現接收手機遙控信號并靈活地進行前
    發表于 10-29 16:35

    藍牙控制小車行

    有誰能幫忙寫一個藍牙控制小車行進的程序??!謝謝大神了!
    發表于 04-17 19:09

    智能小車地面控制端的設置

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

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

    項目名稱:智能藍牙尋跡小車試用計劃:藍牙控制小車行動,包括下載程序
    發表于 04-17 12:00

    智能循跡小車簡介

    簡介智能循跡小車是基于自動引導機器人系統,用以實現小車自動識別路線,以及選擇正確的路線。智能循跡小車是一個運用傳感器、單片機、電機驅動及自動
    發表于 07-21 07:29

    讀取PS2無線手柄的左搖桿信號并驅動小車運動

    使用Arduino mega 2560讀取PS2無線手柄信號并控制小車運動文章目錄使用Arduino mega 2560讀取PS2無線手柄信號并控制小車運動1 前言2 硬件連接2.1
    發表于 09-01 08:13

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

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

    使用鍵盤控制智能小車的資料合集免費下載

    本文檔的主要內容詳細介紹的是使用鍵盤控制智能小車的資料合集免費下載。
    發表于 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>的資料合集免費下載

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

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

    從ROS控制jetbot機器人

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

    霍爾搖桿與電阻搖桿的區別與聯系

    目前市場上有霍爾搖桿和電位器搖桿,可用于游戲手柄,無人機,智能控制等各類設備中,這兩種搖桿的利弊是什么呢?
    的頭像 發表于 10-10 12:06 ?888次閱讀
    亚洲欧美日韩精品久久_久久精品AⅤ无码中文_日本中文字幕有码在线播放_亚洲视频高清不卡在线观看
    <acronym id="s8ci2"><small id="s8ci2"></small></acronym>
    <rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
    <acronym id="s8ci2"></acronym>
    <acronym id="s8ci2"><center id="s8ci2"></center></acronym>