Duckietown – Duckiebot DB21M 小鴨車專案 Jetson-Nano 版平台組裝與操作環境設定介紹

20210310 Duckiebot
20210310 Duckiebot

若您已讀完本篇想要了解更多本次 Duckietown 系列的操作,請參考 :

一、前言

Duckietown 專案是一個由麻省理工學院( MIT )於 2016 年開始啟動的課程專案,旨在讓學生學習自動駕駛車的技術與概念。透過預先定義好的道路設計、標誌、燈號與 AprilTag 等可自行擴充的環境,讓 Duckiebot 在預設的環境中進行各項自動駕駛車任務,例如:線道跟隨、定位、路徑規劃與導航等功能。今天我們要介紹的是 Duckietown 專案中的核心 – Duckiebot !

二、Duckiebot DB21M

Duckiebot 是一個具有單板電腦、使用Differential drive configuration的移動平台 ,在 2016年首次的課程中,MIT使用一個感測器 – 魚眼鏡頭,讓 Duckiebot 在預先規劃好的場地圖中,進行物體辨識,以完成自動駕駛的各種功能。MIT並於 2017年開始,將 Duckiebot 的 相關硬體資訊,公開於全球使用,該硬體的代號為 DB17 (DuckieBot 2017)。之後的每一年 (除了2020年因疫情影響),MIT 皆會在 Duckiebot 的硬體上做修正,並將修正後的 Duckiebot 以代號方式作為不同版本的區分 (如DB18、DB19)。而在 2021年,Duckiebot 做了大幅度的變更,原本的DB17 單板電腦採用的是「Raspberry Pi」系列,2021年代號版本為 DB21M的 Duckiebot,單板電腦則變更為「Jetson nano 2GB Developer Kit (以下簡稱為 Jetson nano)」。

20210308 Duckiebot DB21M
圖一 Duckiebot – DB21M 零件開箱圖

在 DB21M (圖一)中,最大的改變是單板電腦更換為 Jetson nano 外,更詳細規格如下:

  • Chassis:
    • Differential drive configuration
  • Sensors:
    • Hall effect sensor wheel encoders
    • Front facing 160deg FOV camera
    • IMU
    • Front facing time of flight sensor
    • Various sensors for battery diagnostics
  • Actuators:
    • 2 DC motors
    • 4 Addressable RGB LEDs


這些新增的感測器,預期可讓 DB21M的運動控制變得更加精準。下面我們就來介紹該如何建置 DB21 M的使用環境吧!

三、平台硬體組裝

MIT 有將更加詳細的 Duckietown 專案使用手冊開源給全球使用者使用,在這其中的「The Duckiebot manual」C-3至C-6章節中,便有 DB17 至 DB21M 的硬體組裝說明。組裝過程中需要注意的是:

● 線路的接法:例如 LED燈模組的腳位、OLED腳位、IMU腳位等,請與硬體組裝說明中的接線方法保持一致
● 較為脆弱的連接線: DB21M 的連接線,採用 JST 連接埠,安裝或移除時請不要直接拉扯線條,防止線條與 JST 連接埠分離
● 擴充電路板(以下稱為 duckiehut)上較為脆弱的各個形式連接埠:Micro-USB 連接埠容易因安裝不當而產生損壞的連接埠,請小心地安裝

圖二 duckiehut 上較為脆弱的各個形式連接埠

安裝時請小心地安裝上述較為脆弱的地方,避免發生後續 DB21M 無法操作的問題。

將 DB21M(以下簡稱為小鴨車)安裝完成後 (圖三),我們便可以進入到下一個環節。

四、軟體操作環境設定

MIT 為了 Duckietown 專案,設計了 duckietown-shell 操作環境,目前建議大家使用 Ubuntu 20.04 作業系統安裝 duckietown-shell 操作環境,因為在後續初始化 Micro-SD卡的操作環節部分,僅支援 Ubuntu16.04 版本以上的作業系統。若不清楚該如何安裝 Ubuntu作業系統,可至此下載 「Ubuntu 20.04 LTS」映像檔並參考此「學習輕鬆應用 ROS 機器人作業系統的技術 – ROS 安裝教學」文章中的使用虛擬機安裝 Ubuntu 作業系統部分,請注意硬碟空間至少要有 100G以上的硬碟空間,後續才可以順利燒錄 duckiebot 映像檔至 Micro-SD 卡中。

安裝好 Ubuntu 20.04 作業系統後,便可以啟動 Ubuntu 系統,並按下鍵盤上的 【ctrl】+【alt】+【T】,快速開啟 Terminal 視窗,準備安裝 duckietown-shell。

在「The Duckiebot manual」的 C-1 章節中,也有詳細說明如何安裝duckietown-shell 操作環境。

若您不熟悉ubuntu作業系統,也可利用幫大家整理好的安裝 duckietown-shell腳本檔案 (圖四),快速安裝duckietown-shell。

$ git clone https://github.com/kjoelovelife/duckietown
$ cd ~/duckietown/DB21M/install_script && source laptop_ubuntu_setting.sh
圖四 下載專案與執行 duckietown-shell 環境境設定腳本

安裝完成後,便可以直接在 Terminal 視窗中輸入指令 “dts”,測試是否安裝成功。

圖五 執行 dts 指令

確認完畢後,便可以按下鍵盤的 【ctrl】+【c】按鍵 (圖五),取消執行中的程式。

五、初始化小鴨車的Micro-SD 卡

可以正常執行 duckietown-shell 後,便可以進行初始化 Micro-SD卡的部分。開始初始化之前,請先確保網際網路連線是否正常以及硬碟空間是否大於20GB,因 duckietown-shell 會自動下載映像檔至 Ubuntu 作業系統。

在「The Duckiebot manual」的 C-8 章節中,有詳細的說明該如何初始化 Micro-SD 卡。

若您不熟悉 Ubuntu 作業系統,也可以使用幫大家整理好的初始化 Micro-SD卡腳本檔案 (圖六)。

$ cd ~/duckietown/DB21M/install_script && source duckiebot_SD_card_initialization.sh
圖六 執行初始化 Micro-SD卡腳本檔案

執行完畢後,將會出現下列的問題選項,根據自己的需求回答即可(圖七)。

需要注意的是:

● Duckiebot – 小鴨車目前預設的使用者名稱與密碼尚不能修改
● Hostname 為必要選項,請自行輸入想要的 Hostname
● Wi-Fi 與 SSID 的設定之後可再更改
● 國家的設定之後可再更改
● 選擇 “type” 的時候,請選擇 “duckiebot”
● 選擇 ”configuration”的時候,請選擇 “DB21M”

圖七 初始化 Micro-SD卡時選擇相對應的選項

最後還有一個選擇,是映像檔需要燒錄的位置,請在列表中選擇正確的燒錄位置。以本次教學範例的圖八為例,因為要燒錄的記憶卡是具有 32GB的儲存空間,對照圖八的列表後,可發現 “sdb”裝置的儲存空間為 29G, 是最接近 32GB 的記憶卡儲存空間大小,因此便選擇「sdb」(圖八)。

圖八 初始化 Micro-SD卡時選擇燒錄映像檔的儲存裝置

當所有選項確認完成後,會列出目前所選擇項目的相關資訊,請記錄下相關資訊(圖九),作為日後使用小鴨車的參考依據。

圖九 初始化 Micro-SD卡時選擇項目的相關資訊列表

最後的步驟了,因為使用到 Jetson nano 的映像檔,因此會有一些相關的規範 duckietown-shell 希望您可以詳細閱讀。若是已閱讀完成,可輸入 ” y ” 確認

圖十 詳細規範閱讀完成後,輸入 ” y “確認

最後,duckietwon-shell 便會開始下載小鴨車的映像檔, 並將映像檔燒錄、驗證與設定至指定的 Micro-SD 卡中。這過大約會是 150分鐘左右,因此開始燒錄後,便可以先看個 <Duckietown 專案 – Duckiebot DB21M 基礎操作(一)> ,申請 duckietown 帳戶與 Docker 帳戶喔!

