search
LoginSignup
7

More than 1 year has passed since last update.

posted at

updated at

pcl_rosを使ってrosbag->pcdファイル変換 → 大量のpcdファイルが作成されてしまったのでpcd結合パッケージを作成

動機

rosbagにより記録したPointCloud2をpcdファイルに保存したい!

pcl_rosならrosbag→pcdの変換が直接できるらしい(参考:[ROS] sensor_msgs::PointCloud2をpcdファイルで入出力するときのメモ)

やってみる

ひとつのbagファイルから大量のpcdファイルが生成

楽しくない…

そこで,pcd結合パッケージを作ってみました.
GitHub: join_pcd

本記事では,pcl_rosによるbag->pcd変換方法と,作成したパッケージの概要および使い方を紹介します.

pcl_rosを使用したrosbag→pcd変換方法

まずはpcl_rosを使用して,bagファイルをpcdファイルに直接変換します.使用するツールはpcl_rosのbag_to_pcdです.
使い方は下記.

$ rosrun pcl_ros bag_to_pcd <input file>.bag <topic name of PointCloud2> <output directory path> [<target frame >]

例えば,カレントディレクトリ内にあるhoge.bagから/pointsトピックをpcdファイルに変換するときは次のようになります.

$ rosrun pcl_ros bag_to_pcd hoge.bag /points .

上記の方法でpcdファイルは作成できたのですが,なぜか出力ファイルが1つではなく,大量に生成されてしまいました.(サイズが0のトピックが来るとendだと認識されてしまうのかもしれません)

pcd結合パッケージ作成

細切れpcdファイルを大量に所有していても何も楽しくないので,pcdパッケージを結合するパッケージを作ってみました.(リポジトリはこちら

本記事では,簡単なパッケージ概要と使い方を紹介します.

パッケージ概要

作成したパッケージは,指定ディレクトリ内の指定pcdファイルを結合し,同じディレクトリに出力するだけのパッケージです.
pcdの読み込みおよび結合はここを参考にしました.

動作環境としては,次の2点さえ合致していれば問題ないと思います.
- OS: Ubuntu
- C++11以上

使い方

インストール方法

clone & make のみです.

$ git clone https://github.com/kazuki21057/join_pcd.git
$ cd join_pcd
$ mkdir build 
$ cd build
$ cmake ..
$ make

使い方

join_pcdがあるディレクトリパスをJOIN_PCD_PATHとしたとき,下記コマンドで使用できます.

$ JOIN_PCD_PATH/build/join_pcd -i <input file name 1> <input file name 2> ... -o <output file name>

指定キーワード(-i, -o)の後に,それぞれの情報を入力します.
引数の指定順番はバラバラで問題ありません.また、パス指定は絶対/相対どちらでも可能です。

指定キーワードの説明は下記.

  • -i: 結合したいpcdファイル名
    • 拡張子の有無は関係ありません.
    • ”*”または”*.pcd”を指定した場合は,指定ディレクトリ内にあるすべてのpcdファイルを入力とします.
  • -o: 結合後の出力pcdファイル名
    • 拡張子の有無は関係ありません.

たとえば,カレントディレクトリ内にあるa.pcd, b.pcdを結合し,c.pcdを作成したい場合は次のようになります.

$ JOIN_PCD_PATH/build/join_pcd -i a.pcd b.pcd -o c.pcd

また,今回のように大量にpcdファイルが生成されてしまった場合,ディレクトリ内にある全てのpcdファイルを結合するには次のようにします.

$ JOIN_PCD_PATH/build/join_pcd -i * -o c.pcd

まとめ

pcd結合よりもC++でファイル操作するほうが面倒でした.pythonでもpcl使えるっぽいし,pythonで実装すればよかったかもです.

参考

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
What you can do with signing up
7