建立具備實體 AI 的電子元件分類系統

前言

本文為一個機器人分類系統專案的整體概述。在此專案中,我們嘗試(而且成功地)利用機械手臂將散放在桌面上的電子元件進行分類。系統使用的主要硬體包括:

上述產品皆可於 DigiKey 購買。

本文將從高層次角度介紹專案中遇到的挑戰與設計決策,逐步說明各個開發階段,並分享哪些部分進展順利、哪些部分遇到瓶頸。讓我們開始吧!


第一部分:它動起來了!

Beagle 負責控制整個系統,但真正的主角是機械手臂。如果它無法正常運作,整個專案就會失敗,或者必須採用昂貴的替代方案。

因此,本專案的第一步就是驗證機械手臂是否能依照預期移動。接著,我們將問題拆解並定義系統需求:

系統必須能夠:

  1. 偵測電子元件
  2. 夾取元件
  3. 放入對應的分類盒中

分類盒類別:

  • 電晶體(Transistors)
  • 開關(Switches)
  • 電阻(Resistors)
  • IC 晶片(Chips)
  • 電容(Capacitors)

在夾取元件之前先完成偵測會比較理想,因為這樣攝影機能在機械手臂未遮擋視野的情況下完成拍照。

不論實際動作流程如何安排,機械手臂都必須能夠依照指令移動到指定座標。

為了達成這個目標,我們最初嘗試在 Beagle 上執行 ROS2。然而,在經歷大量 Docker 映像配置和除錯訊息後,我們發現這套軟體帶來不少問題:

  • CPU 使用率大幅上升
  • 座標移動不夠精確
  • 操作複雜度高

雖然 ROS2 是功能非常完整的機器人軟體框架,可以透過抽象化介面簡化機械手臂控制並支持進階功能,但要先學會這些抽象架構本身就需要大量前置知識,可能大幅延長專案開發時程。

幸運的是,我們找到了一個替代方案:

CRI-Python-Lib

它在機械手臂原生通訊協定上建立了一層輕量級 Python 抽象介面,盡可能以最簡潔的方式完成機械手臂控制,而不至於讓開發變得繁瑣。


然而,即使轉換到較低階的控制方式,初始化機械手臂本身仍是一個挑戰。

最後我們透過:

  • 研究官方 Windows 控制軟體 iRC 的初始化流程
  • 分析其參數設定

成功建立了一套可重複執行且最小化的啟動程式。

完成初始化後,讓手臂移動到指定座標就變得相當直接。

作為 ROS2 的輕量替代方案,CRI-Python-Lib 支援:

  • 笛卡兒座標軸移動(Cartesian Axes)
  • 關節軸移動(Joint Axes)

這已足以滿足我們的需求。

為了模擬夾取物件,我們還利用 3D 列印製作了一組夾爪,安裝於末端執行器(End Effector)上。

在專案進行期間,這些夾爪持續進化,最終改良成具備彈簧機構的設計。

到這裡,我們已經具備所需的機械控制能力,可以進入下一階段。


第二部分:視覺智慧(Visual Intelligence)

由於系統需要辨識電子元件並判斷其種類,因此我們首先規劃電腦視覺架構。

我們將視覺流程分成兩部分:

  1. 影像處理(Image Processing)
  2. 機器學習(Machine Learning)

影像處理

影像處理負責快速找出:

元件位於桌面上的什麼位置

機器學習

深度學習模型負責判斷:

這個元件屬於哪一種類型

因此,本階段的重要概念包括:

  • 影像濾波(Image Filtering)
  • 影像分類(Image Classification)

如前所述,系統流程為:

  1. 拍照
  2. 分析影像
  3. 取得元件座標
  4. 將座標傳送至機械手臂

使用 OpenCV 進行影像處理

我們利用 OpenCV 對攝影機影像套用各種濾波器。

測試過的技術包括:

  • 模糊化(Blurring)
  • 閾值化(Thresholding)
  • 邊緣偵測(Edge Detection)
  • 其他影像處理方法

最後發現最精簡且有效的方案包含:

透過這些方法,我們成功取得每個元件在影像中的中心座標(攝影機座標)。


座標轉換

但影像座標不能直接用於控制機械手臂,因此需要將其轉換成機器人座標系。

