Camera Calibration Pipeline

ピクセルから実世界座標へ

01 iPhone 真上固定
三脚で真上に固定。斜め撮影では遠近歪みが入るため、
ホモグラフィ精度を保つには真俯瞰が必須。

カッティングマット(5mm格子)が映り込む。
格子交点が基準点になるため追加マーキングは不要。
02 4点キャリブレーション
カメラ映像上で4点をクリック → 対応する実世界座標(mm)を入力。
ロボットベースを原点(0,0)とした座標系を採用。

1(左奥) : (-300, -150)
2(右奥) : ( 300, -150)
3(左手前): (-300, 250)
4(右手前): ( 300, 250)
03 ホモグラフィ行列の生成
cv2.findHomography() でピクセル→実世界の変換行列を計算。
homography.npy として保存。以降は毎回使い回す。

src: ピクセル座標(4点)
dst: 実世界座標mm(4点)
→ 3×3 変換行列
04 HSV赤検出 → 重心取得
フレーム全体からHSVマスクで赤ブロックを検出。
輪郭面積500px未満はノイズとして無視。
最大輪郭のモーメントから重心(cx, cy)を計算。

lower_red1: [ 0, 100, 100]
upper_red1: [ 10, 255, 255]
lower_red2: [160, 100, 100]
upper_red2: [180, 255, 255]
05 perspectiveTransform → World XY
cv2.perspectiveTransform() でピクセル座標を実世界mmに変換。

Pixel : (326, 875)
World : (-253.1 mm, 204.8 mm)

← ロボットベース左253mm、手前205mm
Calibration Result
COVERAGE X
-265 〜 +280 mm
COVERAGE Y
-114 〜 +227 mm
DATA POINTS
9 trials
GRID RESOLUTION
5 mm
作業エリアマップ(ロボットベース原点)
X+ X- Y- Y+ ARM 1px = 1mm

○ = 収集データ点  ■ = キャリブレーション基準点  ● = ロボットベース