LoginSignup
10
8

More than 3 years have passed since last update.

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

Last updated at Posted at 2020-01-28

動機

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で実装すればよかったかもです.

参考

10
8
11

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
  3. You can use dark theme
What you can do with signing up
10
8