Joseph Chen
2025
10 min read
工廠實戰
在鴻海深圳廠,有一個需求:讓機械手臂自動找到 iPhone 主板上的某個特定點位並精準觸碰。 人工操作太慢、容易出錯,而且品質不穩定。
解法是:視覺引導(Vision-guided)系統。 用攝影機拍下目標,用 OpenCV 算出目標的像素座標,再轉換成機械手臂的實際 XY 軸座標,自動移動過去。
這篇文章把這個系統的核心技術拆解清楚。
系統架構概覽
整個系統分三個主要模組:
01
📷
影像擷取
USB 攝影機或工業相機擷取即時影像,固定在機台上方,與機械手臂的座標系統對齊校準。
02
🔍
OpenCV 影像處理
對影像做預處理(灰階、模糊、邊緣偵測),再用輪廓偵測或模板比對找到目標的像素座標(cx, cy)。
03
🤖
座標轉換 + 機械手臂控制
將像素座標轉換成機械手臂的實際毫米座標,透過 Serial 或 TCP 發送移動指令到控制器。
Step 1:用 OpenCV 找到目標位置
最常用的兩種方法:輪廓偵測(找形狀)和模板比對(找特定圖案)。 以下以輪廓偵測為例,找到影像中最大的圓形目標:
find_target.py
💡實際踩坑:工廠光線複雜,直接用 Canny 很容易誤偵測。 建議加上 HSV 色彩過濾,先把目標的顏色範圍濾出來再做輪廓偵測,準確率從 60% 提升到 95%。
Step 2:像素座標 → 機械手臂座標
影像的像素座標和機械手臂的實際毫米座標是不同的座標系,需要做仿射變換(Affine Transform)校準。
校準原理
- 1.讓機械手臂移到 3–4 個已知點位(例如四個角)
- 2.記錄每個點的機械手臂座標(mm)和對應的像素座標(px)
- 3.用 cv2.getAffineTransform 計算變換矩陣
- 4.之後任意像素座標都可以轉換成機械手臂座標
calibration.py
Step 3:控制機械手臂移動
算出目標座標後,透過序列埠(Serial)或 TCP Socket 發送指令到機械手臂控制器。 不同廠牌的指令格式不同,這裡以通用的 ASCII 指令格式示範:
robot_control.py
⚠️安全注意事項:在生產環境操控機械手臂,一定要設定速度限制和行程限制(Software Limit)。 建議所有自動移動前先手動確認一次,加入緊急停止按鈕,並在低速模式下先跑一輪驗證座標正確。
實際成果與優化
🎯
精度
❌ 之前:±2mm(手動)
✅ 之後:±0.3mm(自動)
⚡
速度
❌ 之前:30 sec/次
✅ 之後:5 sec/次
✅
成功率
❌ 之前:約 85%
✅ 之後:約 97%
主要優化點:
- 1加入 HSV 色彩過濾:排除工廠環境的光線干擾,只保留目標顏色範圍
- 2多幀平均:連拍 5 幀,取目標位置的平均值,降低單幀誤差
- 3增量移動:不直接跳到目標,用小步驟移動 + 重新偵測,類似閉迴路控制
- 4校準檔案:每次開機載入上次的校準矩陣,不需要每次重新校準
這篇學到什麼
📷視覺引導系統的核心三步驟:影像擷取 → OpenCV 偵測目標像素座標 → 仿射變換轉成機械手臂座標
🔍OpenCV 工廠場景建議:用 HSV 色彩過濾再做輪廓偵測,比直接用 Canny 更穩定
📐仿射變換校準只需要 3 個對應點,之後任意位置都能自動轉換,是整個系統最重要的一步
🔒生產環境一定要加速度限制 + 行程限制 + 緊急停止,安全永遠優先於效率
上一篇
這是系列第一篇
下一篇
EP.08 — PyTorch 入門
Tensor 操作與訓練迴圈
Python 自動化
OpenCV
電腦視覺
機械手臂
工廠自動化
仿射變換
EP.01