Release 4.3a1
Pre-release🚀 GTSAM 4.3a1 is a major incremental release featuring:
• Significant documentation expansion and new docs site
• New Lie groups, kernels, and IMU EKF infrastructure
• Strong Hybrid, Discrete, and Navigation improvements
• Broad Python wrapping advances
• A large number of bug fixes, CI upgrades, and toolchain improvements
• We removed GeographicLib as a 3rd party vendor
🧰 Core Features & New Math
• Matrix Lie Group infrastructure (MatrixLieGroup, traits, kernels) and SO(3) kernels.
• New Lie groups: Gal3, SL4, major updates to Similarity2/3.
• ExtendedPriorFactor, ConcentratedGaussian, FrobeniusBetweenFactorNL.
• Exact Zero-Order Hold IMU integration, centripetal-accel tests, and NavState + IMU EKF.
• Gal3 IMU EKF implementation.
• Constrained optimizers added.
• Discrete-Continuous Smoothing and Mapping.
• DiscreteScenario framework.
📚 Documentation & Examples
• Major docs refresh: navigation, discrete, geometry (Cal3_S2, Cal3DS2_Base, Cal3_S2Stereo, StereoCamera), concepts, IMU EKF, Invariant EKF draft.
• New notebooks: LQR, iLQR, discrete examples, Python examples, standardized formats.
• Ported StereoVOExample (small & large), added small bearing-range example.
• Many contributions from new authors throughout.
🧩 Wrapping & Python
• Large set of wrap updates: HybridValues, HybridBayesNet/HybridConditional, Cal3DS2_Base, Gal3, SL4, Similarity2/3, more.
• Added GTSAM_USE_SYSTEM_PYBIND, updated to pybind11 3.0.1.
• Added templates for IMU backend selection (no compiler flags).
• Improved custom wrapper extension instructions.
• Fixed python wheel building.
🔧 Bug Fixes & Cleanup
• Removed static identity matrices in LAGO (memory-safety fix).
• Fixed memory bugs in Hybrid tests.
• Fixed constructor reset issues, bias handling, IMU factors example, preintMeasCov reset.
• Many compile-warning cleanups across GCC/Clang/MSVC.
• Fixed shadowed operators, size_t misuse for Key, Eigen5 compatibility, and misc timing issues.
• Removed obsolete fields in Cal3, dimensional cleanup.
• Numerous link and doc fixes (Pose2 docs, README, notebooks).
• Eliminated outdated brew taps, cephes linking issues, and boosted robustness of discrete modules.
🏗️ CI, Build, and Tooling
• Massive CI overhaul: vcpkg improvements, sccache for Windows, Docker-based CI, faster pipelines.
• Added vcpkg CI, fixed macOS build, improved cache, reinstated eigen3.
• Windows: /permissive- enabled, excluded flaky tests, fixed single-exe linking.
• Removed dependency on Boost in ROS package.xml.
• Introduced QP tests without Boost.
• Better timing with TBB and GCC fixes.
• Added logs-on-failure, fixed merge CI, updated INSTALL docs.
Full change list
- (Update wrap) add functionality to pull docs from parent classes by @p-zach in #2118
- docs: Add Invariant Kalman Filtering to navigation.md by @scottiyio in #2147
- Update navigation.md by @scottiyio in #2149
- Discrete-Continuous Smoothing and Mapping by @varunagrawal in #2078
- Updated wrapper for HybridValues by @dellaert in #2150
- Fix paths in notebooks by @dellaert in #2153
- Wrap HybridBayesNet and HybridConditional methods by @dellaert in #2152
- Remove static identity matrices in lago.cpp to avoid memory corruption in downstream tasks by @BITVoyager in #2091
- Fixed SLAM Example link in Pose2 Doc by @CodeXTL in #2155
- Fix compiler warning of operator being shadowed by @ProfFan in #2158
- Added user guide for
geometry/Cal3_S2by @CodeXTL in #2156 - Fix misuses of
size_tforgtsam::Keyby @ProfFan in #2162 - Updated
Cal3_S2User Guide by @CodeXTL in #2163 - add constrained optimizers by @yetongumich in #1980
- Add vcpkg ci by @talregev in #2164
- Fix for Issue #2161 in borglab/gtsam by @DanielChaseButterfield in #2168
- Add template for IMU backend selection to move away from compiler flag by @p-zach in #2157
- Hybrid Fixes by @varunagrawal in #2170
- Markdown documentation draft PR for InvariantEKF by @scottiyio in #2151
- ROS package.xml: do not depend on boost by @jlblancoc in #2171
- Updated
geometry.mdand Minor Fixes by @CodeXTL in #2172 - Fix constructor preintMeasCov reset by @p-zach in #2174
- 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
- Add friendly instructions for custom wrapper extensions by @p-zach in #2189
- Updated Cal3DS2_Base python wrapper by @CodeXTL in #2188
- Ported StereoVOExample by @CodeXTL in #2186
- Fix Memory bug in Hybrid Tests by @dellaert in #2194
- Test both PIM variants by @dellaert in #2193
- Fix timing if no boost by @dellaert in #2191
- MatrixLieGroup implementation and traits by @dellaert in #2187
- Bespoke vec methods by @dellaert in #2192
- Ported StereoVOExample_large and Edits to StereoVOExample by @CodeXTL in #2195
- Added User Guides for
Cal3_S2StereoandStereoCameraby @CodeXTL in #2200 - Remove initial cov from CombinedImuFactor by @dellaert in #2199
- Increase
maxIterationsin Cal3DS2_Base.cpp calibrate function by @steplee in #2204 - Fix examples using biasAccOmegaInt by @varunagrawal in #2205
- Add DiscreteScenario by @p-zach in #2201
- Add reference to wrap docs by @p-zach in #2206
- Created jupyter notebook for the LQR example. by @zhangzdd in #2160
- iLQR example notebook by @zhangzdd in #2196
- 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
- Fix all compile warnings on ubuntu_latest by @dellaert in #2217
- Exclude windows tests by @talregev in #2220
- Remove cxx_flags by @talregev in #2223
- Fix single exe linking by @dellaert in #2224
- Kernels for SO3 by @dellaert in #2226
- Use Kernels, deprecate old methods by @dellaert in #2227
- CI Improvements for speed by @dellaert in #2229
- Fix Boost and badges by @dellaert in #2232
- Port eval to other repo by @p-zach in #2228
- Add gtsam unstable tests in vcpkg by @talregev in #2234
- FrobeniusBetweenFactorNL, and better noise API by @dellaert in #2236
- Remove outdated brew tap (was required for boost versions) by @ProfFan in #2245
- Update README.md: fix minimum cmake version by @jlblancoc in #2243
- Remove metis and geographiclib ports from vcpkg ci by @talregev in #2244
- Fix CI on merge by @dellaert in #2246
- Add Gal3 wrapping by @dellaert in #2247
- NavState + IMU EKF by @dellaert in #2242
- Fix building of python wheels by @dellaert in #2248
- Documented NonlinearOptimizerParams in the NonlinearOptimizer doc by @rafaelspring in #2250
- Bug fix imu factors example by @jaffarrell in #2254
- Discrete docs by @dellaert in #2257
- Fix tests and simplify Windows CI by @Gold856 in #2256
- More notebooks in discrete by @dellaert in #2258
- Add some more examples by @dellaert in #2259
- Fix vcpkg macos. Upload vcpkg logs on failure by @talregev in #2262
- Fix CI and run non-boost QP tests by @dellaert in #2260
- Exact zero-order hold IMU integration by @dellaert in #2261
- Formatting/naming in Nav by @dellaert in #2263
- Gal3 IMU EKF class & header by @scottiyio in #2251
- temporary remove eigen3 from vcpkg by @talregev in #2267
- Remove GeographicLib as a 3rd party vendor by @nebudev14 in #2253
- Add GeographicLib to vcpkg by @talregev in #2282
- ExtendedPriorFactor and ConcentratedGaussian by @dellaert in #2266
- Use sccache to cache Windows release builds by @Gold856 in #2274
- Add tests to ensure centripetal accel is dealt with properly for IMUs offset from body frame by @scottiyio in #2281
- Update
wrapto latest with pybind11 3.0.1 by @ProfFan in #2277 - Remove python excluded tests on windows vcpkg by @talregev in #2271
- Add vcpkg compilation with gtsam in INSTALL.md doc by @talregev in #2269
- Fix compatibility for Eigen 5.0.0 by @cybaol in #2265
- 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
- CI using Docker by @suveergarg in #2065
- Fix cephes static linking by @Gold856 in #2273
- 6 More Python Examples + Standardized Notebook Format by @rohan-bansal in #2288
- Enable and propagate /permissive- on MSVC by @Gold856 in #2268
- Add back eigen3 to vcpkg by @talregev in #2289
- Remove temporary eigen3 by @talregev in #2293
- Remove cephes dllexport.h from cmake by @talregev in #2294
- Fix timing with TBB and a minor GCC bug by @ProfFan in #2296
New Contributors
- @BITVoyager made their first contribution in #2091
- @CodeXTL made their first contribution in #2155
- @DanielChaseButterfield made their first contribution in #2168
- @steplee made their first contribution in #2204
- @zhangzdd made their first contribution in #2160
- @rafaelspring made their first contribution in #2250
- @jaffarrell made their first contribution in #2254
- @nebudev14 made their first contribution in #2253
- @cybaol made their first contribution in #2265
- @suveergarg made their first contribution in #2065
- @rohan-bansal made their first contribution in #2288
Full Changelog: 4.3a0...4.3a1