image_pipeline
ROS標準のカメラスタック:キャリブレーション、レクティフィケーション、ステレオ、深度
ライセンス
BSD-3-Clause
概要
image_pipelineは、ros-perceptionがメンテナンスするROSの標準カメラ処理スタック。ロボットのカメラを、ドライバの生出力からキャリブレーション済み・レクティファイ済みの画像と3Dデータへと変換するパッケージ群で構成される:camera_calibration(対話式チェッカーボードキャリブレーション)、image_proc(デベイヤー処理とレクティフィケーション)、stereo_image_proc(視差と点群)、depth_image_proc(深度から点群への変換とレジストレーション)、そしてimage_view。カメラを搭載したほぼすべてのROSロボットが、このパイプラインのどこかを動かしている。
このスタックは、image_transportトピックとcamera_infoキャリブレーションメッセージで接続された、コンポーザブルなROS 2ノード群として構成される。camera_calibrationは、チェッカーボード画像から単眼またはステレオの内部パラメータを計算してカメラドライバに書き込む、おなじみの対話式GUIを提供する。image_procは生画像とcamera_infoを受け取ってモノクロ/カラー版とそのレクティファイ済み版を出力し、ベイヤーデモザイクと歪み除去を担う。crop/resize/decimateの各ノードはストリームを低コストで整形する。stereo_image_procはレクティファイ済みペア間でブロックマッチング視差を計算してステレオ点群を生成し、depth_image_procはRGB-Dセンサーの深度画像を点群へ変換し、深度をカラーフレームにレジストレーションし、メトリック/量子化エンコーディングを相互変換する。すべてがROS 2でのゼロコピーなプロセス内パイプラインのための実行時コンポジションに対応しており、このスタックが確立した規約 — camera_infoのセマンティクスやimage_raw/image_rectというトピック命名 — は、ROSエコシステム全体でカメラドライバと知覚コードをつなぐ事実上の契約になっている。
重要な理由
image_pipelineはROSにおけるカメラの在り方そのものを定義している。多くのロボティクス開発者が初めてカメラをキャリブレーションしたのはこのGUIであり、そのトピックとcamera_infoの規約は、あらゆるROSカメラドライバとあらゆるROS知覚スタックをつなぐ契約だ。
解決する課題
カメラの生出力は、未キャリブレーションで、歪みがあり、ベイヤーパターンのままの2Dデータだ。image_pipelineはそれを、標準的でコンポーザブルなノード群によって、キャリブレーション済み・レクティファイ済みの画像、視差マップ、点群へと変換する — 知覚コードがカメラ周りの配管処理を再実装せずに済むように。
主なポイント
- 単眼・ステレオカメラ用の対話式チェッカーボードキャリブレーションGUI
- image_proc:camera_infoに基づくデベイヤー処理、歪み除去、レクティフィケーション
- stereo_image_proc:ブロックマッチング視差とステレオ点群
- depth_image_proc:深度から点群への変換と深度・カラー間のレジストレーション
- ゼロコピーなプロセス内パイプラインに対応するコンポーザブルROS 2ノード
対象
- カメラを統合するROS開発者
- ステレオ/RGB-Dパイプラインを構築する知覚エンジニア
- 初めてカメラをキャリブレーションするロボティクスの学生
- ROSの規約に従うカメラドライバ開発者
制限事項
- 古典的なブロックマッチングステレオは、学習ベースやSGMベースのマッチャーと比べると時代遅れ
- キャリブレーションGUIのワークフローは手動 — ターゲット不要の自動キャリブレーションはない
- パフォーマンスチューニング(QoS、コンポジション)はインテグレーター任せ