Jetbot AI 這樣玩-單元(三) 讓 Jetbot 動起來!

相關連結

一、簡介

在「JetBot AI 這樣玩-單元(二) 操作環境設定篇」文章中, 我們成功地透過區域網路與 Jupyter Lab, 遠端登入到 Jetbot。接下來,我們一起來讓 Jetbot 動起來吧!

二、硬體準備

這次的硬體同樣使用 JetBot AI自駕車套件(以下皆簡稱 Jetbot) 來進行操作,請先確保手上擁有的硬體零組件都與我們使用的相同,避免發生無法操作的情形。若是沒有相對應的硬體,也可以趕快入手,一起踏入人工智慧的世界喔!

Jetbot AI 自駕車套件

準備好 Jetbot 之後,便可以將電源線 Type-C 端放入 Jetbot 的 Type-C 連接埠,並確認 Jetson Nano Developer kit 2GB (以下簡稱 Jetson Nano 2GB) 與馬達控制板的電源線皆已放入行動電源的連接埠中,即可啟動 Jetbot 。

三、軟體準備

這邊的軟體準備,指的是在操作主機上的軟體。本篇文章中我們所使用的操作主機為系統 Win 10 的筆記型電腦,並可使用Wi-Fi 連線至網際網路與操作 Google 瀏覽器

四、操作環境設定

請先依照「JetBot AI 這樣玩-單元(二) 操作環境設定篇」的步驟,讓操作主機能夠使用區域網路與 Jupyter Lab ,遠端登入至 Jetbot

若是想要更加理解 Jupyter Lab 的相關操作,可至 Jupyter Lab 的文件說明中了解。

也請確保 Jetbot 目前被放置在平穩的地面上,若是將 Jetbot 放置在與地面有高低落差的桌子上,請務必確保 Jetbot 移動時不會掉落。若是只能放在桌面上,您可以暫時將 Jetbot 與桌子呈現懸空狀態,避免 Jetbot 因為突然移動,而摔落至地面造成損壞。

五、開始移動 Jetbot!

使用 Jupyter Lab 遠端登入到 Jetbot 後,請先到頁面左邊的欄位中,選取操控 Jetbot的程式碼,檔案路徑是「/jetbot/notebooks/basic_motion/basic_motion.ipynb」,詳細操作請參考下圖所示。

在已登入 Jetbot 的 Jupyter Lab 中,開啟檔案 basic_motion.ipynb

由於 Jupyter Lab 的特性是可以分段執行程式碼,因此我們能夠執行每一小段程式碼,觀察 Jetbot 的移動情形。接下來我們將分成二個部分,程式碼個別說明、程式碼整合應用,希望這可以幫助您在之後能夠自行設計程式碼,隨心所欲地操控 Jetbot 的移動方式喔!

5-1. 程式碼個別說明

在這部分中,我們將會詳細地說明在程式碼整合應用中會使用到的一些程式碼。

1. from jetbot import Robot
這是匯入 NVIDIA 為了 Jetbot 設計的 Python Package,使用模組 Robot 便可以快速地透過程式碼 Python ,與 Jetbot 上的馬達控制板進行通訊。

2. robot = Robot()
在 「Python 中的所有事物都是物件 」的情形下,我們將模組 Robot,指派給 robot 這一個物件,以便進行程式碼的設計與閱讀。

到這邊為止,透過這兩段程式碼,我們就已經可以開始設計 Jetbot 的移動模式了!模組 Robot 的 應用程式介面(Application Programming Interface,以下簡稱 API) 請參考下表「 模組 Robot 的涵式使用方法 」。

模組 Robot 中的 涵式涵式定義
set_motors(left_speed, right_speed)設定左邊馬達轉速為 left_speed設定右邊馬達轉速為 right_speed
forward(speed)讓 Jetbot 前進,速度為 speed
backward(speed)讓 Jetbot 後退,速度為 speed
left(speed)讓 Jetbot 左轉,速度為 speed
right(speed)讓 Jetbot 右轉,速度為 speed
stop()讓 Jetbot 停止移動

需要注意的是,模組 Robot 將 Jetbot 以現有的電力,進行全速移動的速度設定為 1,這裡我們以一個數學公式表示: Speedmax= 1

而在表格1中的數值 speed ,則是指全速移動的比例數值,例如若將數值 speed 設定為 0.3,則實際上 Jetbot 移動的速度會是全速移動的 30%。

為了解釋這一段話,我們將會以一個數學公式表示,其中需要先知道的是

  • speed:代表設定的速度值比例。
  • speedmax:代表 Jetbot 移動的最大速度。
  • speedactual:代表 Jetbot 實際移動的最大速度。

因此若是以數學公式表示模組 Robot 中、各項涵式定義的 speed 意義,則會是 speedactual=speedmax x speed

透過數學公式的說明,便可以發現數值 speed 的大小,會在 0(0%) 與 1(100%) 之間。若是將數值 speed 的設定超過 1 時,模組 Robot 會自動將數值 speed 設定為 1 ,讓 Jetbot 只以現有電力可使用的速度最大值移動,因此若是行動電源快要沒電時,就算將數值 speed 設定為 1,Jetbot 也只會像烏龜一樣緩慢移動。

知道了模組 Robot 中各項涵式的 API 之後,我們便可以繼續使用程式碼 Python,來設計 Jetbot 的移動方式囉!

3. import time
模組 Robot 中,只有定義關於 Jetbot 如何使用馬達控制板的涵式,因此我們需要模組 time,來協助我們需要將 Jetbot 移動多久。 

5-2. 程式碼整合應用

在第一部分程式碼個別說明中,我們已經詳細說明了三個主要的程式碼段落。接下來,我們來自己動手嘗試設計 Jetbot 的移動方式吧!

首先是匯入模組 Robot 與定義物件 robot,請點擊程式碼所在的元件(cell),按下鍵盤的【ctrl】+【enter】,或是按下頁面中的按鍵 【play】(如下圖紅框處)執行程式碼區段。這時可以發現,執行成功的元件前方,會出現數字(如下圖的綠框處),這個數字是表示執行成功的順序,因此若是後續的程式碼執行時發生問題,可試著先查看執行順序,或許可以解決無法執行的問題。

在已登入 Jetbot 的 Jupyter Lab 中,執行檔案 basic_motion.ipynb 中的程式碼

接下來我們跳過一些程式碼,直接執行程式碼 import time 後面的區段,請參考下圖所示。

注意執行成功後, Jetbot 會直接左轉 0.5 秒鐘,請務必確認 Jetbot 處在可以安全移動的情況下,再執行程式碼。

在已登入 Jetbot 的 Jupyter Lab 中,執行檔案 basic_motion.ipynb 中的程式碼,
讓 Jetbot 以最大速度的 30 %,往左移動 0.5秒

我們成功的自己使用程式碼,遠端控制 Jetbot 的移動了!接下來可以自己嘗試使用模組 Robot 的 API,撰寫更多的程式碼,讓 Jetbot 照著自己的想法移動喔!

六、結論

透過了解模組 Robot 的 API 使用方法,我們便可以自行設計 Jetbot 的移動模式。當然如果想要可以更加自由的遠端遙控 Jetbot,透過不停更新程式碼的方式將會是一件相當麻煩的事情,因此我們可以自行設計一個圖形化使用者介面(Graphical User Interface),透過調整頁面中的滑桿,或是按下頁面中按鈕的方式,來遠端遙控 Jetbot。這部分我們會在下一篇文章與大家分享,請大家繼續關注我們的技術文章喔!