圖十一 duckietwon-shell 開始下載小鴨車的映像檔

六、測試小鴨車

1.開啟小鴨車

完成初始化 Micro-SD 卡的步驟後,便可以將 Micro-SD 卡放入 Jetson nano 的記憶卡插槽,放入前請先閱讀下列注意事項:

  • Micro-SD 卡的放入位置,請參照圖十二所標示的紅圈處 。
  • Jetson nano 的記憶卡插槽具防呆裝置,因此若是 Micro-SD 卡無法順利放入,請將 Micro-SD 卡正、反面反轉後再試一次 。
  • Jetson nano 的記憶卡插槽具有彈簧卡榫,因此在放入 Micro-SD 卡後,再輕壓一下聽到「喀」一聲後,表示已順利放入 。
  • 若想退出 Micro-SD 卡,請再次確認小鴨車處於電源關閉狀態後,便可在 Micro-SD 卡上輕壓一下,即可順利退出。
圖十二 Micso-SD 卡放入 Jetson nano 記憶卡插槽位置

安裝好 Micro-SD 卡後,再將USB型無線網路卡與電源線連接 Jetson nano 與 duckiehut ,請照著下列步驟進行:

  1. 將 USB型無線網路卡,放入 Jetson nano 的 USB 連接埠。
  2. 將雙頭 USB 電源線的 Type A 型連接頭,放入 Jetson nano 的 USB 連接埠。
  3. 將雙頭 USB 電源線的 MicroUSB 型連接頭,放入 duckiehut 的 4 號連接埠(如圖十三所示)。
  4. 將行動電源的 TypeA-MicroUSB 型連接頭,放入 duckiehut 的 1號連接埠(如圖十三所示) 。
  5. 行動電源的 MicroUSB 充電連接埠,會使用兩邊都是 MicroUSB 的連接線,請連接至 duckiehut 的 2號連接埠(如圖十三所示)。
  6. 請注意,當小鴨車啟動後,請勿在 3號連接埠接入額外的 USB 電源線對行動電源充電,這將會造成小鴨車不可預期的損壞。
圖十三 將 USB型無線網路卡與電源連接線放入 Jetson nano 與 duckiehut

已燒錄好小鴨車映像檔的 Micro-SD 卡設定完全且電源線連接正確後,小鴨車便會開始啟動。第一次啟動時,小鴨車會自動設定系統的相關配置,因此會需要花上一些時間,可以喝杯咖啡休息一下,耐心等候約 5 -10 分鐘。

我們可以透過小鴨車上的 OLED 螢幕是否有顯示資訊,來判斷小鴨車的系統是否已經設定完畢。

2.遠端登入小鴨車

啟動完成後,若是小鴨車網路環境設定正確,則可以將 Ubuntu 作業系統連線至與小鴨車同一個 Wi-Fi 熱點,並透過 SSH 的方式,遠端連線至小鴨車。遠端連線所需要的資訊,皆可在初始化 Micro-SD 卡的步驟中找尋;此外,若是使用虛擬機器的話,請記得更改網路設定為「橋接模式」,若是使用 Virtualbox 可參考【學習輕鬆應用 ROS 機器人作業系統的技術 – 理解 ROS 機器人訊息傳遞方式(下)」 設定 Virtualbox的網路模式(圖十二)。
SSH 的連線指令為:$ ssh duckie@hostname.local

其中 hostname 指的是小鴨車的實體機器名稱,本篇文章使用的範例名稱為 「edu」,如圖十四所示。
Ubuntu 系統主機若是第一次進行 SSH 的遠端登入,將會詢問您是否要將遠端主機登入至 SSH 的紀錄中,請輸入 ” yes ” 即可。
接著會再詢問遠端主璣的密碼,請輸入 “quackqauck” ,輸入正確後即可遠端登入至小鴨車。

