2Dカメラは世界を平面として撮影します。箱の中に積み重なった部品の一番上のものをピッキングしたい場合や、溶接ビードが十分に盛り上がっているかを確認したい場合には、高さの情報が必要です。3Dカメラはピクセルごとに距離も計測し、シーンを点の集合である点群として返します。
3Dカメラの種類
fineAi RoboVision は次の3Dカメラに対応しています。
- パターン光(構造化光)方式 — Zivid、Photoneo、EpicEye Pixel Pro。プロジェクターで縞パターンを投影し、パターンが物体表面で歪む様子から距離を計算します。静止した物体を高精度に撮影するのに適しています。
- レーザー方式 — EpicEye Laser M V3。反射が強い表面や暗い表面でも安定して計測できます。
これらのカメラは整列(organized)点群を出力します。点が画像のピクセル格子の順に並んでいるため、2D画像の座標と3Dの点を直接対応付けられます。つまり、2DでYOLOが見つけた物体領域を、そのまま3Dの点に写し取れるということです。保存には通常PLYファイルを使います。
処理の流れ
- ROI(関心領域) — 作業台や箱の中など、必要な空間だけを残します。
- ダウンサンプル — 一定間隔の格子(ボクセル)ごとに点を1つだけ残し、点数を減らします。以降の計算が数倍速くなります。
- ノイズ除去 — 周囲の点から離れた点(宙に浮いた点)を取り除きます。
- 法線計算 — 点ごとに周囲の点から小さな平面を当てはめ、表面の向きを求めます。把持方向を決めるときに使います。
- 平面分離 — 最も大きな平面(床、作業台)を見つけて取り除きます。多くの場合、RANSAC のようにランダムに選んだ点で平面を当てはめて試す手法を使います。残った点が物体です。
- 物体分割 — 互いに近い点をまとめ、物体ごとに分けます。
- 位置合わせ(レジストレーション) — あらかじめ登録したテンプレートモデルを各物体に合わせて、**3D姿勢(位置+回転)**を求めます。
位置合わせの結果はカメラ座標系の値です。ロボットが使うにはロボット座標系に変換する必要があり、この変換にあたるのがハンドアイキャリブレーションです。
複数方向から撮影してつなぐ
大きな物体や曲面は、一度の撮影では全体を捉えられません。RoboVision は、ロボットアームの先端にカメラを取り付け、軌跡に沿って移動しながら撮影します。撮影のたびにロボットから受け取ったカメラ姿勢を記録しておき、その姿勢を利用して複数枚を1つにつなぎます(pose-guided stitching)。画像同士で特徴点を合わせる方式に比べ、特徴の少ない滑らかな表面でも安定します。
溶接ビード検査
溶接線は2D画像では形しか見えませんが、3Dなら断面プロファイルを計測できます。RoboVision はビード断面から次の値をmm単位で計算します。
- 脚長(leg)、のど厚(throat)
- ビードの幅・高さ、凸・凹の程度
- アンダーカットの深さ
これらの値を ISO 5817 の品質等級(B/C/D)の定量基準と比較して等級を判定し、欠陥ごとのOK/NGの理由をレポートとして残します。
2Dと3D、どちらを使うか
| 確認したいこと | 2D | 3D |
|---|---|---|
| 表面にキズ・異物があるか | ✓ 適している | 解像度が低く不利 |
| 高さ・平坦度・体積が基準内か | 難しい | ✓ 適している |
| 積み重なった物体をピッキングできるか | 難しい | ✓ 適している |
| 処理速度が非常に重要か | ✓ 有利 | 相対的に遅い |
実際のセルでは両方を併用します。2Dで何がどこにあるかを素早く見つけ、その領域だけを3Dで精密に確認します。