iPhoneカメラで取得したpixel座標をロボットアームのマット座標系(mm)に変換する精度を実測し、系統誤差を発見した後、マット正長方形射影で座標系を可視化するまでのプロセス。
各ステップを選択して詳細を確認
iPhoneカメラ(Iriun Webcam経由、camera index 2)から取得したフレームは1920×1080px。マット上の赤ブロックや任意の既知点を検出し、その画像上の座標(px, py)を取り出す。
ここで使うH(homography行列)は、LOG163でマット四隅のpixel座標とマット実寸定義(MAT_CORNERS_MM)からcv2.findHomographyで生成したもの。カメラが俯瞰視点でマットを見ているとき、任意のpixel座標をマット平面上のmm座標に変換できる。
homography.npyは3×3の射影変換行列で、pixel座標(x, y)をマット座標系のmm値(mat_x, mat_z)に変換する。
マット実寸の定義(MAT_CORNERS_MM)は物理端を基準に設定されている。アームベース支柱の真下が座標原点(0, 0)で、マットの左端までX方向310mm、マット上端までZ方向89mm奥の位置にある。
キャリブレーションに使っていない7点でpixel→mm変換の精度を実測した。実測値はアームベース原点からの距離をマット目盛りで計算。
| # | 実測(mm) | 予測(mm) | ΔX | ΔZ | |err| |
|---|---|---|---|---|---|
| 1 | (+229,+244) | (+222.7,+265.9) | -6.3 | +21.9 | 22.8mm |
| 2 | (-150,+300) | (-155.0,+325.5) | -5.0 | +25.5 | 26.0mm |
| 3 | (-300,0) | (-312.7,+30.0) | -12.7 | +30.0 | 32.6mm |
| 4 | (+250,0) | (+233.1,+22.7) | -16.9 | +22.7 | 28.3mm |
| 5 | (+50,+300) | (+41.4,+321.9) | -8.6 | +21.9 | 23.5mm |
| 6 | (+200,+301) | (+187.6,+320.8) | -12.4 | +19.8 | 23.3mm |
| 7 | (-250,+150) | (-259.4,+180.7) | -9.4 | +30.7 | 32.1mm |
系統バイアス(全7点の方向が一致)
ΔXは全7点で負、ΔZは全7点で正。ランダムなノイズではなく、一定方向に偏った系統的なバイアスだ。補正で数値を合わせる前に、座標系そのものを可視化することを選んだ。
mat_rectify.pyは、homography.npyを使わない。検出したマット四隅pixel座標を直接使って620×450mmの正長方形に射影変換する独立ツール。
この可視化画像があることで、赤ブロックのpixel検出結果を重畳すれば「homographyが返した座標」と「目で見た位置」が一致しているかどうかを直接確認できる。補正値を計算する前に、まず見える状態で判断できる。