NVIDIA Jetson nano Donkey Car – 香港網友作品分享Fei Cheung

原文[Getting started with Jetson Nano and Donkey car aka Autonomous Car],感謝 Fei Cheung 兄賜文~ 以下原文翻譯開始,也請參考機器人王國非強制購買連結

Jetson Nano是一款針對AI邊緣運算 (注意這個詞最近有點氾濫) 的效能強大又經濟實惠的單板電腦。它只要USD 99,就能讓 maker 社群得以運用機器學習的強大威力。

我用 Raspberry Pi 來玩 Donkey car 有一段時間了。我真的很喜歡 Pi 也感謝社群所做的貢獻。我試過用它來訓練簡易CNN,但要加上更多感測器(例如IMU、Lidar) 之後,Pi的運算能力就明顯不足了。如果是需要大量運算的神經網路模型,在 Pi 上的 FPS就不會太好,甚至根本無法執行。我需要更強大但不能太貴的東西 😛 看看能否在 USD 100以下囉。

左:加裝了Lidar與IMU;右:標準Donkey car配置

Jetson Nano來的正是時候。與Raspberry Pi不同,Jetson Nano 大概在一個月前發布,相關的教學與專案也很少。我花了很大一番功夫才把Jetson nano和Donkey car設定完成,所以決定要寫(也是我第一篇啦😆) 一篇教學,和大家分享如何設定。開始吧。

Jetson Nano方面只需要Jetson Nano主板、micro SD卡與Wi-Fi USB dongle

板子上沒有Wi-Fi 與藍牙讓我有點訝異。我根據 Nvidia的教學 來燒錄映像檔到 SD卡,並購買了建議的 Wi-Fi USB dongle:Edimax EW-7811Un

您只要跟著 NIVIDA原廠教學操作就可以開機了。看到歡迎畫面了嗎?恭喜!

Image credit: Nivida

不過… 在測試時,Wi-Fi 每幾分鐘就會斷線,這樣根本沒辦法下載必要的套件。我花了整整兩天 😕 來找答案,下列指令就是解答:

echo “blacklist rtl8192cu” | sudo tee -a /etc/modprobe.d/blacklist.conf

上述指令會關掉一些討厭的驅動程式,Wi-Fi 之後就正常了。另一個比較好的做法是重新編譯驅動程式,請參考本說明

安裝套件

NVIDIA Jetson nano是一款為了機器學習而生的嵌入式系統,因此當然要安裝機器學習的框架!以下內容也可在 NVIDIA論壇中找到。

先從Tensorflow開始吧!

請在terminal中輸入以下指令:

sudo apt-get install python3-pip libhdf5-serial-dev hdf5-tools

pip3 install --extra-index-url https://developer.download.nvidia.com/compute/redist/jp/v42 tensorflow-gpu==1.13.1+nv19.3 --user

這需要一段時間,機器看起來像是卡住一樣,我的nano花了大概45分鐘。裝完之後別忘了測試一下,確認沒有任何錯誤訊息。

