ロボットの知覚
ロボットがカメラと深度のデータを、行動に使える物体の姿勢と形状に変換する方法。検出とセグメンテーション、マニピュレーションのための6D姿勢推定、点群処理、3次元再構成を扱います。
概要
ロボットの知覚は、センサデータをロボットが行動に使う量に変換します。物体がロボットの座標系のどこにあるか、どちらが上を向いているか、どの面の上に置かれているか、何が邪魔になっているか、といった量です。コンピュータビジョンと道具を共有しますが、出力が異なります。ビジョンシステムは、画像に正しくラベルを付ければ成功です。ロボットの知覚は、グリッパが正しい位置で閉じたときに成功です。そのためには、既知の時刻における base_link 上の計量的な幾何情報が必要です。
このハブでは、マニピュレーションとシーン理解のための知覚を扱います。検出とセグメンテーション、6D姿勢、点群、再構成です。地図作成と自己位置推定は/topics/slam-and-mapping/で扱います。ビジョンのニューラルネットワーク側、つまり畳み込みネットワーク、Transformer、検出器の学習方法については、AI/ML Field Guideのコンピュータビジョンのハブを参照してください。
重要な考え方
ピクセルからロボット座標系での姿勢へ
マニピュレーションのパイプラインは、どれも座標変換の連鎖で終わります。検出器またはセグメンテーション器が、物体のピクセルを見つけます。深度画像とカメラの内部パラメータが、それらのピクセルをカメラの光学座標系(z軸が前方。/topics/spatial-math/を参照)の3次元点に持ち上げます。姿勢推定器が物体のモデルを当てはめます。最後に、カメラの外部キャリブレーション(手首カメラの場合はハンドアイキャリブレーションで求める)が、結果を base_link に移します。各ステップで誤差が加わります。外部パラメータの誤差は特に高くつきます。すべての物体を同じ量だけずらすため、検出結果をいくら平均しても取り除けないからです。/topics/sensors/を参照してください。
検出・セグメンテーション・6D姿勢
検出は、既知のクラスの物体を矩形で囲みます。セグメンテーションはピクセルにラベルを付けます。ラベルの単位はクラスの場合と物体インスタンスの場合があります。Segment Anythingとその動画版の後継であるSAM 2のようなプロンプト可能なセグメンテーション器は、クリックや矩形を与えると、その物体で学習していなくてもマスクを返します。そのため、見慣れない物品のピッキングに役立ちます。
把持にはマスクだけでは足りません。物体の6D姿勢、つまり位置と向きが必要です。モデルベースの推定器は、既知のCADモデルを画像と深度に当てはめます。PoseCNN(Xiangら、RSS 2018)は初期の学習ベースの例です。FoundationPose(Wenら)は、CADモデルか少数の参照画像のどちらかがあれば、テスト時に未知の物体を扱えます。フレーム間で姿勢を追跡することもできます。BOPベンチマークは共通のデータセットで6D姿勢推定手法を比較しており、性能に関する主張はここで確認してください。
点群
深度カメラやLiDARは点群を出力します。ROS 2では sensor_msgs/PointCloud2 として扱います。古典的な卓上パイプラインは数ステップで構成されます。後続のステップが一定のレートで動くよう、ボクセルグリッドにダウンサンプリングします。統計的な外れ値を除去します。支配的な平面をRANSACで当てはめて取り除きます。これでテーブルが消えます。残った点を物体ごとにクラスタリングします。各クラスタは、モデルと照合することも、そのまま把持プランナに渡すこともできます。
位置合わせ(レジストレーション)は、2つの点群を揃えます。Besl・McKay(1992)による反復最近傍点法(ICP)は、最近傍点の対応付けと、最適な剛体変換の求解を交互に繰り返します。良い初期推定からでないと収束しないため、パイプラインではまず学習ベースまたは特徴量ベースの推定を行い、ICPで精緻化します。
3次元再構成
再構成は、多数の深度ビューを1つのモデルに統合します。ボリューム法はCurless・Levoy(1996)に従い、切断符号付き距離関数(TSDF)をボクセルグリッドに格納し、新しい深度画像が来るたびに平均して取り込みます。KinectFusionは、モデル自体からカメラを追跡しながら、これがリアルタイムで動くことを示しました。表面メッシュは必要に応じてTSDFから抽出します。マニピュレーションでは、手首カメラを物体の周りで動かすことで、単一視点では見えない面を埋められます。
どこから始めるか
/learn/beginner/02-frames-and-rotations/では、どのパイプラインも最後に行う座標変換を扱います。/learn/beginner/06-sensors-and-noise/では深度データのノイズを扱います。プロジェクト/projects/pybullet-pick-and-place/では、物体の姿勢から把持までのループをシミュレーションで閉じます。
ツールとプラットフォーム
| ツール | 用途 | ライセンス | プラットフォーム |
|---|---|---|---|
| OpenCV | 画像処理、カメラモデル、特徴検出、古典的なビジョン | Apache-2.0 | /platforms/opensource/ |
| Open3D | PythonとC++での点群処理、位置合わせ、TSDF再構成 | MIT | /platforms/opensource/ |
| PCL | C++での点群のフィルタリング・セグメンテーション・位置合わせ。ROSと統合 | BSD-3-Clause | /platforms/ros/ |
| SAM 2 | 画像と動画のプロンプト可能なセグメンテーション | Apache-2.0 | /platforms/opensource/ |
| FoundationPose | 未知物体の6D姿勢推定と追跡 | NVIDIAライセンス(非商用利用のみ) | /platforms/nvidia/ |
| Ultralytics YOLO | 物体検出とセグメンテーションの学習と推論 | AGPL-3.0、または有償のエンタープライズライセンス | /platforms/opensource/ |
よくある間違い
- 姿勢精度をピクセル単位やベンチマーク上で報告し、後になってハンドアイキャリブレーションが5 mmずれていると気づく。
- 深度画像をカラー画像に位置合わせせずに使う。両者は内部パラメータの異なる別々のセンサから得られる。
- 光学座標系の慣例を忘れ、すべての物体をカメラの後ろに置いてしまう。
- 製品を作ってからライセンスを確認する。AGPL-3.0も非商用の研究用ライセンスも、製品の出荷を制約する。
- 悪い初期推定からICPを実行し、収束した結果を信用する。
さらに深く
- P. J. Besl、N. D. McKay、A method for registration of 3-D shapes、「IEEE Transactions on Pattern Analysis and Machine Intelligence」14(2)、1992。
- R. B. Rusu、S. Cousins、3D is here: Point Cloud Library (PCL)、ICRA 2011。
- B. Curless、M. Levoy、A volumetric method for building complex models from range images、SIGGRAPH 1996。
- R. A. Newcombeら、KinectFusion: real-time dense surface mapping and tracking、ISMAR 2011。
- B. Wen、W. Yang、J. Kautz、S. Birchfield、FoundationPose: unified 6D pose estimation and tracking of novel objects、arXiv 2023、CVPR 2024。
- A. Kirillovら、Segment Anything、arXiv 2023。
- 検出・セグメンテーションのモデルについてはAI/ML Field Guideのコンピュータビジョンのハブ、MIPI CSI-2入力からISPの各段までハードウェアで構築するカメラパイプラインについてはFPGA Guideの画像・映像のハブを参照してください。