-
Notifications
You must be signed in to change notification settings - Fork 12
Optimization Backends
JokerJohn edited this page Apr 23, 2026
·
6 revisions
The standalone project uses the Python optimizer as the default backend.
Why:
- simpler installation
- no mandatory ROS / catkin requirement
- consistent integration with the PyQt + Open3D GUI
- validated parity against the legacy C++ backend
The Python backend now exposes two solve modes:
-
Fast ISAM2- default in the GUI
- intended for repeated working-graph updates during manual editing
-
Accurate LM- batch-style reference solve
- useful for parity checks or final confirmation before export
In the current GUI:
-
Fast ISAM2lives inAdvanced -> Optimize -
MapVoxelalso lives inAdvancedand defaults to0.1 m -
TgtVoxellives inRegistrationand defaults to0.1 m
The C++ backend is still supported as an optional fallback.
Use it when:
- you already have the legacy backend environment
- you want direct parity checks against historical runs
- you need a fallback when Python GTSAM is temporarily unavailable
The Python backend follows the same runtime-parameter precedence used by the legacy optimizer:
- explicit CLI / GUI options
runtime_params.yaml- validated offline defaults
The legacy C++ fallback still solves with LM. If it receives --optimize-mode isam2, it reports the mode mismatch and falls back to LM explicitly.
Both backends export:
pose_graph.g2ooptimized_poses_tum.txtpose_graph.pngmanual_loop_report.json
The full output layout is:
-
manual_loop_projects/<project_id>/- edit-state and resume files
-
manual_loop_runs/<run_id>/- actual optimizer outputs
-
manual_loop_exports/<export_id>/- final-export manifest pointing to one selected run
global_map_manual_imu.pcd and trajectory.pcd are built during Export by default so iterative graph editing stays responsive.
Manual Loop Closure Tools · Repository · README · MS-Mapping