Skip to content

1.0.1

Frozen snapshot captured from ghcr.io/tumftm/flexcloud:1.0.1 at release time.

Supported platforms

Component Requirement
Operating system Ubuntu 24.04 (Noble), x86_64
glibc 2.39
ROS 2 distro Jazzy
Python CPython 3.12.3
Wheel tag cp312-cp312-manylinux_*_x86_64
Architectures x86_64 only

flexcloud-keyframe-interpolation

Select keyframes from a SLAM trajectory and interpolate the corresponding reference positions, either from per-position txt files or from a ROS 2 bag (NavSatFix or Odometry messages).
Usage: keyframe_interpolation [OPTIONS] positions-path poses-path [out-dir]

Positionals:
  positions-path TEXT REQUIRED
                              Reference-data source. Auto-detected: a single .txt file is read line-by-line ("stamp x y z x_stddev y_stddev z_stddev"); a directory of per-position .txt files (filename = "<sec>_<nanosec>.txt") is read as such; a .mcap / .db3 / .sqlite3 file or a ROS 2 bag directory is read as a bag.
  poses-path TEXT:FILE REQUIRED
                              Path to SLAM trajectory in GLIM format
  out-dir TEXT [.]            Output directory for poses_keyframes.txt and positions_interpolated.txt

Options:
  -h,--help                   Print this help message and exit


Bag input:
  --pos-topic TEXT            Topic name (NavSatFix or Odometry) — required when positions-path is a bag
  -t,--target-frame TEXT      Target TF frame to transform positions into (uses /tf and /tf_static from bag)
  --origin FLOAT FLOAT FLOAT x 3
                              Custom origin for local Cartesian projection [lat lon alt]


Algorithm:
  --stddev-threshold FLOAT [0.25] 
                              Reject reference frames whose horizontal stddev exceeds this value
  --keyframe-delta-x FLOAT [2] 
                              Minimum translational distance between keyframes [m]
  --keyframe-delta-angle FLOAT [0.5] 
                              Minimum rotational distance between keyframes [rad]
  --interpolate,--no-interpolate{false}
                              Spline-interpolate the reference position at each keyframe timestamp (otherwise use closest-neighbor selection)
  --interp-pos-delta-xyz FLOAT [0.25] 
                              Minimum euclidean distance between consecutive spline support points [m]


Examples (positions-path auto-detected):
  # single txt file with one position per line
  flexcloud-keyframe-interpolation positions.txt poses_kitti.txt

  # directory of per-position txt files
  flexcloud-keyframe-interpolation /path/to/positions/ poses_kitti.txt

  # ROS 2 bag with NavSatFix on /sensor/gnss/fix
  flexcloud-keyframe-interpolation /path/to/bag.mcap poses_kitti.txt /path/to/out \
      --pos-topic /sensor/gnss/fix --target-frame base_link

flexcloud-georeferencing

Georeference a SLAM trajectory and (optionally) a corresponding point cloud map by aligning it to a GNSS / reference trajectory using Umeyama and rubber-sheeting.
Usage: georeferencing [OPTIONS] positions-path poses-path

Positionals:
  positions-path TEXT:FILE REQUIRED
                              Path to GNSS / reference trajectory
  poses-path TEXT:FILE REQUIRED
                              Path to SLAM trajectory in GLIM format

Options:
  -h,--help                   Print this help message and exit


Inputs:
  --pcd TEXT                  Optional point cloud map to transform alongside the trajectory
  --config-file TEXT:FILE     Optional YAML file with index-based fine-tuning arrays (exclude_ind, shift_ind, shift_ind_dist, fake_ind, fake_ind_dist, fake_ind_height)


Trajectory matching:
  --control-points INT [10]   Number of control points for rubber-sheeting
  --stddev-threshold FLOAT [0.25] 
                              Maximum stddev of reference points for automatic control-point selection
  --square-size FLOAT FLOAT FLOAT [[0.1,0.1,10]]  x 3
                              Padding of enclosing square around trajectories [x y z] (fractions)


Origin:
  --origin FLOAT FLOAT FLOAT [{}]  x 3
                              Custom ENU zero point [lat lon alt]


Evaluation:
  --evaluation                Print trajectory-matching statistics (RMSE, mean, median, stddev of GNSS-vs-aligned and GNSS-vs-rubber-sheeted deviations) to the terminal and log per-segment, deviation-colored linestrings to the rerun viewer.


Examples:
  # cartesian reference, no point cloud, default parameters
  ros2 run flexcloud georeferencing positions_interpolated.txt poses_keyframes.txt

  # GPS reference, custom origin, transform a point cloud as well
  ros2 run flexcloud georeferencing reference.txt poses_keyframes.txt \
      --pcd map.pcd      --origin 48.262 11.667 0.0

  # supply index-based fine-tuning arrays via YAML
  ros2 run flexcloud georeferencing reference.txt poses_keyframes.txt \
      --config-file georeferencing.yaml