Launch promotionLidarFlow is free while we launch — no card required
Rosbag to PCD

Convert a rosbag to PCD, online.

“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.

What rosbag to PCD actually means

Frame export and mapped output are not the same thing.

Frame export

One folder of timestamped PCDs.

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.

Mapped output

One point cloud map of the run.

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.

Register · Map
lowhigh
What you actually get

From rosbag to mapped output, in four browser screens.

/velodyne_points · PointCloud2ok
/gnss/fix · NavSatFixok
/imu/data · Imuok
/tf_static · TFok
Inspect the bag

Before SLAM runs, LidarFlow lists the topics it found and flags the ones it can use.

$ros2 run pcl_ros bag_to_pcd \
$ --ros-args -p bag_path:=bag/
$ -p topic_name:=/pc
$ -p output_directory:=pcds
Skip the CLI dance

Local conversions need a ROS env, the right pcl_ros build, and matching topic names. The browser path skips all three.

slam
Watch the run

SLAM, registration, and georeferencing run with clear run progress instead of opaque logs.

output.pcd248 MB
map.ply112 MB
trajectory.csv1.4 MB
metadata.json12 KB
Download mapped artifacts

You get one mapped point cloud plus PLY, trajectory, and metadata — not a directory of timestamped frames.

Three honest ways to do it

Local CLI, custom Python, or a browser workflow.

1

Upstream CLI

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:=pcds

Good for timestamped frame exports. Not a full mapping pipeline.

2

Python script

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, t in bag.read_messages("/pc"):
        points = list(point_cloud2.read_points(msg))
        # write one PCD per frame

Flexible, but you still own the rest of the pipeline.

3

LidarFlow

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.

  • Upload .mcap or ROS1 .bag
  • Validate topics before launch
  • Download output.pcd, map.ply, metadata, and trajectory artifacts
Skip the glue
Upload a bag, get the mapped point cloud back in your inbox.
When to use which

Pick the smallest tool that still solves the whole job.

Use the local path when

  • You only need frame-by-frame PCDs for debugging one topic.
  • You want to inspect timestamps, fields, or per-frame coverage before running SLAM.

Use LidarFlow when

  • You need one mapped point cloud and not a directory full of timestamped exports.
  • You want one browser surface for run status, QA, and downloads.
  • You do not want to maintain ROS, SLAM, and storage glue on every operator laptop.

What is supported today

ROS1 .bag and .mcap are supported now. ROS2 .db3 is not, and rather than pretend otherwise we document the reindex workaround on the ROS2 .db3 status page. Free while we are testing.

Related reading: what a PCD file is, the MCAP variant, supported LiDAR sensors.

Frequently asked questions

Can I convert a rosbag to PCD without installing ROS?

Yes. Upload the .bag or .mcap file in the browser and LidarFlow runs the reconstruction on its own infrastructure, then returns output.pcd and map.ply. Nothing is installed on your machine. The manual route with pcl_ros or GLIM still needs a working ROS environment.

What is the difference between a raw point cloud dump and a SLAM-reconstructed map?

A dump writes each PointCloud2 message to its own file in sensor coordinates. Stacking those files gives you a smeared cloud because the sensor moved between frames. A SLAM reconstruction estimates the sensor trajectory, closes loops, and corrects drift so every scan lands in one consistent map frame.

Does this work with ROS2 bags (.db3)?

Not yet. LidarFlow accepts ROS1 .bag and .mcap today. If you have a .db3 bag, reindex it to MCAP with the rosbag2 MCAP storage plugin and upload that. You can also join the waitlist on the ROS2 .db3 status page.

What if my rosbag has no GPS or GNSS data?

The run still works. You get a metric map in a local frame with the origin at the start of the recording. Georeferencing to WGS84 is the only step that needs GNSS fixes, so without them that step is skipped.

Next step

Need a map, not just a directory of PCD frames?