我們建立一張對照表:

  • 機械手臂座標 x
  • 對應攝影機座標 f(x)

為了驗證轉換函數,我們撰寫了一個腳本:

  • 偵測粉紅色圓點貼紙
  • 找出圓點中心座標
  • 轉換為機器人座標
  • 傳送給機械手臂控制程式

結果成功驗證了座標轉換流程。


建立 AI 影像分類模型

下一個挑戰是:

如何建立完整的深度學習影像分類模型,並部署到嵌入式系統上?

幸運的是,相關工具已十分成熟。

使用工具

Google Colab 可運用 Google 雲端 GPU/TPU 加速訓練。


Transfer Learning

我們採用:

Transfer Learning(遷移學習)

即使用已訓練好的模型,再透過特定應用資料進行微調。

優點:

  • 所需資料較少
  • 訓練時間較短
  • 計算資源需求較低

我們使用 TensorFlow 官方的 Transfer Learning Notebook 進行訓練。

訓練成果:

  • 1300+ 張圖片
  • 超過 100 個 Epoch

初始準確率:

約 91%

再經過:

  • 約 300 個 Fine-tuning Epoch

最終準確率達到:

99%


完成訓練後,我們建立了一個簡單測試程式:

  • 匯入已裁切好的元件圖片
  • 執行推論

測試結果中,模型成功辨識所有元件類型。

於是我們決定開始整合各個子系統。


第三部分:整合所有系統

專案完成前,必須將三個子系統串接起來:

  1. Beagle
  2. 機械手臂
  3. AI 模型

開發期間它們各自獨立運作,因此需要建立彼此通訊機制。

我們使用最簡單的方式:

檔案讀寫(File Read/Write)

例如:

  • 當新的攝影機座標已被使用
  • 對應檔案即清空

系統則持續輪詢這些檔案狀態。


發現座標誤差問題

測試時出現新的問題:

攝影機座標轉換為機器人座標後,

既不準確也不精密。

現象:

  • 手臂會移動到正確區域附近
  • 但 X 與 Y 軸皆存在偏移量
  • 導致無法夾住元件

我們推測:

攝影機安裝角度在過程中發生變化。

原先的轉換方式假設:

攝影機與桌面保持完全平行

但現在兩組座標軸產生了旋轉與偏移,需要更進階的方法。


使用 2D Homography

解決方案:

2D Homography(平面單應性轉換)

其概念是利用:

Homography Matrix(H)

將一組座標空間轉換至另一組座標空間:

x′=Hxx’ = Hxx′=Hx

來源: 2D homography matrix describing the mapping between the target plane


利用 OpenCV 的:

findHomography()

我們只需提供兩組對應座標點即可建立轉換矩陣。

實作方式:

  1. 在工作平面貼上多個彩色標記點

  2. 以機械手臂移動至各標記位置

  3. 使用顏色偵測擷取像素座標

  4. 建立兩組資料:

    • 機械手臂座標
    • 攝影機像素座標
  5. 計算 Homography Matrix


利用這個方法後,我們成功做到:

:white_check_mark: 辨識元件位置
:white_check_mark: 控制機械手臂移動
:white_check_mark: 判斷元件類型
:white_check_mark: 將元件放入對應分類盒


結論

透過將系統拆解成多個獨立子系統、逐步開發、測試與整合,我們成功完成了一個具有實際產業應用價值的複雜專案。

在整個專案中,最重要的主題之一就是:

簡化(Simplicity)

為了讓開發過程快速且穩定,我們刻意採用最小可行方案(Minimal Approach)。

例如:

  • 以 CRI-Python-Lib 取代 ROS2
  • 將 AI 分類對象限制在 5 種元件

這些決策讓我們避免不必要的複雜度與開發負擔。

整體而言,本專案旨在探索:

如何結合機器人技術與深度學習,讓系統能自主完成實體世界中的任務。

我們建立了一套可根據物件類型採取不同動作的系統,而這項能力可以很容易延伸至其他應用領域。

希望這個機器人分類系統能展示:

透過開源軟體、常見嵌入式硬體,以及工程設計與網際網路資源的結合,就能打造出智慧且實用的實體 AI 系統。