タイムスタンプ付きPCDのフォルダ1つ。
bag_to_pcdのようなローカルツールは1つのトピックを読み込み、タイムスタンプ付きPCDファイルのフォルダを書き出します。センサーストリームのデバッグやフィールドの確認、1フレームを別ツールに渡す用途には最適です。
「rosbagをPCDに変換する」という言葉は、まったく異なる2つの作業を指すことがあります。すべてのPointCloud2フレームをディスクに書き出したい場合もあれば、記録全体から1つのマッピング済み点群がほしい場合もあります。どちらの作業を行っているかによって、選ぶべき方法は変わります。
bag_to_pcdのようなローカルツールは1つのトピックを読み込み、タイムスタンプ付きPCDファイルのフォルダを書き出します。センサーストリームのデバッグやフィールドの確認、1フレームを別ツールに渡す用途には最適です。
本当に必要なのが点群マップであれば、LiDAR SLAMと、可能であればGNSSによるジオリファレンスが必要です。これはまさにLidarFlowが担う仕事です。
SLAMを実行する前に、LidarFlowが検出したトピックを一覧表示し、利用可能なものにフラグを立てます。
ローカルでの変換にはROS環境、適切なpcl_rosビルド、正確なトピック名が必要です。ブラウザ経由ならその3つすべてが不要になります。
SLAM、レジストレーション、ジオリファレンスの各処理を、不透明なログではなく明確な実行進捗として可視化します。
タイムスタンプ付きフレームのディレクトリではなく、1つのマッピング済み点群とPLY、軌跡、メタデータを取得できます。
すでにROS環境があり、フレーム単位の書き出しだけが必要であれば、上流ツールを直接使うのが手軽です。
ros2 run pcl_ros bag_to_pcd --ros-args \ -p bag_path:=rosbag2_2025_01_01/ \ -p topic_name:=/pointcloud \ -p output_directory:=pcds
タイムスタンプ付きフレーム書き出しには良い選択肢です。完全なマッピングパイプラインではありません。
独自のフィルタリング、フィールド変換、一度限りの後処理が必要であれば、小さなPythonスクリプトでより細かい制御ができます。
import rosbag
from sensor_msgs import point_cloud2
with rosbag.Bag("input.bag") as bag:
for _, msg, t in bag.read_messages("/pc"):
points = list(point_cloud2.read_points(msg))
# write one PCD per frame柔軟ですが、残りのパイプラインは自分で管理する必要があります。
生フレームのフォルダではなくマッピング済み出力がほしい場合は、ブラウザから記録をアップロードするだけで、検証、SLAM、ジオリファレンス、成果物の配信までLidarFlowが処理します。
.mcapまたはROS1の.bagをアップロードoutput.pcd、map.ply、メタデータ、軌跡データをダウンロード対応しているのはROS1の.bagと.mcapです。ROS2の.db3は未対応で、その点をあいまいにせず、 変換による回避手順を ROS2 .db3対応状況 のページに記載しています。テスト期間中につき無料です。
関連ページ: PCDファイルとは、 MCAPの場合、 対応LiDARセンサー。
できます。.bagまたは.mcapをブラウザからアップロードすると、再構成はLidarFlow側で実行され、output.pcdとmap.plyが返ります。お手元の環境には何もインストールしません。pcl_rosやGLIMを使う手動の方法では、動作するROS環境が必要です。
ダンプは各PointCloud2メッセージをセンサー座標系のまま個別ファイルに書き出したものです。フレーム間でセンサーが動いているため、単純に重ねるとぼやけた点群になります。SLAMによる再構成では軌跡を推定し、ループを閉じ、ドリフトを補正するため、すべてのスキャンが一つの整合した地図座標系に収まります。
現時点では未対応です。対応しているのはROS1の.bagと.mcapです。.db3をお持ちの場合は、rosbag2のMCAPストレージプラグインでMCAPに変換してからアップロードしてください。ROS2 .db3対応状況のページから順番待ちリストにご登録いただけます。
実行は可能です。記録開始地点を原点とするローカル座標系のメトリック地図が得られます。WGS84へのジオリファレンスのみGNSS測位値を必要とするため、その工程だけがスキップされます。