1.0.2¶
Frozen snapshot captured from ghcr.io/tumftm/flexcloud:1.0.2 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