cartographer/sensor/compressed_point_cloud.h

Overview

CompressedPointCloud provides lossy compression for point clouds using grid-based quantization. Reduces memory/storage for large 3D lidar scans.

Class: cartographer::sensor::CompressedPointCloud

Compression Algorithm

  1. Quantize points to a 3D grid (configurable resolution)

  2. Deduplicate points in same voxel

  3. Encode as integer grid indices + residuals

  4. Store as byte arrays

Construction

explicit CompressedPointCloud(const PointCloud& point_cloud,
                              float compression_ratio = 0.1f);
  • compression_ratio — Target size ratio (0.1 = 10% of original)

Decompression

PointCloud Decompress() const;

Returns approximate original point cloud.

Serialization

proto::CompressedPointCloud ToProto() const;
static CompressedPointCloud FromProto(const proto::CompressedPointCloud& proto);

Proto Format

message CompressedPointCloud {
  int32 version = 1;
  float resolution = 2;
  repeated int32 cell_indices = 3;   // Packed 3D indices
  repeated float residuals = 4;      // Quantization residuals
}

Usage

// Compress large point cloud
sensor::PointCloud large_cloud = lidar->GetScan();
sensor::CompressedPointCloud compressed(large_cloud, 0.1f);

// Store/transmit
auto proto = compressed.ToProto();
SaveToFile(proto);

// Decompress for processing
sensor::PointCloud decompressed = compressed.Decompress();

Configuration

Compression ratio tradeoffs:

  • 0.05 — High compression, more loss

  • 0.1 — Balanced (default)

  • 0.2 — Lower compression, higher fidelity

See Also