ゼロからのセンサ入門 ~カメラ/デプスカメラ~
大阪大学 中島優作
← シリーズ一覧に戻る
カメラの用途
物体検出と位置推定
環境認識・マッピング
品質検査・外観検査
人物・顔認識
動作解析・トラッキング
自動運転・ナビゲーション
物体検出と位置推定
2Dカメラ:物体の識別・分類
デプスカメラ:3D位置情報の取得
ステレオカメラ:視差による距離計測
RGB-Dカメラ:色情報+深度情報
用途:ピック&プレース、検査作業
カメラの使い方(Webカメラ)
最も一般的なカメラインターフェース
USBで接続、プラグ&プレイ対応
UVC(USB Video Class)規格
ROSでの豊富なサポート
開発・テスト用途に最適
UVCとは
USB Video Class の略
USBカメラの標準規格
ドライバ不要で動作
Linux標準サポート
多くのWebカメラが対応
解像度・フレームレート調整可能
ROSで使えるパッケージ
以下をネットなどでよく見ますが、libuvc-cameraがおススメです
libuvc-camera(オススメ)
開発継続中
nodeletも使えるのでマルチスレッドにデータを受け取れる
ROS1/ROS2両方対応
カメラパラメータ調整機能
高いパフォーマンス
usb-cam
開発修了
古いROSディストリビューションで使用
シンプルな実装
メンテナンス停止
uvc-camera
現状サポート無し
過去のプロジェクトで使用
新規開発には非推奨
デプスカメラの使い方(RealSense)
Intel製の高性能深度カメラ
RGB + Depth情報を同時取得
ロボットビジョンの定番
Python・C++両方対応
ROS統合パッケージ有り
PyRealSense
Pythonでの直接制御
シンプルなAPI
プロトタイピングに最適
リアルタイム処理
カメラ設定の詳細制御
RealSense ROS
ROSノードとしてカメラ制御
標準的なROSメッセージ形式
他のROSノードとの連携
Launch ファイルで簡単起動
RVizでのリアルタイム可視化
カメラの内部パラメータ調整
カメラキャリブレーション
焦点距離・主点の補正
レンズ歪み補正
チェッカーボードパターン使用
OpenCVキャリブレーション機能
ROSでは camera_calibration パッケージ
カメラの外部パラメータ調整
カメラとロボット間の位置関係
座標系変換パラメータ
Hand-Eye Calibration
Eye-to-Hand / Eye-in-Hand
TFによる座標系管理
Hand-Eye Calibration
ロボットハンドとカメラの位置関係決定
複数ポーズでの測定
AX=XB問題の解法
MoveItでのキャリブレーション
easy_handeye パッケージ利用
画像処理
OpenCVをよく使います
フィルタリング・エッジ検出
物体検出・特徴抽出
機械学習による分類
cv_bridge でROSメッセージ変換
image_transport で効率的な画像転送
ポイントクラウド
3次元点群データ
デプスカメラ・LiDARから生成
さすがに処理が重たいので、リアルタイムな処理は基本はC++で扱います
フィルタリング・セグメンテーション
物体認識・マッピング
PCL(Point Cloud Library)
ROSの発展と共に開発されてきたのがPCL(PointCloudLibrary)です
C++用です
豊富なアルゴリズム
ROS標準のpoint_cloud2メッセージ対応
リアルタイム処理に最適
Open3D for Python
可視化くらいならpythonでもok
Open3Dというライブラリで扱えます
プロトタイピング・可視化に便利
Jupyter Notebookでの解析
機械学習との連携
まとめ
用途に応じたカメラ選択
ROSパッケージの適切な利用
キャリブレーションの重要性
処理性能とプログラミング言語の選択
豊富なツール・ライブラリの活用
← シリーズ一覧に戻る