タイムスタンプ付き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、メタデータ、軌跡データをダウンロード