Frame export
Local tools like bag_to_pcd read one topic and write a folder of timestamped PCD files. That is great for debugging a sensor stream, checking fields, or handing one frame to another tool.
"Rosbag to PCD" can mean two very different jobs. Sometimes you want every PointCloud2 frame exported to disk. Other times you really want one mapped point cloud from the whole recording. The right path depends on which of those jobs you are actually doing.
Local tools like bag_to_pcd read one topic and write a folder of timestamped PCD files. That is great for debugging a sensor stream, checking fields, or handing one frame to another tool.
If what you really need is a point cloud map, you still need LiDAR SLAM and, when available, GNSS-backed georeferencing. That is the job LidarFlow is built for.
If you are already in a ROS environment and only need per-frame exports, use the upstream tool directly.
ros2 run pcl_ros bag_to_pcd --ros-args \
-p bag_path:=rosbag2_2025_01_01/ \
-p topic_name:=/pointcloud \
-p output_directory:=pcdsGood for timestamped frame exports. Not a full mapping pipeline.
If you need custom filtering, field transforms, or one-off post-processing, a small Python script gives you more control.
import rosbag
from sensor_msgs import point_cloud2
with rosbag.Bag("input.bag") as bag:
for _, msg, stamp in bag.read_messages(topics=["/velodyne_points"]):
points = list(point_cloud2.read_points(msg, skip_nans=True))
# write one PCD per frame or feed points into another toolFlexible, but you still own the rest of the pipeline.
If you want a mapped output instead of a folder of raw frames, upload the recording through the browser and let LidarFlow handle validation, SLAM, georeferencing, and artifact delivery.