iT邦幫忙

2022 iThome 鐵人賽

DAY 18
3
自我挑戰組

PixelBit 可以這樣玩!系列 第 18

(Day 18)影像辨識機械手臂(Part 1)

  • 分享至 

  • xImage
  •  

教學原文參考:影像辨識機械手臂

https://www.circuspi.com/wp-content/uploads/2022/06/1000x526_9.jpg

一、簡介

這個單元著重在將之前所學到的內容做整合,並且應用到工業類的主題。讓我們試想一個場景,傳統工廠對於物料分類,大多仰賴人工搬運。當貨物、料件運送至指定地點後,再由倉儲人員開堆高機出來搬貨,依照類別存放在指定層架。

想想看,其中是不是有能自動化的部份呢?像是在一個倉庫內會有很多區域,每個區域都存放著不同的東西,若是能架一臺機器手臂於指定位置,那麼人員只要將屬於這間倉庫的料件置於門口,是否就能讓手臂自動幫我們分門別類地放好呢?當然,這還需要讓手臂看得見是什麼貨物才行。

https://www.circuspi.com/wp-content/uploads/2022/05/01.jpg

接下來就讓我們來設計一個,影像辨識後能讓手臂幫我們搬運物件的專題。藉由 Pixel:bit 的 ESP32 與攝影鏡頭,並搭配 Edge Impulse,可以完成影像辨識貨物分類。另外,我們還需要一個機器手臂,手臂控制的部份可以交給 ATmega328p,但為了讓手臂的馬達方便連接,還需要準備一塊適合的擴充板。接著就剩下用來辨識的貨物了,這就自己 DIY 設計吧!

二、所需設備

可以選擇自己手邊有的機器手臂或是擴充板,設計出屬於自己的操作場景。接下來的教學內容,我們會使用下列設備做示範:

  1. Pixel:bit x1

  2. Micro USB to USB Type-A數據傳輸線 x1

  3. meArm 迷你機械手臂 x1

  4. SG90 9G伺服馬達 180度 x4

  5. MbitBot 多功能板 x1

  6. 聚合物鋰電池-1000mAh 3.7V x1

  7. 固定板或是製作貨物的材料(自行 DIY)

三、規劃流程

將任務分工後我們知道,ESP32 負責辨識與顯示,ATmega328p 負責手臂控制。詳細動作流程規劃如下圖所示,以顏色區分工作權責,藍色區塊為 ATmega328p,紅色區塊則是 ESP32。

https://www.circuspi.com/wp-content/uploads/2022/05/02-1.jpg

我們以按下 Pixel:bit 上面的按鈕來啟動辨識任務,按鈕是由 ATmega328p 控制。當 ATmega328p 讀取到按下按鈕的動作,會立即發送請求訊號給 ESP32,當 ESP32 收到請求訊號後,將啟動拍攝與辨識功能,並將結果顯示在螢幕上,同時回傳結果給 ATmega328p。收到結果的 ATmega328p,經比對結果後控制手臂夾取貨物並搬移至指定區域。

四、確認目標

我們在網路上找到兩張圖片,做為讓 Pixel:bit 辨識的目標。分別是左側的「寶特瓶」與右側的「廚餘」。大家可以依照自己的喜好選擇要辨識的目標。

圖片來源:https://www.freepik.com/home

https://www.circuspi.com/wp-content/uploads/2022/05/03-2.jpg

將圖片印出來後,黏在裁切的厚紙板或木板上,將其製作成小牌子,牌子末端設計 T 型結構,以便手臂方便夾取,也讓牌子在移動的過程中不易脫落。

https://www.circuspi.com/wp-content/uploads/2022/05/04.gif

五、訓練模型

整個流程最重要的一環,就是要能夠辨識物品,這樣才能呼叫機器手臂將東西搬運到指定地點。在教學單元(五)教學單元(六),我們已經學會如何訓練一個模型。從使用 Pixel:bit 拍攝照片蒐集資料,上傳至 Edge Impulse 線上平台,並透過平台服務訓練與評估模型。

https://www.circuspi.com/wp-content/uploads/2022/05/05-2.jpg

1. 資料蒐集

請依照教學單元(五)的教學步驟,使用 Pixel:bit 蒐集「寶特瓶」與「廚餘」的照片資料,蒐集的照片越多越好,最好是不同角度或是不同位置的圖片。

https://www.circuspi.com/wp-content/uploads/2022/05/06-1.jpg

小知識

資料蒐集的正確性會大大影響訓練出來的模型,請確保同類別的資料沒有參雜其他照片,例如蒐集的寶特瓶資料內,不應該參雜廚餘的資料,或是別的圖像資料。每個種類的資料數量平不平均,也是一個影響模型準確性的重點,請儘量讓每個種類可以蒐集到等量的資料,例如寶特瓶蒐集到的資料大約是 100 張,請讓廚餘的資料也接近 100 張。最忌諱的就是數量相差過大,像是寶特瓶的資料是 123 張,廚餘的資料只有 10 張。

2. 資料上傳

將蒐集到的照片全數上傳至 Edge Impulse ,步驟可參照教學單元(六),我們將寶特瓶的資料標籤設定為「bottle」,廚餘的資料標籤則是「food」。請依照您找到的圖片,設定自己能理解的標籤名稱。

https://www.circuspi.com/wp-content/uploads/2022/05/07-1-1.jpg

設定圖片裁切大小,請選擇「96 x 96」,並確認「Output features」是不是我們要辨識的兩個類別。

https://www.circuspi.com/wp-content/uploads/2022/05/08-1.jpg

3. 設定訓練參數並訓練

設定訓練次數的部份我們設定「200次」,模型的選擇是用預設的「MobileNetV1 96×96 0.1」。

https://www.circuspi.com/wp-content/uploads/2022/05/09-1.jpg

完成上述設定後即可開始訓練模型,下圖是訓練後的結果,準確度有 97% 還不錯。

https://www.circuspi.com/wp-content/uploads/2022/05/10-2.jpg

接著同樣參照教學單元(六)的內容,將訓練好的模型編譯成 Arduino library,再將模型儲存到自己的電腦。

https://www.circuspi.com/wp-content/uploads/2022/05/11-2.jpg

六、建置模擬場域

請自行組裝 meArm 機器手臂,接線方式請參考下方兩張圖。

https://www.circuspi.com/wp-content/uploads/2022/05/12-1.jpg

請依照上圖伺服馬達對應的編號,連接到擴充板「MbitBot」上,並順勢將電池也接上去。

https://www.circuspi.com/wp-content/uploads/2022/05/13-2.jpg

可以自行裁切厚紙板或木板,並用麥克筆自己畫出區域,前提是手臂夾爪要能到的了的地方喔!請大家自行發揮。

我們使用雷切機製作了一片有 A、B 區與擺放區的木板,並用螺絲、螺帽與銅柱將各部件都固定,最後將 Pixel:bit 插上,完成圖如下所示:

https://www.circuspi.com/wp-content/uploads/2022/05/14-1.jpg

七、範例程式下載

若之前已下載過範例程式,即可在之前下載的資料夾中找到「07_Arm_control」。如果還沒下載,請點選連結,進到網頁看到「Code」按鈕,點選後選擇「Download ZIP」就能將檔案整個下載下來。

解壓縮後,這個單元的範例程式,就放在資料夾名稱為「07_Arm_control」裡。

請接續「影像辨識機械手臂(Part 2)」。

更多有趣系列教學文章


上一篇
(Day 17)一起玩 Dino Game 小恐龍遊戲(Part 2)
下一篇
(Day 19)影像辨識機械手臂(Part 2)
系列文
PixelBit 可以這樣玩!30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言