|
ReUseX
0.0.5
3D Point Cloud Processing for Building Reuse
|
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. | |
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.
| 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.
| 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.
| double reusex::geometry::PoseDriftOptions::calibration_tolerance = 1e-4 |
Relative tolerance on the realised drift ratio.
Definition at line 137 of file perturb_poses.hpp.
| 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.
| 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.
| 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.
| 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.
| 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.
| 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.
| 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.
| 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.