圖十四 使用 SSH 遠端登入小鴨車

若是無法透過 SSH 的方式進行遠端連線,可先至小鴨車上的OLED確認是否有 Wi-Fi 的圖示,若沒有便代表 Duckiebot 的網路環境設定不正確,無法連線至指定的 Wi-Fi。這時我們可以使用 MicroUSB 傳輸線,連接小鴨車與操作主機,其中操作主機的系統若是 windows 10 也可以使用喔! MicroUSB 傳輸線放入小鴨車的位置,可參照圖十五紅圈處。

圖十五 將 MicroUSB 傳輸線放入 Jetson nano

本篇範例使用系統win 10 為操作主機,以 MicroUSB 傳輸線連接至小鴨車,因此當連接成功後,系統 win10 的操作主機會顯示偵測到新的磁碟機,偵測到的新磁碟機可參考圖十六 。

圖十六 系統 win10 操作主機與 Jetson nano 成功連線後偵測到的磁碟機

接著開啟系統 win 10 的 command 視窗,開啟方法為在下方的工具列中搜尋 ” cmd “,便可以找到 command 工具,請點擊圖示並開啟 command 視窗,如下圖所示。

圖十七 搜尋並開啟 command 視窗

開啟 command 視窗後,便可以輸入指令,透過 MicroUSB 傳輸線並輸入密碼 “quackquack”,遠端登入到小鴨車。需要注意的是,在輸入密碼時不會產生字樣!

c:\> ssh duckie@192.168.55.1
圖十八 透過 MicroUSB 傳輸線,遠端登入至 Jetson nano

登入完成後,可利用 vim文字編輯器(圖十一),修改“/etc/wpa_supplicant.conf”。

$ sudo vim /etc/wpa_supplicant.conf
圖十九 使用 vim 文字編輯器編輯

進入到編輯畫面後,直接按下 【I】鍵,待左下角出現「—INSERT –」字樣後,開始進行編輯,網路設定的格式如下:

ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1
country=CH
network= {
    id_str=”network_1″
    ssid=”comnet23243″
    psk=”MSNDJWKE32″
    key_mgmt=WPA-PSK
 }

其中所代表的意思為:

● Id_str:小鴨車的對此網路設定的名稱,可自行修改。
● ssid:想要連線的 WI-Fi 熱點名稱。
● psk:想要連線的 WI-Fi 熱點密碼。
● key_mgmt:加密方式,一般不需要更此選項。

變更完成後,先按下 【esc】按鍵,再輸入 “:wq”後(圖十三),便可按下【enter】按鍵儲存並離開 vim 編輯器。

圖二十 準備存檔並離開 vim 編輯視窗

※ 接著輸入下列指令重新啟動小鴨車

$ sudo reboot

便可以將小鴨車重新開機,等到 OLED 的畫面顯示無線網路已連接後,便可以透過 Wi-Fi ,使用 SSH 進行遠端連線。

※ 若是想要將小鴨車關機,請遠端登入小鴨車後,輸入下方指令

$ sudo shutdown now

當小鴨車上的 OLED螢幕電源指示燈關閉後,便表示 Jetson nano 已成功正常關機,請再將 duckiehut 的 1號與4號連接埠上連接的 MicroUSB 電源線,與 Jetson nano 上的 USB 連接埠的 USB 電源線拔除。2號連接埠的電源線也請至 duckiehut 上移除,避免因不必要的碰撞導致2號連接埠的腳位損壞。

當小鴨車上的 OLED螢幕與電源指示燈關閉後,便表示 Jetson nano 已成功正常關機,請先將 duckiehut 1號、4號連接埠,與 Jetson nano 上共三個USB 電源線拔除。再將2號連接埠的電源線移除,避免因不必要的碰撞導致2號連接埠的腳位損壞。

下一篇文章我們將會開始帶大家進行全新版本的 Duckietown 專案,喜歡我們文章的夥伴們,請多多分享並持續關注我們後續的文章喔!