Skip to content

Pipeline Steps

The asset preprocessing pipeline consists of four steps executed in order. The first three are core and required; the fourth is optional PLY compression.

Step 1: coordinate_normalize

Purpose

Normalize the 3D scene coordinate system so the ground plane aligns with Z=0.

Algorithm

  • RANSAC ground plane fitting
  • Compute 4×4 extrinsic matrix so ground normal is [0, 0, 1] and ground height is Z=0
  • Apply transform to point cloud

Input / Output

Input Output
source.ply or any PLY aligned.ply

Config Example

ransac:
  distance_threshold: 0.02    # RANSAC distance threshold (meters)
  ransac_n: 3
  num_iterations: 1000

height_range: [-0.05, 0.05]   # Ground point height range

z_filter:
  auto_estimate: true
  z_min: null
  z_max: null

Step 2: pcd_to_map

Purpose

Project point cloud to a 2D occupancy grid map for path planning and collision detection.

Algorithm

  • Project 3D points to 2D (X–Y plane)
  • Filter by height relative to ground (default 0.1m–0.8m)
  • Output ROS-compatible occupancy grid map (PGM) and YAML metadata

Input / Output

Input Output
aligned.ply nav_map.pgm, nav_map.yaml

Config Example

map:
  resolution: 0.05            # Resolution (meters per pixel)
  margins: [1.0, 1.0, 1.0, 1.0]
  occupied_threshold: 10
  invert: false

height_filter:
  min_z: 0.1                  # Height filter lower bound
  max_z: 0.8                  # Height filter upper bound

Step 3: valid_region_estimate

Purpose

Estimate navigable region from the occupancy grid map and generate nav_mask.png.

Algorithm

  • DBSCAN outlier removal
  • Alpha Shapes concave hull
  • Write contour to PNG mask (255=navigable, 0=not)

Input / Output

Input Output
nav_map.pgm, nav_map.yaml nav_mask.png

Config Example

parameters:
  occupied_threshold: 255
  dbscan_eps: 5.0              # DBSCAN neighborhood radius (meters)
  dbscan_min_samples: 1000
  alpha: 0.6                   # Alpha Shapes parameter

Non-Fatal

This step is marked fatal: false; the pipeline continues if it fails.


Step 4: compress_ply (Optional)

Purpose

Convert PLY to compact .splat format for the web viewer and fast loading.

Algorithm

  • Each Gaussian compressed to 32 bytes
  • Prune low-opacity Gaussians by threshold
  • Sort by importance for progressive loading

Input / Output

Input Output
aligned.ply or source.ply compressed.splat

This step is not in the default pipeline; run the compress command to batch-convert.


Step Dependencies

graph LR
    S1[coordinate_normalize] --> S2[pcd_to_map]
    S2 --> S3[valid_region_estimate]
    S1 -.optional.-> S4[compress_ply]

See also: Configuration · CLI Commands