はじめに
近年、ロボットの認識に関する研究開発において、ポイントクラウド (点群)の活用が活発化しています。ポイントクラウドとは、計測対象の三次元構造を点の集合で表現したものです。これをリアルタイムに取得する方法として、距離画像カメラや3次元Lidarなどが広く用いられています。
前回、PCL(Point Cloud Library)について紹介させていただきました。今回、Open3dという三次元点群処理ライブラリ及びOpen3Dを用いるRealsenseカメラから点群データ生成アプリケーションについて説明します。Open3DはPCLと比較し,コードが圧倒的に少なくて済み,ビルドが早く導入が簡単です。 単純な前処理系の基本機能が実装済みで,RGBD画像処理が利用できます。 可視化が美しく、Scene Reconstructionのためのサポートが厚いなどの特徴があります。
Open3Dによる処理の基本
Open3Dは点群、画像、設定パラメータなどのPythonインスタンスが存在しております。このインスタンスをクラスメソッドで変更したりします。
点群データ生成Pyrealsense + Open3D + ROS
Open3Dの基本は以上のようになります。それで実践的アプリケーションについて紹介します。目的としてIntelのRealsenseカメラから点群データを生成し、ロボットを用いるスキャンニングシステムを開発します。ロボット制御はROSで開発し、カメラもROS Wrapper (https://github.com/IntelRealSense/realsense-ros) を使用しようと思いました。RealsenseのROSノードを立ち上げたら、画像および点群データがROSのTopicで扱うことができますが、一回TCPコミュニケーションを通したので、データ質があまり良なくないです。
そのため、Pyrealsenseを用い、カメラドライバーから画像を直接取得し、RGB・深度画像およびカメラパラメータから点群データ生成します。ソースコードは以下のようになります。
object_maskというのはRGBの画像で、depth_imageは深度の画像です。一回、RGBD画像フォーマットに変換し、instrinsicというカメラパラメータで点群を生成します。Realsenseの基本座標とOpen3dの基本座標は逆になるので、フリップ変換が必要です。結果は以下のようになります。
Comments