donkey@donkey-desktop:~$ python3
Python 3.6.7 (default, Oct 22 2018, 11:32:17)
[GCC 8.2.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import tensorflow as tf
>>>

Pytorch也一起裝好吧

請在terminal中輸入以下指令:

wget https://nvidia.box.com/shared/static/veo87trfaawj5pfwuqvhl6mzc5b55fbj.whl -O torch-1.1.0a0+b457266-cp36-cp36m-linux_aarch64.whl
pip3 install numpy torch-1.1.0a0+b457266-cp36-cp36m-linux_aarch64.whl

再次檢查看看有沒有裝好

donkey@donkey-desktop:~$ python3
Python 3.6.7 (default, Oct 22 2018, 11:32:17)
[GCC 8.2.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import torch
>>> print(torch.__version__)
1.1.0a0+b457266
>>> print('CUDA available: ' + str(torch.cuda.is_available()))
CUDA available: True
>>>

最後安裝Keras,Donkey car會用到

我用apt-get 而非 pip,請在終端機輸入以下指令:

sudo apt-get install python3-scipy
sudo apt-get install python3-keras

測試:

donkey@donkey-desktop:~$ python3
Python 3.6.7 (default, Oct 22 2018, 11:32:17)
[GCC 8.2.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import keras
Using TensorFlow backend.
>>>

軟體差不多完成了,來看看硬體吧。

硬體設定

在此不會介紹Donkey car的逐步安裝過程,請參考Donkey Car網站教學,這邊只會介紹幾個關鍵步驟:

  1. PCA9685 PWM driver
  2. Camera

更新GPIO函式庫

NVIDIA 已提供了GPIO函式庫,並且與RPi.GPIO的API是一樣的,超棒!所以要從RPi函式庫轉移到Jetson Nano幾乎不用改什麼東西。請根據NVIDIA GitHub說明安裝好函式庫之後就可以開始測試GPIO腳位了。

安裝 PCA9685伺服機模組函式庫,用於控制方向盤與油門

pip3 install Adafruit_PCA9685

請將 PCA9685 接上 Jetson nano。請參考板子上的腳位編號即可:

PCA9685 Raspberry Pi GPIO
VCC 3.3V
SDL SDL(3)
SCL SCL(5)
GND GND

一如往常,測試接線是否正常。請在終端機中輸入以下指令:

donkey@donkey-desktop:/opt/nvidia$ sudo i2cdetect -y -r 1
0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00:          -- -- -- -- -- -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
40: 40 -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
70: 70 -- -- -- -- -- -- --

請看到位址0x40,這就是PCA9685。更多關於I2C通訊協定請參考本說明

您的使用者帳號需要加入I2C群組才能存取I2C頻道。設定好之後,請將Pi重新開機才可以使用。請在終端機中輸入以下指令:

sudo usermod -a -G i2c username
sudo reboot

檢查使用者的群組設定:

donkey@donkey-desktop:~$ groups
i2c adm cdrom sudo audio dip video plugdev lpadmin gdm sambashare gpio

搞定。還ok嗎?下一步是設定攝影機。壞消息是 Pi camera 1 無法用於 Jetson Nano。我常用的廣角相機也不行。

左到右:Pi Camera 2 / Pi camera 2 載板搭配廣角鏡頭 / 舊款 Pi 廣角鏡頭
魔術方塊只是比例尺 ;P

重點在於不要選晶片型號為 OV5647 的攝影機,要選用晶片型號為 IMX219 的款式。IMX219驅動程式已經包含在映像檔中。

Jetson nano 的 CSI 接頭

拉開卡楯 ,把相機排線整齊插入之後再把卡楯插回。請注意排線的方向,兩邊金屬接頭要在同一側。接好之後接上電源應該就沒問題了,攝影機請參考本文

執行臉部辨識範例,由於使用廣角鏡頭所以偵測效果不算太理想

最後一步:安裝Donkeycar模組

我 fork 了 original donkey car repo 再做了一些修改。您可從我的 repo 下載 Donkey car 函式庫並開始安裝。請在終端機輸入以下指令:

git clone https://github.com/feicccccccc/donkeycar.git
cd donkeycar
pip3 install -e .

有興趣深入了解的話,我做的修改如下:

  1. Add a new camera class
  2. Add a default bus to Actuator parts
  3. Add Int typecasting in Keras.py for a variable to make training works

設定所需的套件大約要45分鐘,請用以下指令建立您的小車資料夾:

donkey@donkey-desktop:~/sandbox$ donkey createcar d2

修改 manag.py 來使用新的攝影機。

#from donkeycar.parts.camera import PiCamera
from donkeycar.parts.camera import CSICamera

設定新的攝影機

#cam = PiCamera(resolution=cfg.CAMERA_RESOLUTION)    
#V.add(cam, outputs=['cam/image_array'], threaded=True)
cam = CSICamera(resolution=cfg.CAMERA_RESOLUTION)
V.add(cam, outputs=['cam/image_array'], threaded=False)

差不多都完成了,您可以根據自己的資料集來玩車子了!

donkey@donkey-desktop:~/sandbox/d2$ python3 manage.py drive

請用遠端連線登入 Jetson nano 來控制車子。最酷的地方是可以直接在 Jetson Nano上訓練模型喔!

訓練過程的SSH畫面,使用 Tegra X1 from Jetson Nano.

開心玩吧!

使用PS4手把來控制Jetson nano小車。懶得把 Pi 拆下來 😜

心得

  1. 在寫本篇文章時,我在垃圾箱找到一個USB Bluetooth dongle。插上 Jetson Nano 居然可以直接用!不需要額外設定就可以連到我的 PS4手把,讚!請根據本文來設定手把。合適的手把在取得資料集時非常方便。
  2. 方向盤與油門好像會彼此干擾,原因應該是Jetson Nano與馬達都很耗電的緣故。瞬間電流過大所導致的壓降會影響ESC訊號。解法有二:對PCA9685伺服機驅動板使用獨立的電源或加上一個較大的電容來避免壓降。我個人喜歡第二種作法,但當時手邊也沒有電容。所以由下圖可看到我剪了一條USB傳輸線並焊了兩條跳線上去,最後再接到 PCA9685伺服機驅動板。
Extra power to V+ and V- on PCA9685

3. 如果需要完整SD卡映像檔的話,請和我說!(或留言在CAVEDU本文)。很多人要的話我就會放上來 XD

3 thoughts on “NVIDIA Jetson nano Donkey Car – 香港網友作品分享Fei Cheung

  1. tangmingsh says:

    阿吉 您好!我曾有幸在上海创客嘉年华上见到过您演讲。我也尝试在Jetson nano上安装Donkeycar,但遇到错误,不知如何解决。能否分享一下您的安装好 Donkeycar 的Jetson nano SD卡映像檔?谢谢!

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *