ReUseX  0.0.5
3D Point Cloud Processing for Building Reuse
Loading...
Searching...
No Matches
reusex::geometry::PoseDriftOptions Struct Reference

Parameters for synthetic trajectory drift (#338). More...

#include <perturb_poses.hpp>

Public Attributes

unsigned seed = 42
 RNG seed (STANDARDS §6).
double drift_scale = 1.0
 Multiplier on target_drift_ratio.
double target_drift_ratio = 0.20
 Target median relative-pose disagreement between the drifted and the seed trajectory over temporally distant frame pairs, as a FRACTION of the trajectory's extent.
int min_frame_gap = 50
 Frame gap defining "temporally distant" for the metric above, mirroring LoopClosureOptions::min_frame_gap: pairs closer than this in index are handled by the odometry factors, not by drift-correcting constraints.
double rot_bias_gain = 0.020
 Systematic rotational error per metre travelled (rad/m).
double rot_walk_gain = 0.010
 Rotational random walk (rad per sqrt(m)).
double trans_bias_gain = 0.020
 Systematic translational (scale) error, as a fraction of each step.
double trans_walk_gain = 0.010
 Translational random walk (m per sqrt(m)).
double bias_correlation_length = 5.0
 Correlation length of the bias process (m).
int calibration_iterations = 60
 Bisection steps used to solve for the amplitude.
double calibration_tolerance = 1e-4
 Relative tolerance on the realised drift ratio.

Detailed Description

Parameters for synthetic trajectory drift (#338).

The primary knob is drift_scale; the base gains below set the CHARACTER of the drift (how much is systematic vs random, rotational vs translational) and the calibration solves for the overall amplitude that hits the requested magnitude, so changing a base gain changes the shape of the deformation without changing how large it is.

Definition at line 80 of file perturb_poses.hpp.

Member Data Documentation

◆ bias_correlation_length

double reusex::geometry::PoseDriftOptions::bias_correlation_length = 5.0

Correlation length of the bias process (m).

Shorter = the systematic component wanders more often; longer = a more constant bias.

Definition at line 130 of file perturb_poses.hpp.

◆ calibration_iterations

int reusex::geometry::PoseDriftOptions::calibration_iterations = 60

Bisection steps used to solve for the amplitude.

60 is far more than needed for double precision and costs microseconds.

Definition at line 135 of file perturb_poses.hpp.

◆ calibration_tolerance

double reusex::geometry::PoseDriftOptions::calibration_tolerance = 1e-4

Relative tolerance on the realised drift ratio.

Definition at line 137 of file perturb_poses.hpp.

◆ drift_scale

double reusex::geometry::PoseDriftOptions::drift_scale = 1.0

Multiplier on target_drift_ratio.

0 disables drift entirely (the poses come back bit-identical), which is the no-op guard.

Definition at line 87 of file perturb_poses.hpp.

◆ min_frame_gap

int reusex::geometry::PoseDriftOptions::min_frame_gap = 50

Frame gap defining "temporally distant" for the metric above, mirroring LoopClosureOptions::min_frame_gap: pairs closer than this in index are handled by the odometry factors, not by drift-correcting constraints.

Clamped down on short sequences so the measurement always has samples.

Definition at line 115 of file perturb_poses.hpp.

◆ rot_bias_gain

double reusex::geometry::PoseDriftOptions::rot_bias_gain = 0.020

Systematic rotational error per metre travelled (rad/m).

The dominant real-world drift mode: integrated through the lever arm it produces the characteristic curved, super-linear divergence.

Definition at line 121 of file perturb_poses.hpp.

◆ rot_walk_gain

double reusex::geometry::PoseDriftOptions::rot_walk_gain = 0.010

Rotational random walk (rad per sqrt(m)).

Definition at line 123 of file perturb_poses.hpp.

◆ seed

unsigned reusex::geometry::PoseDriftOptions::seed = 42

RNG seed (STANDARDS §6).

Different seeds give different realisations of the same drift statistics — the intended way to get an ensemble.

Definition at line 83 of file perturb_poses.hpp.

◆ target_drift_ratio

double reusex::geometry::PoseDriftOptions::target_drift_ratio = 0.20

Target median relative-pose disagreement between the drifted and the seed trajectory over temporally distant frame pairs, as a FRACTION of the trajectory's extent.

The amplitude of the perturbation is solved so the realised ratio matches target_drift_ratio * drift_scale.

Default 0.20. The office scan's own measured value is 0.80 (14 455 mm of median disagreement over an 18.01 m extent, §9.5) and is reachable with drift_scale = 4, but it should not be the default: office walks 69 m of path inside an 18 m box, whereas an ARKitScenes room scan orbits 8-15 m of path inside a 1.8-2.6 m box. Demanding 80% of THAT extent needs a perturbation ~38x the base gains and tumbles the worst frame by 180 deg — which is no longer drift, it is destruction, and a benchmark built on it would measure nothing a solver could ever recover.

0.20 is chosen against the two thresholds that decide whether the benchmark can answer anything (§9.5): it puts 0.36-0.51 m of relative drift on these scans, i.e. 2-9x the measured XFeat edge error (58-169 mm), so drift >> edge error and loop closure has something to win; and it is 7-10x the 50 mm F-score threshold, so the no-pose-stage baseline is unambiguously bad against GT instead of marginally so.

Definition at line 109 of file perturb_poses.hpp.

◆ trans_bias_gain

double reusex::geometry::PoseDriftOptions::trans_bias_gain = 0.020

Systematic translational (scale) error, as a fraction of each step.

Definition at line 125 of file perturb_poses.hpp.

◆ trans_walk_gain

double reusex::geometry::PoseDriftOptions::trans_walk_gain = 0.010

Translational random walk (m per sqrt(m)).

Definition at line 127 of file perturb_poses.hpp.


The documentation for this struct was generated from the following file: