前言
本文為一個機器人分類系統專案的整體概述。在此專案中,我們嘗試(而且成功地)利用機械手臂將散放在桌面上的電子元件進行分類。系統使用的主要硬體包括:
- 單板電腦:BeagleY-AI(DigiKey 零件編號:2820-102991834-ND)
- 工業機械手臂:igus ReBeL 6DOF(DigiKey 零件編號:4903-REBEL-6DOF-02-ND)
- 攝影機模組:Arducam(DigiKey 零件編號:4679-B0292-ND)
上述產品皆可於 DigiKey 購買。
本文將從高層次角度介紹專案中遇到的挑戰與設計決策,逐步說明各個開發階段,並分享哪些部分進展順利、哪些部分遇到瓶頸。讓我們開始吧!
第一部分:它動起來了!
Beagle 負責控制整個系統,但真正的主角是機械手臂。如果它無法正常運作,整個專案就會失敗,或者必須採用昂貴的替代方案。
因此,本專案的第一步就是驗證機械手臂是否能依照預期移動。接著,我們將問題拆解並定義系統需求:
系統必須能夠:
- 偵測電子元件
- 夾取元件
- 放入對應的分類盒中
分類盒類別:
- 電晶體(Transistors)
- 開關(Switches)
- 電阻(Resistors)
- IC 晶片(Chips)
- 電容(Capacitors)
在夾取元件之前先完成偵測會比較理想,因為這樣攝影機能在機械手臂未遮擋視野的情況下完成拍照。
不論實際動作流程如何安排,機械手臂都必須能夠依照指令移動到指定座標。
為了達成這個目標,我們最初嘗試在 Beagle 上執行 ROS2。然而,在經歷大量 Docker 映像配置和除錯訊息後,我們發現這套軟體帶來不少問題:
- CPU 使用率大幅上升
- 座標移動不夠精確
- 操作複雜度高
雖然 ROS2 是功能非常完整的機器人軟體框架,可以透過抽象化介面簡化機械手臂控制並支持進階功能,但要先學會這些抽象架構本身就需要大量前置知識,可能大幅延長專案開發時程。
幸運的是,我們找到了一個替代方案:
它在機械手臂原生通訊協定上建立了一層輕量級 Python 抽象介面,盡可能以最簡潔的方式完成機械手臂控制,而不至於讓開發變得繁瑣。
然而,即使轉換到較低階的控制方式,初始化機械手臂本身仍是一個挑戰。
最後我們透過:
- 研究官方 Windows 控制軟體 iRC 的初始化流程
- 分析其參數設定
成功建立了一套可重複執行且最小化的啟動程式。
完成初始化後,讓手臂移動到指定座標就變得相當直接。
作為 ROS2 的輕量替代方案,CRI-Python-Lib 支援:
- 笛卡兒座標軸移動(Cartesian Axes)
- 關節軸移動(Joint Axes)
這已足以滿足我們的需求。
為了模擬夾取物件,我們還利用 3D 列印製作了一組夾爪,安裝於末端執行器(End Effector)上。
在專案進行期間,這些夾爪持續進化,最終改良成具備彈簧機構的設計。
到這裡,我們已經具備所需的機械控制能力,可以進入下一階段。
第二部分:視覺智慧(Visual Intelligence)
由於系統需要辨識電子元件並判斷其種類,因此我們首先規劃電腦視覺架構。
我們將視覺流程分成兩部分:
- 影像處理(Image Processing)
- 機器學習(Machine Learning)
影像處理
影像處理負責快速找出:
元件位於桌面上的什麼位置
機器學習
深度學習模型負責判斷:
這個元件屬於哪一種類型
因此,本階段的重要概念包括:
- 影像濾波(Image Filtering)
- 影像分類(Image Classification)
如前所述,系統流程為:
- 拍照
- 分析影像
- 取得元件座標
- 將座標傳送至機械手臂
使用 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%
完成訓練後,我們建立了一個簡單測試程式:
- 匯入已裁切好的元件圖片
- 執行推論
測試結果中,模型成功辨識所有元件類型。
於是我們決定開始整合各個子系統。
第三部分:整合所有系統
專案完成前,必須將三個子系統串接起來:
- Beagle
- 機械手臂
- 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()
我們只需提供兩組對應座標點即可建立轉換矩陣。
實作方式:
-
在工作平面貼上多個彩色標記點
-
以機械手臂移動至各標記位置
-
使用顏色偵測擷取像素座標
-
建立兩組資料:
- 機械手臂座標
- 攝影機像素座標
-
計算 Homography Matrix
利用這個方法後,我們成功做到:
辨識元件位置
控制機械手臂移動
判斷元件類型
將元件放入對應分類盒
結論
透過將系統拆解成多個獨立子系統、逐步開發、測試與整合,我們成功完成了一個具有實際產業應用價值的複雜專案。
在整個專案中,最重要的主題之一就是:
簡化(Simplicity)
為了讓開發過程快速且穩定,我們刻意採用最小可行方案(Minimal Approach)。
例如:
- 以 CRI-Python-Lib 取代 ROS2
- 將 AI 分類對象限制在 5 種元件
這些決策讓我們避免不必要的複雜度與開發負擔。
整體而言,本專案旨在探索:
如何結合機器人技術與深度學習,讓系統能自主完成實體世界中的任務。
我們建立了一套可根據物件類型採取不同動作的系統,而這項能力可以很容易延伸至其他應用領域。
希望這個機器人分類系統能展示:
透過開源軟體、常見嵌入式硬體,以及工程設計與網際網路資源的結合,就能打造出智慧且實用的實體 AI 系統。











