Added GlobalPositioner Class#2495
Conversation
|
We agreed on creating a base class, which should make it more clear what the difference is between the two. Also edit the PR comments if your understanding is now different after our discussion. |
|
For the record, not in love with the name “global positioner” |
|
@dellaert Hi Frank, I agree with not being in love with the GlobalPositioner name, it implies a very detailed and novel estimator architecture and doesn't provide any intuition on the structure of the actual optimization being performed. That being said I think the name is basically the standard for this new pipeline stage in all the sfm papers I've been reading that came out since Glomap. I think with this base class refactor I am working on we will be able to satisfy everyone with the base class representing an Un-opinionated absolute position optimization that doesn't enforce any specific graph structure (I haven't come up with a good name yet) and with the opinionated (and standard definition following) TranslationAveraging and GlobalPositioner subclasses. GTSFM users should also be able to instantiate the Base Class and impose any custom graph structure they think for benchmarks and research questions (eg. do camera-to-camera constraints help on dataset like Skydio-8) I am about to board a flight to Oregon to visit my girlfriend and family for a quick break, I will be able to tackle everything in full force starting Thursday ! I'm super energized about this Frank, thank you for your support |
dellaert
left a comment
There was a problem hiding this comment.
The PR body still has “Commit and push tests” unchecked; please attach the exact test targets and pass/fail output (or CI links) before review is finalized.
|
Also launching a quick copilot review. Evaluate its comments with grain of salt - but sometimes quite useful. Update: copilot not available :-/ |
@dellaert Pushed the tests, I think I need maintainer approval to run the CI |
|
@dellaert Hey frank sorry need reapproval, had to update the python bindings in the pr |
|
Ping on slack next time |
Status
LocationRecovery→GlobalPositioner/TranslationRecoveryTLDR
Extracts a
LocationRecoverybase class fromTranslationRecovery. The base class is an unopinionated, directly instantiable solver: direction measurements in, Point3 positions out. Two opinionated subclasses enforce specific graph structures:TranslationRecoveryAPI is unchanged. No regressions. Ran end to end benchmark tests locally, with gtsam-develop master branch and my local build, same numbers for both.What's in this PR
LocationRecovery.h/cppGlobalPositioner.h/cppLocationRecoveryTranslationRecovery.h/cppLocationRecovery, API unchangedsfm.iWhy a base class?
LocationRecoverycan express problems directly as well, I used it to test "MixedGlobalPositioning" (GP with additional camera-camera BATA Factors). In GTSFM, we use all three tiers:Opinionated GP (bipartite camera+landmark, one-liner):
Opinionated TA (unchanged from before this PR):
Unopinionated base (custom mixed-edge experiment):
Downstream GTSFM Benchmark Experiments
Configs compared:
GlobalPositionerwith camera–point edges onlyLocationRecoverybase class with camera–camera + camera–point edgesGlobalPositionerwithout 2-view bundle adjustmentTranslationRecovery(1DSFM, pre-refactor)door-12
skydio-8
gerrard-100
south-128
palace-281
Tests
All pass locally (
testLocationRecovery,testGlobalPositioner,testTranslationRecovery):References