GTSAM 4.3.0 #2808
dellaert
announced in
Announcements
GTSAM 4.3.0
#2808
Replies: 0 comments
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Uh oh!
There was an error while loading. Please reload this page.
GTSAM 4.3 is a substantial release focused on faster inference, improved correctness and robustness, expanded navigation and estimation capabilities, certifiable and GPU-accelerated optimization, and a more modern developer experience.
Release 4.3 also comes with a substantially expanded MyST documentation site, including new user guides, conceptual documentation, and a growing collection of executable Python notebooks. The examples now cover geometry, SLAM, structure from motion, navigation, filtering, discrete and hybrid inference, continuous-time estimation, certifiable estimation, CUDA optimization, and more, with many notebooks runnable directly in Google Colab.
Contributors
GTSAM 4.3 reflects an unusually broad community effort. The release was driven especially strongly by @dellaert, @varunagrawal, and @ProfFan, with major sustained contributions from @talregev, @p-zach, @Gold856, @DLuminary, @jlblancoc, @jashshah999, and @akshay-krishnan. Their work spans core algorithms, correctness and performance, navigation, geometry, wrappers, documentation and examples, build and CI infrastructure, portability, and modernization of the codebase. The sections below also credit the contributors responsible for major new capabilities.
Major changes in 4.3
Modern C++ and reduced Boost dependence
GTSAM 4.3 moves to C++17 and modern Eigen versions while removing a large amount of legacy Boost usage.
Smart pointers, optionals, tuples, iterators, containers, concepts infrastructure, headers, and other internals were modernized, and code deprecated in GTSAM 4.2 was removed. Boost can now be disabled in substantially more configurations, and support for system-installed dependencies has improved considerably.
Key contributors: @dellaert, @kartikarcot, @varunagrawal, @Gold856, @jlblancoc, @mcm001, @ShuangLiu1992, @jmackay2, @ProfFan.
Faster inference and optimization
A significant amount of work in 4.3 went into making common GTSAM workloads faster. Nonlinear factor-graph error evaluation, Jacobian operations, Levenberg–Marquardt elimination, Lie-group operations, discrete inference, iSAM2 updates, IMU integration, smart factors, and several other hot paths were optimized.
A new multifrontal solver infrastructure adds scheduled and parallel elimination, bottom-up clique merging, task schedulers, parallel separator updates, TBB-based execution, and more memory-efficient parent updates. Additional work introduced matrix-free PCG, compact Schur-complement machinery for bundle adjustment, optional CHOLMOD support, and continuous benchmarking to catch performance regressions.
Key contributors: @dellaert, @ProfFan, @tzvist, @leolrg, @jashshah999, @varunagrawal.
Experimental CUDA acceleration
GTSAM 4.3 introduces experimental CUDA acceleration for both bundle adjustment and more general nonlinear optimization.
The CUDA SFM optimizer provides GPU-backed Levenberg–Marquardt for BAL-style bundle adjustment, CUDA GNC uses the GPU solver as its inner optimizer, and newer CUDA nonlinear solvers support both cuDSS and PCG backends. Python bindings are available for the CUDA LM and GNC paths.
Key contributors: @leolrg, @dellaert.
Navigation, IMU, and filtering expanded substantially
Navigation is one of the areas with the largest amount of new functionality. Highlights include exact zero-order-hold IMU integration, NavState-based Lie-group preintegration, Galilean preintegration and combined Galilean IMU factors, improved handling of sensor offsets and centripetal acceleration, and exact rotating-Earth dynamics.
The release also adds richer
NavStateLie-group operations, Galilean-state formulations, EKF and invariant-EKF infrastructure, equivariant filtering and EqVIO support, improved AHRS handling, EKF reset support, gravity-aware IMU factors, and several legged-state-estimation implementations. IMU covariance conventions and residual coordinates also received substantial correctness work.Key contributors: @dellaert, @scottiyio, @jenniferoum, @rohan-bansal, @mkielo3, @nkhedekar, @arihantb2, @DLuminary, @varunagrawal.
GNSS support became a first-class capability
GTSAM 4.3 significantly expands GNSS estimation support. New factors cover pseudorange, differential pseudorange, carrier phase, RTK double differences, PPP-style measurements, Doppler/range-rate measurements, lever arms, and GNSS/IMU coupling.
The release also adds a
GlobalPositionerabstraction and correct Sagnac handling for undifferenced GNSS measurements, with follow-up fixes to the Doppler formulation.Key contributors: @inuex35, @masoug, @kathirgounder, @mnissov, @scottiyio, @varunagrawal.
Continuous-time Gaussian processes and differentiable splines
A new continuous-time Gaussian-process framework supports white-noise-on-acceleration trajectory models, continuous-time factors, GP interpolation, trajectory factor-graph construction, Python bindings, and worked notebook examples.
GTSAM 4.3 also adds Lie-group-aware differentiable spline curves, extending continuous-time trajectory modeling beyond GP interpolation.
Key contributors: @holmesco, @dellaert.
Constrained and certifiable optimization
Constrained optimization expanded substantially, with support for LP, QP, and QCQP formulations, wrappers, examples, and improved covariance handling under constraints.
QCQP factor graphs can be lifted into optimization problems with monolithic and chordal SDP relaxations, Burer–Monteiro formulations, and recovery back to geometric states. The new
certifiablemodule includes a Riemannian Staircase solver, MOSEK integration in Python and MATLAB, and certifiable applications including Wahba, landmark localization, and rotation-related estimation problems.FAST-Sync initialization and Shonan certificate handling were also improved.
Key contributors: @dellaert, @yetongumich, @zhexin1904, @avinashresearch1, @ProfFan.
Robust estimation
Robust estimation gained new loss functions, broader GNC support, TLS losses including the René Vidal formulation, GNC-enabled trajectory alignment, and robust CUDA optimization.
The release also includes riSAM, a robust incremental smoothing and mapping implementation built on extensions to iSAM2.
Key contributors: @DanMcGann, @hkhanuja, @akshay-krishnan, @leolrg, @dellaert, @ProfFan.
Better incremental inference, marginalization, and covariance recovery
iSAM2 and the fixed-lag smoothers received numerous fixes and improvements, particularly around marginalization, factor removal, reintroduced variables, adaptive reordering, constrained gradients, tree statistics, timestamps, and state cleanup.
IncrementalFixedLagSmoothermoved fromgtsam_unstableinto the stable library. Marginals and covariance recovery were substantially reworked as well, including Bayes-tree cache handling, Steiner-tree covariance queries, direct covariance recovery throughGaussianBayesTreeand iSAM2, preservation of joint-marginal key order, and fixes for deep-tree recursion.Key contributors: @dellaert, @varunagrawal, @gradyrw, @ProfFan, @NewThinker-Jeffrey, @jashshah999, @Ellon, @DLuminary, @tandede, @talfeiner-mc, @admin123-abc.
Lie groups and geometry received a major overhaul
The SO(3), SE(3), and SE₂(3) exponential/logarithm machinery and Jacobians were reworked around faster and more systematic kernels. SO(3) logarithms received both accuracy and performance improvements, especially near difficult rotations.
New or substantially expanded abstractions include
Galilean3,SL4,PowerLieGroup, variable-dimension product groups, generic tangent groups, extendedSE_k(3)poses, and improvedSimilarity2/Similarity3. Geometry additions also includeSim3trajectory alignment, spherical-camera support, fundamental and essential transfer factors, self-calibration factors, and additional QCQP lifts for geometric states.Key contributors: @dellaert, @mkielo3, @yluo5820, @akshay-krishnan, @AlessandroFornasier, @DLuminary, @inuex35, @kathirgounder.
Hybrid and discrete inference matured considerably
The hybrid and discrete inference stack received a broad overhaul covering factors, conditionals, Bayes nets, nonlinear inference, pruning, sampling, marginalization, smoothing, relinearization, incremental inference, and Python wrapping.
TableFactorprovides an efficient sparse representation for discrete factors, whileDecisionTreeoperations, discrete elimination, k-best search, discrete-continuous smoothing and mapping, and hybrid iSAM were substantially improved. Discrete constraints were promoted to the stable API, with new sparseAllDiffsupport and faster generic multiplication throughTableFactor.Key contributors: @varunagrawal, @dellaert, @ProfFan, @ywkim0606, @arutkowski.
Python, MATLAB, wrappers, packaging, and build support
The Python interface received extensive attention, including broader API coverage, generated type hints, PEP 561 support, NumPy compatibility updates, newer pybind11 integration, better return policies, reduced copies across the wrapper boundary, and many new examples.
A particularly large late-release wrapper push filled gaps in navigation, iSAM2, fixed-lag smoothing, noise-model introspection, subset extraction,
CustomFactor, and stub generation.MATLAB gains
CustomFactor, numerical derivatives, revamped bindings, and MOSEK SDP support. Wheel generation, Windows support, Apple Silicon builds, vcpkg integration, CMake configuration, ROS/colcon behavior, and CI reliability were also substantially improved.Key contributors: @ProfFan, @DLuminary, @varunagrawal, @p-zach, @talregev, @Gold856, @yambati03, @mvanhorn, @zcjhao, @thatdudegrantt, @dellaert, @jlblancoc.
Important correctness and robustness improvements
This release contains substantial correctness work across core inference, marginalization, fixed-lag smoothing, iSAM2, robust objectives, noise models, geometry, IMU preintegration, Jacobians, constraints, serialization, wrappers, and numerical edge cases.
Noise-model validation was tightened, long-standing geometry and Jacobian issues were fixed, robust objective and linearization behavior was made more consistent, covariance-frame conventions were documented, Lie-group Jacobians in prior and between factors are now enabled correctly by default, and numerous memory-safety, serialization, and platform-specific bugs were addressed.
Key contributors: @dellaert, @ProfFan, @varunagrawal, @DanMcGann, @jashshah999, @DLuminary, @gradyrw, and many others.
Documentation and examples
The new MyST-based documentation substantially expands coverage of inference, SLAM, SFM, navigation, geometry, hybrid and discrete models, constrained and certifiable optimization, CUDA solvers, basis functions, marginals, continuous-time Gaussian processes, and the linear solver stack.
Examples and notebooks were reorganized by GTSAM module, with new walkthrough notebooks for wrapped APIs and dedicated examples for newer functionality such as continuous-time estimation, certifiable optimization, navigation, and CUDA solvers.
Key contributors: @p-zach, @dellaert, @CodeXTL, @Robert-Jia00129, @rohan-bansal, @holmesco, @truher, @zcjhao, and many others.
Notable (merged) PRs:
opwith Assignment by @varunagrawal in Apply DecisionTreeopwith Assignment #1137prunemethod by @varunagrawal in DecisionTreeFactorprunemethod #1151maxNrAssignmentscheme for pruning by @varunagrawal in NewmaxNrAssignmentscheme for pruning #1156MixtureFactorcontinuous keys check by @varunagrawal inMixtureFactorcontinuous keys check #1289NoiseModelFactor1in withNoiseModelFactorNin pre-made factors by @gchenfc in ReplaceNoiseModelFactor1in withNoiseModelFactorNin pre-made factors #1344NoiseModelFactor1-6and moveX1andkey1-6shortcuts toNoiseModelFactorNby @gchenfc in Un-deprecateNoiseModelFactor1-6and moveX1andkey1-6shortcuts toNoiseModelFactorN#1370filterby @dellaert in Deprecatefilter#1397+=,,operator by @varunagrawal in Overload+=,,operator #1558FactorGraph::atmethod by @varunagrawal in TemplatedFactorGraph::atmethod #1650JacobianFactor::getAmethod by @varunagrawal in OverloadJacobianFactor::getAmethod #1656DiscreteFactor::errorTreemethod for all assignments by @varunagrawal inDiscreteFactor::errorTreemethod for all assignments #1669printErrorsmethod for HybridFactorGraph by @varunagrawal inprintErrorsmethod for HybridFactorGraph #1670logNormalizationConstantfor Gaussian conditionals by @varunagrawal in PrintlogNormalizationConstantfor Gaussian conditionals #1705wrapand allow numpy 2.0.0 by @varunagrawal in Updatewrapand allow numpy 2.0.0 #1773DiscreteConditionalandDiscreteBayesNetimprovements by @varunagrawal inDiscreteConditionalandDiscreteBayesNetimprovements #1781DiscreteConditional'sargmaxandargmaxInPlaceby @varunagrawal in ImproveDiscreteConditional'sargmaxandargmaxInPlace#1785GaussianConditionalandGaussianBayesNetby @varunagrawal in Improvements toGaussianConditionalandGaussianBayesNet#1801LocalizationExample.cppby @varunagrawal in Python port ofLocalizationExample.cpp#1808pybind11for Python wrapper by @varunagrawal in Use bundledpybind11for Python wrapper #1812HybridNonlinearFactorinto .h and .cpp files by @varunagrawal in SplitHybridNonlinearFactorinto .h and .cpp files #1835errorTreemethod and its use in HybridGaussianFactorGraph by @varunagrawal in CommonerrorTreemethod and its use in HybridGaussianFactorGraph #1837kor-log(k)for normalization constant by @varunagrawal in Usekor-log(k)for normalization constant #1839errorTreeinDiscreteFactorby @varunagrawal in ImplementerrorTreeinDiscreteFactor#1858errorTreefor HybridNonlinearFactorGraph by @varunagrawal in ImplementerrorTreefor HybridNonlinearFactorGraph #1859No HidingPR by @varunagrawal in Updates toNo HidingPR #1865DiscreteFactorFromErrorsby @varunagrawal in Improve theDiscreteFactorFromErrors#1867NonlinearConjugateGradientOptimizerby @varunagrawal in RefactorNonlinearConjugateGradientOptimizer#1877DiscreteFactor::operator()a common base method by @varunagrawal in MakeDiscreteFactor::operator()a common base method #1925TableFactor::toDecisionTreeFactorby @varunagrawal in FasterTableFactor::toDecisionTreeFactor#1933serialize()to various preintegration classes by @varunagrawal in Addserialize()to various preintegration classes #1939#ifs by @varunagrawal in Platform specific#ifs #1966HybridSmootherby @varunagrawal in BetterHybridSmoother#1996cibuildwheelworkflow by @yambati03 in Addcibuildwheelworkflow #2029GTSAM_SLOW_BUT_CORRECT_EXPMAPby @varunagrawal in DeprecateGTSAM_SLOW_BUT_CORRECT_EXPMAP#2043GTSAM_CONCEPT_USAGEin lieu ofBOOST_CONCEPT_USAGEby @varunagrawal in UseGTSAM_CONCEPT_USAGEin lieu ofBOOST_CONCEPT_USAGE#2047newFactorsby @varunagrawal in Remove fixed values when keys are reintroduced innewFactors#2061cibuildwheelby @yambati03 in Trigger doxygen generation incibuildwheel#2092cibuildwheelby @yambati03 in Add support for building MacOS wheels incibuildwheel#2093cibuildwheeltargets for MacOS Silicon by @yambati03 in Addcibuildwheeltargets for MacOS Silicon #2102cibuildwheelby @yambati03 in Add production workflow forcibuildwheel#2110gtsam-developproject releases by @yambati03 in Add script to clean upgtsam-developproject releases #2123gtsamby @varunagrawal in Move testIncrementalFixedLagSmoother togtsam#2132samplemethods by @varunagrawal in Updatesamplemethods #2137geometry/Cal3_S2by @CodeXTL in Added user guide forgeometry/Cal3_S2#2156Cal3_S2User Guide by @CodeXTL in UpdatedCal3_S2User Guide #2163dimensionfield fromCal3by @CodeXTL in Removeddimensionfield fromCal3#2178Cal3_S2StereoandStereoCameraby @CodeXTL in Added User Guides forCal3_S2StereoandStereoCamera#2200maxIterationsin Cal3DS2_Base.cpp calibrate function by @steplee in IncreasemaxIterationsin Cal3DS2_Base.cpp calibrate function #2204wrapto latest with pybind11 3.0.1 by @ProfFan in #2277GncOptimizer.cppby @varunagrawal in #2461Full Changelog: 4.2.0...4.3.0
This discussion was created from the release GTSAM 4.3.0.
All reactions