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 NavState Lie-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 GlobalPositioner abstraction 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 certifiable module 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.
IncrementalFixedLagSmoother moved from gtsam_unstable into the stable library. Marginals and covariance recovery were substantially reworked as well, including Bayes-tree cache handling, Steiner-tree covariance queries, direct covariance recovery through GaussianBayesTree and 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, extended SE_k(3) poses, and improved Similarity2/Similarity3. Geometry additions also include Sim3 trajectory 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.
TableFactor provides an efficient sparse representation for discrete factors, while DecisionTree operations, 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 sparse AllDiff support and faster generic multiplication through TableFactor.
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:
- Adding failing tests for ISAM2 marginalization by @gradyrw in #1105
- Header discipline in base by @dellaert in #1108
- Windows Tests by @varunagrawal in #1109
- Add missing header for timing target by @dellaert in #1112
- replace ifndefs with pragma once by @acxz in #1113
- Include guards by @acxz in #1116
- Allow more functionality through system METIS by @acxz in #1117
- Using a random number generator in translation averaging by @akshay-krishnan in #1120
- Added more tests for basis by @dellaert in #1121
- filename in repo is w10000 not w10000-odom by @acxz in #1123
- Python optimizer iteration hook by @gchenfc in #1127
- Wrap ParameterMatrix as argument for Values by @varunagrawal in #1136
- Apply DecisionTree
opwith Assignment by @varunagrawal in #1137 - Fixed custom factors in doc/gtsam.lyx/pdf by @dellaert in #1139
- Print parents when printing GaussianConditional by @varunagrawal in #1143
- DecisionTree Improvements by @varunagrawal in #1144
- Wrapping Updates by @varunagrawal in #1146
- Improve Gaussian Conditional printing by @varunagrawal in #1147
- Pose3 improvements by @dellaert in #1148
- Update Wrapper by @varunagrawal in #1149
- Pose2::Align by @dellaert in #1150
- DecisionTreeFactor
prunemethod by @varunagrawal in #1151 - Record number of assignments for each leaf by @varunagrawal in #1154
- DecisionTree Refactor by @varunagrawal in #1155
- New
maxNrAssignmentscheme for pruning by @varunagrawal in #1156 - added wrapper for ProjectionFactorRollingShutter by @shteren1 in #1159
- Add camera and Calibration Jacobians in Python by @ProfFan in #1171
- noise models: Add getters for all model parameters by @jlblancoc in #1175
- Regenerate python utils files upon edit by @gchenfc in #1176
- Added some utilities for better using the SfM parts of GTSAM in Python by @ProfFan in #1185
- Adding options to translation averaging to support betweenfactor translation priors by @akshay-krishnan in #1190
- All uncertainty ellipses now contain 95% by @dellaert in #1193
- Wrap triangulateSafe by @dellaert in #1194
- Remove user flag for pip install by @varunagrawal in #1195
- Hybrid Factor Graph Implementation by @ProfFan in #1203
- Hybrid Pruning by @varunagrawal in #1215
- Improvements by @varunagrawal in #1217
- Add various tests for Hybrid by @varunagrawal in #1220
- HybridFactorGraph base class and other niceties by @varunagrawal in #1221
- Address matplotlib deprecation warnings for fig.gca() and window.set_title() by @vik748 in #1225
- Replace boost::function with std::function by @varunagrawal in #1232
- added jacobians for all pose3 methods in python wrappers by @shteren1 in #1234
- Wrapper Update by @varunagrawal in #1235
- Jose's updates by @varunagrawal in #1237
- Capitalize Identity trait by @varunagrawal in #1238
- Expose GNC params to python by @amadoantonini in #1239
- Wrap BearingRange Factors by @varunagrawal in #1240
- Implementation of the LOST triangulation algorithm by @akshay-krishnan in #1241
- Clear ConcurrentMap before loading archive data by @ScottMcMichael in #1248
- Update macos CI env by @varunagrawal in #1251
- replace addtogroup with ingroup for the SLAM group by @agilemapper in #1252
- Break up Python CI steps so reading logs is easier by @varunagrawal in #1254
- Doxygen Updates by @varunagrawal in #1255
- Link to interface library in case system metis is used by @Tobias-Fischer in #1258
- Delete FindBoost.cmake by @Tobias-Fischer in #1260
- Nonlinear Hybrid by @varunagrawal in #1263
- Add Zenodo for citations by @varunagrawal in #1265
- Hybrid Incremental Inference by @varunagrawal in #1267
- Update README.md by @pglira in #1268
- Linear HybridBayesNet optimization by @xsj01 in #1270
- Hybrid Incremental by @varunagrawal in #1271
- Hybrid ISAM by @varunagrawal in #1273
- Upgrade from ubuntu 18.04 to 20.04 by @varunagrawal in #1276
- Additional Nonlinear Hybrid by @varunagrawal in #1277
- Hybrid Bayes Net/Tree Optimize by @varunagrawal in #1280
- Add wrapping for hybrid nonlinear by @ProfFan in #1281
- Hybrid Bayes Tree Optimize by @varunagrawal in #1282
- Various updates for Hybrid by @varunagrawal in #1284
- Rewrap KeyVector for Matlab wrapper by @varunagrawal in #1285
- Hybrid Serialization by @varunagrawal in #1286
MixtureFactorcontinuous keys check by @varunagrawal in #1289- Hybrid Improvements by @varunagrawal in #1290
- Improved BayesTree pruning by @varunagrawal in #1293
- Hybrid Improvements - II by @varunagrawal in #1294
- Check for native architecture and set GTSAM_COMPILE_OPTIONS_PUBLIC accordingly by @stefangachter in #1296
- Hybrid Bayes Net pruning by @varunagrawal in #1300
- Hybrid Gaussian Conditional Elimination by @varunagrawal in #1301
- Update geometry.i : wrap multiplication of Rot3 and Unit3 by @akshay-krishnan in #1302
- Use eigen3 config.cmake by @OznOg in #1304
- Hybrid Updates by @varunagrawal in #1306
- Hybrid Pruning by @varunagrawal in #1309
- Update Switching fixture to be 0 indexed by @varunagrawal in #1311
- Dsf-gtsfm-refactor by @dellaert in #1312
- Hybrid ISAM GetOrdering method by @varunagrawal in #1315
- Wrapper Update by @varunagrawal in #1317
- Hybrid Mixture Error by @varunagrawal in #1318
- Proper Hybrid Elimination by @varunagrawal in #1319
- Housekeeping Updates by @varunagrawal in #1321
- Hybrid Multifrontal by @varunagrawal in #1323
- Remove unnecessary functions in ImuFactorsExample.cpp by @Taeyoung96 in #1324
- add workflow to trigger ubuntu packaging by @berndpfrommer in #1328
- Add an expression for normalize() by @nkhedekar in #1330
- Update README.md by @MigVega in #1331
- Hybrid Elimination by @varunagrawal in #1339
- Fixed Jacobian in python CustomFactorExample by @ulterzlw in #1340
- Hybrid Improvements by @varunagrawal in #1343
- Replace
NoiseModelFactor1in withNoiseModelFactorNin pre-made factors by @gchenfc in #1344 - GaussianConditional logDeterminant by @varunagrawal in #1345
- Sampling test for Hybrid Posterior by @varunagrawal in #1346
- Hybrid Bayes Net sampling by @varunagrawal in #1347
- Some refactoring and new test by @dellaert in #1349
- Add logDensity and evaluate to GaussianBN and HybridBN by @dellaert in #1352
- Added convenience constructors and python wrappers by @dellaert in #1353
- Wrap constructors for PreintegratedAhrsMeasurements by @varunagrawal in #1354
- HybridValues specify continuous then discrete by @varunagrawal in #1355
- Likelihoods and other improvements by @dellaert in #1356
- Test on ratio by @dellaert in #1357
- Initializer list and insert/update chaining by @dellaert in #1359
- Hybrid Elimination with Normalization Constant by @varunagrawal in #1360
- Slightly expand Python API by @jrpowers in #1361
- Switch to EliminateDiscrete for max-product by @dellaert in #1362
- Fixed a few small issues... by @dellaert in #1367
- Hybrid Serialization by @varunagrawal in #1368
- Un-deprecate
NoiseModelFactor1-6and moveX1andkey1-6shortcuts toNoiseModelFactorNby @gchenfc in #1370 - Two new tests, one with 5 modes by @dellaert in #1371
- Simplified AP for HybridBayesNet by @dellaert in #1372
- DefaultOrderingFunc in EliminationTraits by @varunagrawal in #1373
- Big Re-"Factor" of Hybrid by @dellaert in #1374
- Get rid of boost::assign by @dellaert in #1375
- More Expression wrappers by @BrettRD in #1376
- replace list_of with initializer list in TimeTBB.cpp by @kartikarcot in #1379
- Harmonized error/logProbability in entire Factor/Conditional hierarchy by @dellaert in #1380
- BatchFixedLagSmoother: add ability to limit warning debug prints by @acowley in #1381
- Some Hybrid Improvements by @varunagrawal in #1387
- Hybrid/simplify by @dellaert in #1388
- Correction to docs and lambdas by @varunagrawal in #1390
- Switch pruning test to probabilities by @varunagrawal in #1391
- verdant/typedef-optional-references by @kartikarcot in #1392
- Switch pruning test to probabilities. by @dellaert in #1394
- Switch to version 4.3a0 and to c++17. by @dellaert in #1395
- Deprecate
filterby @dellaert in #1397 - Deprecate filter in 4.3 by @dellaert in #1398
- Remove code deprecated in 4.2 by @dellaert in #1399
- Verdant/replace boost optional vals by @kartikarcot in #1403
- Upgraded to Eigen 3.4.0 by @dellaert in #1405
- Verdant/smart ptrs by @kartikarcot in #1406
- Deprecated boost transform_iterators by @dellaert in #1407
- Removed deprecated boost transform_iterators by @dellaert in #1408
- Verdant/boost serialization by @kartikarcot in #1409
- Verdant/boost tuples by @kartikarcot in #1410
- Replace boost::ptr_map in Values... by @dellaert in #1411
- Iterator for 4.2 by @dellaert in #1417
- Added a const_iterator back in by @dellaert in #1418
- Update ROS package.xml format to v3 and update gtsam version (develop branch) by @jlblancoc in #1428
- Add maintainers to package xml by @jlblancoc in #1430
- More details on source licenses by @jlblancoc in #1432
- c++17 style pairs everywhere by @dellaert in #1437
- Getting rid of misc. boost usage by @dellaert in #1438
- replace boost phoenix parser with SignatureParser by @dellaert in #1439
- Remove 'boost' dependency from Lago by @ankur-rc in #1440
- Fixing stack overflow issue for large tree by @wanmeihuali in #1441
- Refactor elimination... by @dellaert in #1442
- Separate .i file for Values by @varunagrawal in #1443
- Optionally remove boost completely by @dellaert in #1444
- Update CppUnitLite to not rely on boost by @varunagrawal in #1447
- Add normalization to max-product, avoiding underflow. by @keevindoherty in #1449
- Add normalization to sum-product, avoiding underflow. by @keevindoherty in #1453
- Fixed warnings that arise from stricter compiler flags by @dellaert in #1456
- Cross-platform traceStorage by @dellaert in #1458
- Reverted ill-advised concepts, attempt 2 by @dellaert in #1460
- Allow override of BUILD_SHARED_LIBS by @Ibarria in #1464
- CMakes updates by @varunagrawal in #1465
- Better Hybrid support by @varunagrawal in #1466
- Cmake Compatibility by @varunagrawal in #1469
- Wrapper Update for GTSAM 4.3 by @varunagrawal in #1474
- Stable BatchFixedLagSmoother by @dellaert in #1475
- Add constant term for hybrid models post-hoc by @varunagrawal in #1481
- CI Updates by @varunagrawal in #1484
- Update CodingGuidelines.lyx by @jlblancoc in #1485
- cmake: explicitly specifying the linker language for gtsam by @jlblancoc in #1486
- Allow using system pybind11 if it exists. by @jlblancoc in #1487
- GTSAM_DT_MERGING Flag by @varunagrawal in #1501
- Some refine works related to range-based for-loop of map constainer by @zubingtan in #1502
- Add Pose2 Component Jacobians by @DanMcGann in #1504
- add clang-format configuration file by @zubingtan in #1506
- add useLOST to triangulateSafe by @dllu in #1517
- Add missing option in the CMake for Pose2 Expmap by @ProfFan in #1520
- Upgrade TBB by @varunagrawal in #1523
- Wrap Unit3 methods with Jacobians by @varunagrawal in #1524
- Added TableFactor, a discrete factor optimized for sparsity. by @ywkim0606 in #1528
- Wapper Update by @varunagrawal in #1530
- LOST Triangulation Underconstrained by @travisdriver in #1534
- CMake Updates by @varunagrawal in #1536
- Basis Module Improvements by @varunagrawal in #1537
- Decision Tree Improvements by @varunagrawal in #1542
- Pybind11 STL Support by @varunagrawal in #1546
- Make Basis factors dynamic by @varunagrawal in #1548
- Python Wrapper Backwards Compatibility by @varunagrawal in #1549
- Remove boost from TableFactor and added guards to testSerializationSlam by @arutkowski in #1552
- Add explanation of the StereoPoint2 constructor by @IshitaTakeshi in #1554
- Remove need for nrAssignments in DecisionTreeFactor::prune by @varunagrawal in #1555
- TableFactor Improvements by @varunagrawal in #1556
- Overload
+=,,operator by @varunagrawal in #1558 - Add non concurrency to all workflows by @talregev in #1564
- Handle latest tbb by @talregev in #1567
- Wrap ISAM2 full update method by @varunagrawal in #1569
- Enable GNC Optimizer by @varunagrawal in #1572
- Improved documentation, wrapper, and tests by @dellaert in #1574
- Hybrid Elimination Improvements by @varunagrawal in #1575
- Added evaluation of expressions when inserting in Values by @arutkowski in #1577
- Show remaining keys in InconsistentEliminationRequested by @varunagrawal in #1578
- Improved wrapper/tests/documentation for some discrete classes by @dellaert in #1579
- TableFactor Unary Apply Methods by @varunagrawal in #1580
- Added some python and c++ examples with BinaryMeasurements by @dellaert in #1583
- Additional quaternion test by @dellaert in #1589
- Efficient Discrete Elimination by @varunagrawal in #1590
- TableFactor Constructors by @varunagrawal in #1592
- Additional Helpers by @varunagrawal in #1594
- Add some new loss functions by @NaivelyWritten in #1597
- Simplify scripts by @talregev in #1598
- Add ninja build by @talregev in #1609
- Add Lie group capabilities to NavState by @varunagrawal in #1613
- Hybrid Document Update by @varunagrawal in #1617
- Update Python CustomFactor documentation and example by @cntaylor in #1618
- Python Wrapper Updates by @varunagrawal in #1628
- Remove setting CMAKE_MACOSX_RPATH to 0 by default by @traversaro in #1632
- Add cpp example for GNC by @achintyamohan in #1634
- Update INSTALL.md by @stepeos in #1646
- Matlab Wrapper Update by @varunagrawal in #1649
- Templated
FactorGraph::atmethod by @varunagrawal in #1650 - CMake Cleanup by @varunagrawal in #1651
- Global DefaultKeyFormatter Assignment by @varunagrawal in #1655
- Overload
JacobianFactor::getAmethod by @varunagrawal in #1656 - Re-enable Debug CI for Linux by @varunagrawal in #1658
- Chebyshev2 Improvements by @varunagrawal in #1660
DiscreteFactor::errorTreemethod for all assignments by @varunagrawal in #1669printErrorsmethod for HybridFactorGraph by @varunagrawal in #1670- Optimizer Improvements by @varunagrawal in #1671
- Add a missing field in Matlab's CMakeLists.txt for UNSTABLE build by @etamarlu in #1677
- Add reprojection with fisheye camera model by @kkelchte in #1678
- Compile gtsam python for windows by @talregev in #1685
- AlgebraicDecisionTree Helpers by @varunagrawal in #1696
- Cleaner version of eliminate by @dellaert in #1698
- Cephes Updates by @varunagrawal in #1704
- Print
logNormalizationConstantfor Gaussian conditionals by @varunagrawal in #1705 - ISAM2: Add variables before computing delta by @varunagrawal in #1707
- libcephes only needs 3.10, allowing build on ubuntu 18.04 by @berndpfrommer in #1711
- Update Wrapper by @varunagrawal in #1712
- Various Improvements by @varunagrawal in #1713
- Remove swap from python ci by @talregev in #1714
- Support msvc 2022 along 2019 by @talregev in #1715
- Ubuntu 22.04 for python tbb. hopefully will solve the hang problem. by @talregev in #1719
- Fixing std::optional handling being redundant in Boost version > 1.80 by @talregev in #1721
- Close unmatched endif by @stevenlovegrove in #1728
- Specialize BetweenFactor with Similarity3 for Python bindings by @niwhsa9 in #1729
- Fixing strength of bias constraints in IMUKittiExampleGPS.cpp by @MichalNowicki in #1735
- Removed a self include in PreintegrationCombinedParams.h by @nkhedekar in #1737
- Sort VectorValues::values() by key when TBB is ON by @arutkowski in #1740
- Some Updates by @varunagrawal in #1743
- Add missing header in 3rdparty/cephes by @dch4o in #1748
- Tiny Updates to Python Wrapper by @contagon in #1755
- Correctly deal with sensor rotation in AHRS by @dellaert in #1762
- Build all tests for windows by @talregev in #1764
- Update MSVC toolset version by @varunagrawal in #1768
- gtsam ros pkg not propagating dependencies for downstream ros pkgs by @matlabbe in #1772
- Update
wrapand allow numpy 2.0.0 by @varunagrawal in #1773 - Update namespace for Vector and Matrix by @varunagrawal in #1774
- correct Linux CI platforms by @acxz in #1775
- modernize containers by @acxz in #1780
DiscreteConditionalandDiscreteBayesNetimprovements by @varunagrawal in #1781- Improve
DiscreteConditional'sargmaxandargmaxInPlaceby @varunagrawal in #1785 - add definition of constraints by @yetongumich in #1789
- Cherry-pick #1504 by @ProfFan in #1798
- Improvements to
GaussianConditionalandGaussianBayesNetby @varunagrawal in #1801 - Working Hybrid by @varunagrawal in #1802
- Direct Hybrid Factor Specification by @varunagrawal in #1805
- Python port of
LocalizationExample.cppby @varunagrawal in #1808 - Use bundled
pybind11for Python wrapper by @varunagrawal in #1812 - Generate Python type hints during build by @varunagrawal in #1813
- add example CameraResectioning.py by @truher in #1816
- added SelfCalibrationExample.py by @truher in #1817
- Update cmake by @dellaert in #1818
- Check if cmake policy exists by @dellaert in #1820
- Use pybind11-stubgen for generating stubs by @ProfFan in #1821
- Improved HybridBayesNet API by @varunagrawal in #1823
- Remove gcc9+tbb CI for python wrapper by @varunagrawal in #1825
- Add the BATA translation averaging factor with unit tests by @akshay-krishnan in #1828
- Hybrid tests using importance sampling by @dellaert in #1829
- Rename Hybrid Elements by @varunagrawal in #1830
- HybridNonlinearFactor Relinearization by @varunagrawal in #1831
- Enum to categorize HybridFactor by @varunagrawal in #1832
- Update Hybrid Renaming by @varunagrawal in #1833
- Remove HybridNonlinearFactor normalization code by @varunagrawal in #1834
- Split
HybridNonlinearFactorinto .h and .cpp files by @varunagrawal in #1835 - HybridGaussianConditional inherits from HybridGaussianFactor by @varunagrawal in #1836
- Common
errorTreemethod and its use in HybridGaussianFactorGraph by @varunagrawal in #1837 - numdiff in python by @dellaert in #1838
- Use
kor-log(k)for normalization constant by @varunagrawal in #1839 - Document and favor easy constructor by @dellaert in #1840
- Non-loop versions for checking sigma values by @varunagrawal in #1842
- Easy HNF constructors by @dellaert in #1843
- Small runtime improvement for hybrid by @dellaert in #1844
- Ignore stubgen errors and wrap TriangulationFactor by @varunagrawal in #1846
- Moved mixture model tests to their own file... by @dellaert in #1847
- Simpler HybridGaussianFoo constructors by @dellaert in #1848
- Remove postfix for compiled Python library by @varunagrawal in #1849
- Better HybridNonlinear! by @dellaert in #1851
- More refactoring by @dellaert in #1853
- More tests, some small bugfixes by @dellaert in #1854
- Navigation docs by @dellaert in #1856
- Implement
errorTreeinDiscreteFactorby @varunagrawal in #1858 - Implement
errorTreefor HybridNonlinearFactorGraph by @varunagrawal in #1859 - Refactored hybrid inference by @dellaert in #1863
- Updates to
No HidingPR by @varunagrawal in #1865 - Improve the
DiscreteFactorFromErrorsby @varunagrawal in #1867 - precompiled_header.h: remove chartTesting.h by @valgur in #1870
- Faster DecisionTree by @dellaert in #1875
- Improve Linear Conjugate Gradient Method by @varunagrawal in #1876
- Refactor
NonlinearConjugateGradientOptimizerby @varunagrawal in #1877 - Additional Nonlinear CG Direction Methods by @varunagrawal in #1878
- Rosenbrock function for testing Nonlinear Conjugate Gradient Method by @varunagrawal in #1879
- Significant speedup by @dellaert in #1881
- Some Hybrid iSAM cleanup by @dellaert in #1883
- Two fundamental matrix classes by @dellaert in #1884
- TransferFactor with numerical derivatives by @dellaert in #1885
- EssentialTransferFactor by @dellaert in #1887
- F wrapper and bugfix by @dellaert in #1888
- Allow parent project to override options by @spacey-sooty in #1889
- Clean up Switching tests by @varunagrawal in #1892
- Lots of Hybrid Improvements by @varunagrawal in #1894
- Update MacOS Images for CI by @varunagrawal in #1895
- More comparisons by @dellaert in #1896
- Add missing #if for clang by @jlblancoc in #1897
- Reduce memory consumption during discrete pruning by @varunagrawal in #1898
- Bump min required cmake version to 3.9 by @jlblancoc in #1899
- Make operator-> const by @OznOg in #1900
- wrap BatchFixedLagSmoother.getFactors() by @truher in #1909
- Remove the asserts as they have already been checked in Eigen by @ProfFan in #1910
- Change the deprecated C++ enum math to constexprs by @ProfFan in #1911
- Updates based on profiling by @varunagrawal in #1912
- add error(HybridValues) to NonlinearFactor by @truher in #1913
- Add CMake switch for GPerfTools by @varunagrawal in #1917
- Document disabling tests and examples in INSTALL.md by @spacey-sooty in #1918
- Discrete Elimination Refactor by @varunagrawal in #1919
- Ring struct in a separate file by @varunagrawal in #1922
- Kalman filter update by @dellaert in #1924
- Make
DiscreteFactor::operator()a common base method by @varunagrawal in #1925 - Common Discrete Ops by @varunagrawal in #1926
- Various Discrete Improvements by @varunagrawal in #1927
- Endow NavState with group operations by @dellaert in #1930
- Left and Right SO(3) Jacobians by @dellaert in #1932
- Faster
TableFactor::toDecisionTreeFactorby @varunagrawal in #1933 - projection and SFM for 2d poses by @truher in #1934
- Better SE(3) and SE2(3) Jacobians by @dellaert in #1938
- Add
serialize()to various preintegration classes by @varunagrawal in #1939 - [cephes] use GTSAM_LIBRARY_TYPE by @mcm001 in #1942
- Various Improvements by @varunagrawal in #1943
- Improve build time when updating Boost flags by @varunagrawal in #1944
- Bump jinja2 from 3.1.4 to 3.1.5 in /wrap/pybind11/docs by @app/dependabot in #1945
- Add BUILD_SHARED_LIBS as a configurable option by @Gold856 in #1946
- Discrete Improvements by @varunagrawal in #1947
- Hybrid Timing by @varunagrawal in #1948
- TableFactor and TableDistribution by @varunagrawal in #1953
- TableFactor within Hybrid Elimination by @varunagrawal in #1954
- Customize discrete elimination in Hybrid by @varunagrawal in #1955
- Enable more warnings and remove unused variables by @mcm001 in #1959
- TableFactor Serialization by @varunagrawal in #1961
- DiscreteFactor multiply method by @varunagrawal in #1963
- Clean up CMake build by @Gold856 in #1964
- Platform specific
#ifs by @varunagrawal in #1966 - QNX Compatibility by @JaiXJM-BB in #1968
- Remove operator^ from Matrix and SubgraphPreconditioner by @calcmogul in #1969
- Add cassert include to Chebyshev2.cpp by @mcm001 in #1971
- Add missing test include for assert_inequal() by @calcmogul in #1973
- Adding lever-arm to GPS factors by @mnissov in #1975
- Faster SE(3) and SE_2(3) exponential maps by @dellaert in #1979
- add constrained optimizers by @yetongumich in #1980
- Reduce smart pointer copies in destructors by @mcm001 in #1983
- Marginalize Discrete Modes by @varunagrawal in #1985
- Improvements to Hybrid Inference by @varunagrawal in #1986
- City10000 dataset example by @varunagrawal in #1989
- Refactor jointBayesNet by @dellaert in #1991
- Better
HybridSmootherby @varunagrawal in #1996 - Update installation and build documentation for Windows & Python on Windows by @p-zach in #2000
- Silence a warning about a memcpy overread for gcc 13 by @jmackay2 in #2002
- move constructors by @dellaert in #2003
- Search for K-best solutions by @dellaert in #2005
- Search for k-best in factor graph by @dellaert in #2006
- Wrapper for DiscreteSearch by @dellaert in #2009
- Updates to City10000 Example by @varunagrawal in #2010
- kill expNormalize in favor of scale by @dellaert in #2011
- City1000 script by @dellaert in #2014
- Lots of savings! by @dellaert in #2016
- Re-linearization by @dellaert in #2017
- Python script for hybrid inference on City10000 dataset by @varunagrawal in #2019
- IMU factor with Gravity Estimation by @nkhedekar in #2020
- Set up MyST site deploy by @p-zach in #2021
- Add overviews for existing docs folders on MyST site by @p-zach in #2023
- Edit required check so that it doesn't hang when only non-code files modified by @p-zach in #2024
- Create doc ipynb for Rot2 by @p-zach in #2025
- Improvements to HybridCity10000 python script by @varunagrawal in #2027
- Add
cibuildwheelworkflow by @yambati03 in #2029 - Add Rot3 documentation by @p-zach in #2030
- Updated elaboratePoint2KalmanFilter.cpp example and easyPoint2KF bugfix by @mkielo3 in #2031
- Adds Jacobians to Lie::interpolate and others by @BrettRD in #2035
- Bugfix Bearing/Range Pose3toPose3 Jacobians by @DanMcGann in #2039
- Update Rot3 doc by @p-zach in #2041
- Deprecate
GTSAM_SLOW_BUT_CORRECT_EXPMAPby @varunagrawal in #2043 - Move scripts for building wheels to CI directory by @varunagrawal in #2044
- Hat and Vee by @dellaert in #2045
- Use
GTSAM_CONCEPT_USAGEin lieu ofBOOST_CONCEPT_USAGEby @varunagrawal in #2047 - Wrap Update by @varunagrawal in #2049
- More FrobeniusFactors by @dellaert in #2052
- Implement Equivariant Filter Bias example in Python by @jenniferoum in #2054
- Make docstring generation accessible by @p-zach in #2055
- Hybrid Updates by @varunagrawal in #2056
- Remove fixed values when keys are reintroduced in
newFactorsby @varunagrawal in #2061 - Nonlinear Hybrid Smoother by @varunagrawal in #2062
- Exposed ExtendedKalmanFilter to Python with examples by @mkielo3 in #2063
- CI using Docker by @suveergarg in #2065
- Python bindings: Enable use of Similarity2/Similarity3 in nonlinear optimization by @mhalber in #2067
- Clean up Ordering + headers by @dellaert in #2068
- Faster Chebyshev2 by @dellaert in #2069
- Wrap missing Chebyshev2 methods... by @dellaert in #2071
- Update wrap 0327 by @p-zach in #2076
- Discrete-Continuous Smoothing and Mapping by @varunagrawal in #2078
- Update Metis' cmake_minimum_required to 3.5 by @varunagrawal in #2079
- Doc generation with GPT by @p-zach in #2080
- AHRS docs and wrap by @dellaert in #2082
- Move IncrementalFixedLagSmoother from unstable to stable by @p-zach in #2083
- More navigation docs by @dellaert in #2084
- New docs: inference by @p-zach in #2087
- Remove static identity matrices in lago.cpp to avoid memory corruption in downstream tasks by @BITVoyager in #2091
- Trigger doxygen generation in
cibuildwheelby @yambati03 in #2092 - Add support for building MacOS wheels in
cibuildwheelby @yambati03 in #2093 - Update wrap by @yambati03 in #2094
- Bump minimum Ubuntu runner version to 22.04 by @yambati03 in #2095
- Add range SLAM example by @dellaert in #2096
- Update navbar by @p-zach in #2097
- Ordering doc update by @p-zach in #2098
- Revamped DexpFunctor and LogmapDerivative by @dellaert in #2099
- Docs minor updates by @p-zach in #2100
- Add
cibuildwheeltargets for MacOS Silicon by @yambati03 in #2102 - C++ example of an Equivariant filter by @darshan-17 in #2103
- Docs for symbolic folder by @dellaert in #2105
- Towards fixing Doxygen-to-docstring issues by @p-zach in #2107
- Add wrapper for imuBias in iSAM2 by @ProfFan in #2108
- Add production workflow for
cibuildwheelby @yambati03 in #2110 - New docs: SLAM by @p-zach in #2111
- An EKF Example by @dellaert in #2114
- Invariant EKF by @dellaert in #2115
- Fixed KarcherMean, LAGO, PlanarProjectionFactor by @dellaert in #2116
- Working rig ! by @dellaert in #2117
- (Update wrap) add functionality to pull docs from parent classes by @p-zach in #2118
- New docs: hybrid by @p-zach in #2120
- Adding Galilean3 Lie group by @mkielo3 in #2122
- Add script to clean up
gtsam-developproject releases by @yambati03 in #2123 - Smart factors docs by @dellaert in #2126
- Allow for dynamic M/G in new EKF variants by @dellaert in #2129
- Move testIncrementalFixedLagSmoother to
gtsamby @varunagrawal in #2132 - Wrap DiscreteMarginals by @varunagrawal in #2134
- Hybrid Improvements by @varunagrawal in #2135
- Discrete Sampling by @varunagrawal in #2136
- Update
samplemethods by @varunagrawal in #2137 - Add Multi RobotKeyFormatter as an external variable (Windows) by @DrWisdome in #2140
- docs: Add Invariant Kalman Filtering to navigation.md by @scottiyio in #2147
- Update navigation.md by @scottiyio in #2149
- Updated wrapper for HybridValues by @dellaert in #2150
- Markdown documentation draft PR for InvariantEKF by @scottiyio in #2151
- Wrap HybridBayesNet and HybridConditional methods by @dellaert in #2152
- Fixed SLAM Example link in Pose2 Doc by @CodeXTL in #2155
- Added user guide for
geometry/Cal3_S2by @CodeXTL in #2156 - Add template for IMU backend selection to move away from compiler flag by @p-zach in #2157
- Created jupyter notebook for the LQR example. by @zhangzdd in #2160
- Updated
Cal3_S2User Guide by @CodeXTL in #2163 - Add vcpkg ci by @talregev in #2164
- ROS package.xml: do not depend on boost by @jlblancoc in #2171
- Removed
dimensionfield fromCal3by @CodeXTL in #2178 - Updates to Similarity2 and Similarity3 by @dellaert in #2180
- Add GTSAM_USE_SYSTEM_PYBIND option and improve cache for vcpkg by @talregev in #2182
- Similarity2 and Similarity3 updates by @dellaert in #2183
- Add Gal3 wrapper and... by @dellaert in #2184
- Ported StereoVOExample by @CodeXTL in #2186
- MatrixLieGroup implementation and traits by @dellaert in #2187
- Updated Cal3DS2_Base python wrapper by @CodeXTL in #2188
- Add friendly instructions for custom wrapper extensions by @p-zach in #2189
- Bespoke vec methods by @dellaert in #2192
- Test both PIM variants by @dellaert in #2193
- Ported StereoVOExample_large and Edits to StereoVOExample by @CodeXTL in #2195
- iLQR example notebook by @zhangzdd in #2196
- EquivariantFilter and GroupAction by @jenniferoum in #2197
- Remove initial cov from CombinedImuFactor by @dellaert in #2199
- Added User Guides for
Cal3_S2StereoandStereoCameraby @CodeXTL in #2200 - Add DiscreteScenario by @p-zach in #2201
- Increase
maxIterationsin Cal3DS2_Base.cpp calibrate function by @steplee in #2204 - Add reference to wrap docs by @p-zach in #2206
- Add SL4 to geometry by @dellaert in #2207
- Concepts documentation and remove Dim/dim by @dellaert in #2209
- Refactor AHRSFactor by @dellaert in #2210
- Add Gal3 and SL4 docs by @dellaert in #2214
- refactor Gal3 + Analytical ExpmapDerivative by @dellaert in #2215
- Exclude windows tests by @talregev in #2220
- Remove cxx_flags by @talregev in #2223
- Kernels for SO3 by @dellaert in #2226
- Use Kernels, deprecate old methods by @dellaert in #2227
- Port eval to other repo by @p-zach in #2228
- CI Improvements for speed by @dellaert in #2229
- GalileanFactor ! by @dellaert in #2231
- Add gtsam unstable tests in vcpkg by @talregev in #2234
- FrobeniusBetweenFactorNL, and better noise API by @dellaert in #2236
- NavState + IMU EKF by @dellaert in #2242
- Remove metis and geographiclib ports from vcpkg ci by @talregev in #2244
- Remove outdated brew tap (was required for boost versions) by @ProfFan in #2245
- Add Gal3 wrapping by @dellaert in #2247
- Documented NonlinearOptimizerParams in the NonlinearOptimizer doc by @rafaelspring in #2250
- Gal3 IMU EKF class & header by @scottiyio in #2251
- Remove GeographicLib as a 3rd party vendor by @warrenyun in #2253
- Discrete docs by @dellaert in #2257
- More notebooks in discrete by @dellaert in #2258
- Add some more examples by @dellaert in #2259
- Exact zero-order hold IMU integration by @dellaert in #2261
- Formatting/naming in Nav by @dellaert in #2263
- ExtendedPriorFactor and ConcentratedGaussian by @dellaert in #2266
- temporary remove eigen3 from vcpkg by @talregev in #2267
- Enable and propagate /permissive- on MSVC by @Gold856 in #2268
- Add vcpkg compilation with gtsam in INSTALL.md doc by @talregev in #2269
- Remove python excluded tests on windows vcpkg by @talregev in #2271
- Update
wrapto latest with pybind11 3.0.1 by @ProfFan in #2277 - Add tests to ensure centripetal accel is dealt with properly for IMUs offset from body frame by @scottiyio in #2281
- Add GeographicLib to vcpkg by @talregev in #2282
- Cast Eigen::Matrix dimension type to int by @varunagrawal in #2284
- Documentation Updates by @Robert-Jia00129 in #2285
- Small example for bearing-range by @dellaert in #2286
- Use doublecross instead of cross(Cross(a, b)) in NavState by @scottiyio in #2287
- 6 More Python Examples + Standardized Notebook Format by @rohan-bansal in #2288
- Add back eigen3 to vcpkg by @talregev in #2289
- Added discrete_sreries example tutorial by @Robert-Jia00129 in #2290
- Remove temporary eigen3 by @talregev in #2293
- Remove cephes dllexport.h from cmake by @talregev in #2294
- [1/N] Split the NoiseModelFactorN to individual header by @ProfFan in #2301
- [2/N] Change NoiseModelFactorN to be an alias to NoiseModelFactorT by @ProfFan in #2302
- Update version to 4.3a1 by @dellaert in #2303
- Remove-macos-13-ci by @dellaert in #2304
- Remove absolute paths in configuration installs by @ethanmusser in #2308
- add python exports for SmartStereoProjectionFactor by @dvorak0 in #2313
- Various filter changes by @dellaert in #2315
- Added PowerLieGroup by @dellaert in #2316
- Added BayesTree cache clearing for Marginals by @travisdriver in #2318
- Remove try-catch from large tangent vector tests by @app/copilot-swe-agent in #2320
- MultifrontalSolver by @dellaert in #2327
- Address code review comments: documentation and naming conventions by @app/copilot-swe-agent in #2328
- JacobianFactor now compute the error more efficiently by first assembling the X vector by @ProfFan in #2329
- Bottom-up clique merging and TBB by @dellaert in #2330
- Handle noise and NonlinearEquality constraints by @dellaert in #2332
- Allow for HessianFactors in MultifrontalSolver by @dellaert in #2333
- Feature/marginals by @dellaert in #2334
- TBB for solve by @dellaert in #2336
- Cache optimization by @dellaert in #2339
- Optimize Levenberg Marquardt elimination by caching JunctionTree. by @tzvist in #2340
- Jacobian implementations for sim3 transformFrom by @akshay-krishnan in #2341
- Task scheduler and ForestTraversal by @dellaert in #2342
- Scheduled MultifrontalSolver by @dellaert in #2343
- Address code review feedback for PriorityScheduler and ForestTraversal by @app/copilot-swe-agent in #2344
- Two Schedulers - One very fast Solver by @dellaert in #2345
- range/bearing for NavState and Gal3 by @dellaert in #2346
- Parallel separator update in MFSolver by @dellaert in #2347
- Minimize the number of workflows by @varunagrawal in #2349
- Class for Pose3 trajectory alignment using Sim3 by @akshay-krishnan in #2351
- Address code review feedback for TrajectoryAlignerSim3 by @app/copilot-swe-agent in #2352
- Sampler updates by @dellaert in #2353
- perf: parallelize NonlinearFactorGraph::error computation. by @tzvist in #2355
- perf: TBB with memory growth control. by @tzvist in #2356
- Tiny perf improvements by @dellaert in #2358
- Add vcpkg mkl by @talregev in #2359
- switch Hat/Vee to orthonormal sl(4) basis and update adjoint/tests by @yluo5820 in #2360
- deltaError replaces 2 error calls by @dellaert in #2361
- Nonlinear multifrontal solver by @dellaert in #2362
- Default noise models and TranslationRecovery patch by @dellaert in #2363
- Revert linear solver type to MULTIFRONTAL_CHOLESKY by @akshay-krishnan in #2365
- sccache for all os in vcpkg by @talregev in #2367
- Expose EqF Python bindings (ABC), template on N, modify/add examples by @rohan-bansal in #2368
- Simple GNSS Pseudorange Factor by @masoug in #2369
- Run Windows CI workflow on push by @Gold856 in #2370
- Remove all Cephes source files except those needed for igami by @Gold856 in #2371
- EKF Reset by @dellaert in #2373
- Docs for basis by @dellaert in #2375
- Small issues in examples by @dellaert in #2376
- Standardize on KeySet by @dellaert in #2377
- Introducing DifferentialPseudorangeFactor by @masoug in #2383
- Add continuous benchmarking workflow by @ProfFan in #2385
- Use vcpkg manifest by @Gold856 in #2388
- Constrained docs by @dellaert in #2394
- Update SFMBAL benchmark script by @ProfFan in #2397
- NavState docs by @dellaert in #2398
- Clean up Boost dependencies by @Gold856 in #2399
- Clean up and speed up CI by @Gold856 in #2400
- removed unnecessary DiscreteKeys constructor by @aminoh in #2402
- Remove macOS 14 from CI by @Gold856 in #2406
- Optimize cibuildwheel build times by @Gold856 in #2407
- iSAM2 Updates to Support riSAM Implementation by @DanMcGann in #2408
- Robust Incremental Smoothing and Mapping (riSAM) by @DanMcGann in #2409
- Allowing Non Noise Model Factors for Gnc by @hkhanuja in #2410
- Continuous-Time Gaussian Process Factors (Factors and Interpolation) by @holmesco in #2411
- Weight update in Gnc GM through static function in LossFunctions by @hkhanuja in #2415
- Extended Pose SE_k(3) by @dellaert in #2416
- TLS loss and Rene Vidal TLS implementation by @hkhanuja in #2417
- Harmonize Ad/ad by @dellaert in #2418
- Address PR #2418 review feedback: SWIG Jacobians, trait-based dim, AdjointMap perf note by @app/copilot-swe-agent in #2419
- TrajectoryAlignerSim3 - add point3 constraints if available, optionally use GNC by @akshay-krishnan in #2445
- Add SphericalCamera Python bindings by @inuex35 in #2446
- Add PseudorangeFactorArm and DifferentialPseudorangeFactorArm by @inuex35 in #2447
- Add BAL SmartFactor example by @dvorak0 in #2449
- variable dimension product groups by @dellaert in #2450
- Remove benchmark caching by @ProfFan in #2451
- Reduce wheel CI flakiness by @dellaert in #2452
- Wrap DCSAM class and remove hybrid examples by @varunagrawal in #2454
- Add EqVIO Group, Manifold Foundation by @rohan-bansal in #2455
- Use internal MyST links in published docs by @dellaert in #2458
- Hybrid improvements by @varunagrawal in #2459
- Move free functions definitions to
GncOptimizer.cppby @varunagrawal in #2461 - Reject negative sigma values in noise model constructors by @jashshah999 in #2465
- 4 legged state estimators by @dellaert in #2470
- Rename Python reserved keywords in wrapper interface files by @jashshah999 in #2471
- EqVIO Filter Implementation by @rohan-bansal in #2475
- Steiner trees for Covariance Recovery by @dellaert in #2476
- Add optional ecef_T_nav to PseudorangeFactorArm for GNSS/IMU coupling by @inuex35 in #2477
- Simplify Marginals and add docs by @dellaert in #2482
- [codex] Move covariance recovery into GaussianBayesTree and expose ISAM2 queries by @dellaert in #2486
- MATLAB CustomFactor by @dellaert in #2491
- numerical derivatives in MATLAB by @dellaert in #2493
- Add group action param to Product Lie Group by @rohan-bansal in #2494
- Added GlobalPositioner Class by @kathirgounder in #2495
- Add missing templates in wrapper by @dellaert in #2496
- [codex] Refactor RangeFactor to remove expression overhead by @dellaert in #2497
- Simplify SAM factors by @dellaert in #2498
- Generalize AttitudeFactor by @dellaert in #2499
- New CustomFactor examples by @dellaert in #2501
- feat: double difference factor for rtk gnss by @inuex35 in #2502
- Geometry enhancements by @dellaert in #2503
- Add python wrapper and test for LocalOrientedPlane3Factor by @SchmidL in #2507
- feat(isam2): adaptive variable reordering triggered by fill-in growth by @jashshah999 in #2509
- perf(linear): compute JacobianFactor::gradient() directly, skip HessianFactor conversion by @jashshah999 in #2510
- Continuous Time GP Factor Graph by @holmesco in #2514
- navigation: honor configured IMU bias in LeggedFixedLagSmoother by @ChiyunNoh in #2515
- Images from ChatGpt by @dellaert in #2518
- perf(python): return references from optimizer to avoid deep-copying Values by @jashshah999 in #2520
- WNOA CT-GP Bindings and Example by @holmesco in #2523
- Factor for yaw in Pose2, with bias by @truher in #2524
- LP and QP by @dellaert in #2525
- Add QCQP by @dellaert in #2526
- LP/QP/QCQP wrapper and examples by @dellaert in #2527
- Use sccache for Windows Python jobs by @Gold856 in #2530
- Remove unused Boost dependencies by @Gold856 in #2532
- More edits for gcc 13 by @kshaji3 in #2538
- Modify for QCQP support for the BM methods. by @zhexin1904 in #2541
- cmake: disable Boost by default when building inside colcon (ROS 2) by @jlblancoc in #2543
- [Python] Add venv setup instructions for PEP 668 systems in README by @zcjhao in #2546
- DecisionTree::dot(name, ...): skip system() shellout on iOS by @ShuangLiu1992 in #2547
- Add FromQcqpValue (Rot2/Rot3) and ExtractQcqpValues helpers in feature/convert_to_QCQP by @zhexin1904 in #2548
- WIP: add homogenization term to D = 1 lifting to QCQP factor by @avinashresearch1 in #2549
- Add QCQP factor graph conversion by @dellaert in #2550
- Copy-free matrix views for wrapped batch APIs by @dellaert in #2551
- feat(python): Expose BetweenFactor to Python wrapper by @SidArora29 in #2554
- Optimize compile times by @Gold856 in #2561
- feat(python): expose PriorFactor to Python wrapper by @SidArora29 in #2562
- Add SelfCalibrationFactor for closed-form focal-length self-calibration by @kathirgounder in #2568
- Generic TangentGroup TG from action-parameterized ProductLieGroup by @AlessandroFornasier in #2570
- [Python] Add batch triangulateSafe supporting incomplete tracks by @zcjhao in #2573
- navigation: route undifferenced GNSS factors through Sagnac-corrected geodist (#2563) by @inuex35 in #2574
- navigation: add undifferenced (PPP) pseudorange and carrier-phase factors by @inuex35 in #2575
- Add compiler hash to vcpkg cache key by @Gold856 in #2577
- Clean up headers/includes and refresh precompiled headers by @Gold856 in #2578
- Remove aligned operator new macro by @Gold856 in #2579
- Add experimental CUDA SFM bundle adjustment optimizer by @leolrg in #2581
- [codex] Automate PyPI develop cleanup by @dellaert in #2583
- BatchFactor by @dellaert in #2586
- Sync/update wrap subtree by @thatdudegrantt in #2587
- navigation: add GNSS Doppler (range-rate) factors by @inuex35 in #2589
- Link cephes-gtsam against libm by @hz2 in #2590
- Use Matrix initializer_list constructor instead of comma initializers by @Gold856 in #2591
- Clarify JointMarginal::at()/operator() indexing semantics (Key, not position) by @thatdudegrantt in #2592
- CUDA GNC: run GncOptimizer with the CUDA SFM LM inner solver, ~20x over CPU GNC by @leolrg in #2593
- Fixed lag and python by @bboyack in #2599
- Avoid recursive separator marginal caching for deep Bayes trees by @admin123-abc in #2600
- Notebooks by @zcjhao in #2604
- Implements monolithic and chordal SDP from QCQP intermediate by @avinashresearch1 in #2606
- Add pragmas for GCC 16 warnings by @mjelen2 in #2607
- Add certifiable module and Riemannian Staircase solver by @dellaert in #2608
- Lifting Rot3, Pose2 and Pose3 to QCQP (for D = 1) and monolithic/chordal SDP including recovery and examples. by @avinashresearch1 in #2609
- Modernize installation and repository guidance by @dellaert in #2611
- New wrap and MOSEK wrapping by @dellaert in #2612
- Certifiable Wahba Problem and Landmark Localization by @avinashresearch1 in #2616
- Speed up geometry by @dellaert in #2617
- Update version to 4.3a2 by @dellaert in #2618
- Clean up Doxygen generation and speed up Python CI by @dellaert in #2619
- Refine certifiable QCQP recovery, examples, and Python docs by @dellaert in #2623
- Try preventing vcpkg resource exhaustion by @Gold856 in #2624
- PsyCh Example by @dellaert in #2625
- Optimize ProductLieGroup and tangent-group Jacobians by @dellaert in #2627
- Accelerate iterative PCG with parallel matrix-free operators by @ProfFan in #2628
- METIS: Avoid redundant system linking & use public API for separator partitioning by @ilkecan in #2631
- Allow using system-installed Spectra by @ilkecan in #2632
- Speed up PR CI with nightly compatibility matrices by @dellaert in #2633
- Add templated FAST-Sync initializer by @dellaert in #2634
- Preserve joint marginal query key order by @dellaert in #2636
- Run no-Boost C++ tests in required Python CI by @dellaert in #2637
- Refactor timimg by @dellaert in #2638
- Initialize Shonan averaging with FAST-Sync by @dellaert in #2639
- Build examples in nightly C++ CI by @dellaert in #2640
- Refactor smart projection factors around shared base by @dellaert in #2641
- Handle constrained components in ISAM2 gradients by @dellaert in #2643
- Deprecate legacy unstable IMU state APIs by @dellaert in #2644
- Update bundled pybind11 to 3.0.4 by @dellaert in #2647
- Remove orphaned KITTI MATLAB examples by @dellaert in #2648
- Rename indeterminate system exception and add debugging guide by @dellaert in #2649
- Document covariance frames for between and prior factors by @dellaert in #2650
- Automatically linearize fixed-size binary and ternary factors by @dellaert in #2652
- Use normalized all-pivot Cholesky checks by @dellaert in #2653
- Avoid Rot2 reference-to-value returns on ARM64 by @dellaert in #2659
- Enable correct Lie-group Jacobians in Prior/Between by default by @dellaert in #2661
- Materialize Shonan certificate product by @dellaert in #2665
- Use the README infographic for the website splash by @dellaert in #2669
- Add Frobenius factor support to FastSync by @dellaert in #2671
- Prototype generic BM rotation averaging by @dellaert in #2672
- Upgrade GitHub Actions for Node 24 by @dellaert in #2674
- Optimize QCQP construction for generic BM by @dellaert in #2675
- Prefer system SuiteSparse with a namespaced CCOLAMD fallback by @ProfFan in #2676
- Add Pose2 tangent Logmap derivative overload by @dellaert in #2677
- Add gyroscope integration helpers by @dellaert in #2678
- docs: explain IMU integration covariance by @suhaslord in #2680
- Remove vendored Ceres and use system Ceres for timing targets by @ProfFan in #2681
- Refactor AHRS and IMU preintegration hierarchy by @dellaert in #2682
- Add unified ALM update policies with paper-inspired BCL by @dellaert in #2684
- Suppress GCC 16 Spectra false positive by @ProfFan in #2685
- Avoid recursive BayesTree serialization stack overflow by @dellaert in #2686
- Add NavState Lie-group IMU preintegration by @dellaert in #2687
- Use exact rotating-Earth dynamics in IMU prediction by @dellaert in #2688
- Lie-group aware differentiable spline curves (supersedes #2212) by @dellaert in #2689
- Improve batch-factor and LM optimization hot paths by @dellaert in #2691
- Add flat Gaussian-factor kernels and BAL smart/PCG benchmarks by @dellaert in #2693
- Assemble compact point-batch sparse Schur systems by @dellaert in #2694
- Add an optional CHOLMOD backend for compact BAL Schur systems by @dellaert in #2695
- Document MultifrontalSolver and the linear module by @dellaert in #2698
- Align Python wrapper declarations with C++ APIs by @dellaert in #2699
- Remove deprecated Coriolis flag usage from examples by @dellaert in #2701
- Enhance EquivariantFilter with error coordinate handling and matrix output by @arihantb2 in #2702
- Gate IMU Jacobian finite-difference step for quaternions by @dellaert in #2704
- Do not install vendored pybind11 if we use the system build by @ProfFan in #2705
- Add CUDA nonlinear optimization with cuDSS and PCG backends by @leolrg in #2706
- wrap: declare navigation factors under NoiseModelFactor by @DLuminary in #2707
- wrap: expose adaptive reorder settings and Bayes tree fill-in by @DLuminary in #2708
- wrap: complete targeted single-key calculateEstimate coverage by @DLuminary in #2709
- Generalize fixed-size Jacobian factors to arbitrary arity by @dellaert in #2710
- wrap: expose noise model introspection and Robust accessors by @DLuminary in #2711
- Make JacobianVector opaque for every module fragment by @DLuminary in #2712
- Adding certifiable estimation applications by @zhexin1904 in #2713
- Corrects authorship note in AI generated file CardinalSplineBasis.h by @BrettRD in #2717
- wrap: complete the fixed-lag smoother state accessors by @DLuminary in #2720
- Expose the remaining per-update key sets on ISAM2Result by @DLuminary in #2721
- Move CUDA SFM implementation and docs into sfm by @dellaert in #2722
- Deprecate stale gtsam_unstable APIs by @dellaert in #2724
- Add system libraries CI workflow by @dellaert in #2726
- Add public CPU and CUDA SFM solver paths by @dellaert in #2727
- Add sparse AllDiff support for hybrid inference by @dellaert in #2728
- Speed up discrete multiplication with generic TableFactor conversion by @dellaert in #2729
- Deduplicate variable layout metadata around KeyInfo by @leolrg in #2730
- Revamp MATLAB bindings and wrapper interfaces by @ProfFan in #2731
- Expose ISAM2 update params in ConcurrentIncrementalFilter by @dellaert in #2733
- Speed up SO3::Logmap by @DLuminary in #2735
- Promote discrete constraints to stable API by @dellaert in #2736
- Declare Python wrapper types before binding methods by @ProfFan in #2737
- Move misplaced headers to canonical modules by @dellaert in #2738
- Remove using namespace std from header by @B-Leslie in #2742
- Reduce duplicated linear solver internals by @dellaert in #2743
- Use Clang 14 for nightly Python build by @ProfFan in #2744
- Use hybrid TBB gathering for multifrontal parent updates by @dellaert in #2745
- Consolidate multifrontal block update plumbing by @dellaert in #2746
- Expose METIS random seed on Ordering::Metis by @SamanyuB910 in #2747
- Aggregate non-TBB leaf traversal tasks by @dellaert in #2748
- Avoid full parent scratch matrices without TBB by @dellaert in #2751
- Add g2o 3D landmark dataset support by @dellaert in #2754
- Wrap PIM backends through template interface by @dellaert in #2757
- Bring Galilean PIM in line with templated IMU preintegration by @dellaert in #2759
- Clarify certifiable localization notebook by @dellaert in #2760
- Add Python bindings for general CUDA Levenberg-Marquardt by @leolrg in #2761
- Remove duplication: Consolidate gravity magnitude resolution and reject PIMs without params by @nkhedekar in #2762
- Add ImuFactor2WithGravity: NavState-based gravity-aware IMU factor by @nkhedekar in #2763
- Optimize shared IMU prediction and factor linearization by @dellaert in #2764
- Optimize IMU measurement integration by @dellaert in #2765
- Add combined Galilean IMU factor by @dellaert in #2766
- Add wrapped API walkthrough notebooks by @dellaert in #2767
- Handle a timestamp supplied for a key with no value and no factor by @DLuminary in #2769
- Tolerate a missing timestamp in FixedLagSmoother::eraseKeyTimestampMap by @DLuminary in #2770
- Update Galilean IMU factor notebooks by @dellaert in #2771
- Add sam, sfm, and slam API walkthrough notebooks by @dellaert in #2772
- Default IMU factor errors to SE_2(3) Logmap by @dellaert in #2774
- Avoid full covariance construction in Gaussian::sigmas() by @owenbales in #2775
- Reuse matrix-vector products in PowerMethod::compute() by @owenbales in #2776
- python: ship a PEP 561 py.typed marker by @DLuminary in #2777
- CustomFactor: make the jacobian argument optional in its own type by @DLuminary in #2778
- ci: generate gtsam_unstable stubs when building wheels by @DLuminary in #2780
- Reject timestamps without corresponding values in IncrementalFixedLagSmoother by @talfeiner-mc in #2781
- Support left group actions in EquivariantFilter by @DLuminary in #2783
- Add D=1 MOSEK support to certifiable applications by @dellaert in #2784
- Reset adaptive LM rejection multiplier after accepted steps by @ProfFan in #2786
- Add Python bindings for CUDA GNC optimizers by @leolrg in #2787
- Move CUDA linear solver guide into doc directory by @dellaert in #2788
- Add Values::extract(keys) and calculateEstimate(keys) for subset extraction by @DLuminary in #2790
- Report expired pending keys in FixedLagSmoother::Result by @DLuminary in #2791
- Update wrap to have proper stub generation for C++ std::function callables by @ProfFan in #2794
- Anchor smart PCG regression camera and baseline by @dellaert in #2795
- Reduce iSAM2 update overhead and make tree statistics opt-in by @dellaert in #2800
- Share homogeneous coordinates in MOSEK SDP transcription by @dellaert in #2802
- Organize Python notebook examples by GTSAM module by @dellaert in #2803
- Prepare documentation and ROS colcon defaults for 4.3 by @dellaert in #2804
- Expose MOSEK SDP solvers in MATLAB by @dellaert in #2805
Full Changelog: 4.2.0...4.3.0