在NVIDIA Jetson Nano上實現JetBot AI自駕車專案-04道路跟隨篇(上)-蒐集資料

*本文由RS components 贊助發表,轉載自DesignSpark部落格原文連結

作者/攝影 郭俊廷
難度

★★★☆☆

所需時間 2小時

 

一、前言介紹

之前介紹如何使用JetBot進行避障的資料蒐集、訓練模型、應用範例的教學,這次我們要介紹JetBot的另一個範例道路跟隨,道路跟隨是模擬車子在路上自動駕駛的情況,讓JetBot可以在道路上自動駕駛,遇到轉彎處即會轉彎,直線時即會直行。

首先來看看我們的道路跟隨的執行效果

道路跟隨的範例一樣把神經網路模型精簡分為三大步驟

資料搜集、訓練模型、應用範例

 

本篇文章要來介紹如何搜集資料讓JetBot可以在執行道路跟隨的範例

在以下路徑”Home > Notebooks >road_following”可以看到以下三個檔案,如下圖的紅框處所示。

 

注意:如果你是接續前一個專案繼續執行此專案,執行完前一個檔案的功能之後記得關閉kernel和使用視窗,才不會發生攝影機被占用等錯誤訊息。(相關教學請參考”在NVIDIA Jetson Nano上實現JetBot AI自駕車專案-02控制移動篇”之說明)

 

二、Data Collection資料搜集

點選左邊的路徑”Home > Notebooks >road_following > data_collection.ipynb”,就能打開以下的JupyterLab的Road Following – Data Collection畫面。

在資料搜集前先介紹一下我們的場地,我們使用跟範例影片一樣的樂高地圖場地。當然也可以自己設計一張地圖的場地(如下圖),如果都沒有也可使用跟地板顏色不一樣的電工膠帶自己貼成一個模擬的道路,主要是道路的邊線要跟道路不一樣的顏色這樣辨識效果會比較好。

樂高場地
地圖場地

 

首先執行第1個區塊,可以看到官方樂高場地資料蒐集的影片,在影片中我們可以看到在攝影機拍到的畫面中有一個前端有綠色圓點的線,可以看到原點都是朝道路中心點來對準拍攝的,並且用手移動JetBot在道路的任何一個方向拍照搜集資料。看不到影片的沒關係之後我們會詳細介紹如何搜集資料。

執行第2個區塊,匯入函式庫OpenCV, JetBot, Jupyter Widgets, NumPy等等函式庫。

執行第3個區塊,該區塊的程式先創建兩個224×224像素攝影機影像,即時顯示在畫面上,並且在右邊的畫面上會有一個前端有綠色圓點的線,綠色圓點所代表的是畫面的X軸跟Y軸的值,是用來之後判斷JetBot該朝甚麼方向行駛的資料。

執行第4個區塊,創建並連接手把。

進入以下網站,使用支援HTML5的手把,連接並配對修改得到的index數值(如下圖紅框所示)後按下手把任一按鈕顯示如下圖所示介面即配對完成。

https://html5gamepad.com/

第5個區塊,把X軸跟Y軸的數值跟手把的搖桿2搖桿3配對,方便等等搜集資料時使用手把的搖桿改變X軸和Y軸的數值。

第6個區塊,第一次執行時會建立一個dataset_xy的資料夾,可以根據自己的需求更改資料夾名稱,如果顯示Directories not created becasue they already exist代表資料夾已建立過。

接著可以使用搖桿控制線的X軸、Y軸的數值,並且按下手把按鈕下來儲存目前的影像,影像會儲存於dataset_xy的資料夾裡。

影像的命名格式會如下,有X軸、Y軸的數值跟UUID的格式。

xy_<x value>_<y value>_<uuid>.jpg

搜集資料的技巧如下:

綠色的圓點朝向道路的中心點指引,要搜集各個方向的資料(不同的位置不同的角度),直線前進時綠色圓點對準其道路的中心點,轉彎時Y軸數值可以調低,降低轉彎時的速度。

拍完一張照片將JetBot移動到不同方向繼續拍一下張。

數據變化越多是關鍵,當你搜集的資料不同的角度方向越多執行的效果越好。

直線前進時的圓點位置
轉彎時的圓點位置

 

收集完的資料如下,根據樂高的場地我們搜集了171張的照片。

第7個區塊,可以選擇性執行。是把搜集好的資料壓縮成ZIP檔,會根據壓縮的資料夾名稱日期來命名。(如下圖的紅框所示)

關於如果沒有手把的人是否就不能搜集資料呢,這邊幫大家整理了一下如何使用Jupyterlab的小元件建立出搜集資料所需的功能。並且加上了移動車子的功能,這樣就不用蒐集完一張資料就要移動一次車子。

首先一開始一樣要匯入函式庫,跟原始範例一樣預設的函式庫都要匯入,但這裡要一起連馬達驅動板一起定義所以加上之前常用的馬達參數。

robot = Robot(driver_board="dfrobot")

接著開始整合如何有移動車子的功能,並且使用滑桿拖曳即可更改X軸、Y軸的數值。

首先設定將檔案儲存至甚麼資料夾,資料夾名稱可以根據下圖的紅框處更改檔名,並且設定照片的存檔名稱規則,還有當控制車子時前進的速度跟時間。

接著定義按鈕的功能,有前、後、左、右、停止跟儲存六個按鈕。這部分可以參考我們之前的文章基本移動的部分。

接著創建一個224*224的攝影機,並顯示在畫面上,這裡新增設定 fps=5可以降低網路延遲、攝影機畫面沒有同步的問題。

camera = Camera.instance(width=224, height=224, fps=5)

這裡是創建按鈕跟滑桿等小元件,有前、後、左、右、停止跟儲存還有X軸Y軸的滑桿跟目前儲存照片數量顯示的計數框。

接著將滑桿的X軸Y軸同步連接到攝影機的畫面上,移動滑桿的X軸Y軸數值時攝影機的X軸Y軸也會跟著改變。

最後將按鈕的功能連結再一起就大功告成了

執行的效果如下,可以利用右邊的前、後、左、右、停止控制JetBot移動

利用中間的滑桿改變X軸、Y軸的數值使綠色圓點在道路的中心點,並按下save按鈕,將照片儲存至指定資料夾。

以上Jetson nano上執行JetBot專案Part4道路跟隨篇的講解到這邊告一段落,各位有沒有成功收集道路跟隨的資料呢?接著我們會繼續介紹更多Jetson nano相關的範例,有興趣的人歡迎繼續關注我們。

 

*本文由RS components 贊助發表,轉載自DesignSpark部落格原文連結

發佈留言

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