Changelog
This page summarizes the most important changes on the main branch of Holistic Fusion, newest first.
Smaller fixes are not listed here; see the commit history for details.
2026
September 2026: Switch to GTSAM 4.3.0 (PR #46)
GTSAM 4.3.0 is now the required version.
holistic_fusionusesfind_package(GTSAM 4.3 REQUIRED); GTSAM 4.2 is no longer supported. The Docker images (docker/submodules/gtsam.sh) and the installation instructions build GTSAM 4.3.0 (tests and examples disabled to speed up the build). GTSAM 4.3 needs CMake >= 3.20, Eigen >= 3.4, a compiler newer than gcc 9 and (if enabled) oneTBB; the Noetic (Ubuntu 20.04) Docker image therefore installs a newer CMake (pip), Eigen 3.4.0 (into/usr/local) and gcc-10 (now the default compiler of that image) and builds GTSAM without TBB. Ubuntu 22.04 (Humble) already ships suitable versions.No more Boost in
holistic_fusion. Allboost::optional,boost::shared_ptrandboost::filesystemusages were replaced by their C++17 standard-library counterparts, following GTSAM’s own move away from Boost. Public signatures affected (only if you call them from your own code):UnaryMeasurementAbsolute/UnaryMeasurementXDAbsolute: the optional alignment noise arguments are nowstd::optional<Eigen::Matrix<double, 6, 1>>(passstd::nulloptinstead ofboost::none).FileLogger::writePose3ToCsvFileandholistic_fusion::writePose3ToCsvFile: the optional covariance argument is now astd::optional<Eigen::Matrix<double, 6, 6>>.
gtsam_unstableis no longer needed. The fixed-lag smoothers used byholistic_fusionmoved into the stable GTSAM library in 4.3, soholistic_fusion,holistic_fusion_catkinand the exported CMake config only depend ongtsamnow.All ROS 1 packages compile as C++17. GTSAM 4.3 headers require C++17;
pure_imu_integrationandexcavator_holistic_graphwere still built as C++14 and now use C++17 like the other packages.Custom factors use the new GTSAM factor API.
YawFactor,PitchFactorandRollFactorderive fromgtsam::NoiseModelFactorN<gtsam::Pose3>and implementevaluateError(const Pose3&, gtsam::OptionalMatrixType).Config change (breaking): Earth-rotation / Coriolis parameters. The IMU noise parameters
use2ndOrderCoriolisandomegaCorioliswere removed and replaced byearthRotationCompensation(bool): use GTSAM’s exact rotating-frame IMU model,latitudeDeg(double): geodetic latitude, from which the Earth-rate vector is computed (Ω = 7.2921159e-5 rad/s),worldFrameNorthAligned(bool): set totrueonly if the y-axis of the world frame points north (ENU); then the horizontal Earth-rate component Ω·cos(lat) is used in addition to the vertical one Ω·sin(lat).
Reasons: with GTSAM 4.3,
use2ndOrderCoriolishas no effect anymore (the exact model is used whenever a rotation rate is set), and the previous example valueomegaCoriolis: 1.07e-04was the meteorological Coriolis parameter 2·Ω·sin(lat), i.e. twice the vertical Earth-rate component that GTSAM expects (5.4e-05 rad/s for Zurich). Since GTSAM 4.3 also compensates the Earth rate in the attitude integration, the old value would have acted like a 0.003 deg/s yaw-rate bias. Old config files fail to load until the two parameters are replaced.Behavioural notes (from GTSAM itself, no change in Holistic Fusion needed):
BetweenFactor/PriorFactornow use the Lie-group (local) Jacobians by default, the SO(3)/SE(3) exponential and logarithm maps have been reworked, and iSAM2 /IncrementalFixedLagSmootherreceived marginalization fixes. Expect slightly different (generally better) numerical results compared to GTSAM 4.2.IMU preintegration: whenever a navigation-frame rotation rate is set (see the config change above), GTSAM 4.3 uses the exact rotating-frame dynamics (Coriolis and centrifugal accelerations and Earth-rate compensation of the attitude).
Noise models are validated more strictly (e.g. negative sigmas throw).
September 2026: T-RO publication and new project page
Paper published in IEEE Transactions on Robotics (T-RO), new project page and updated links (PR #44, #45).
Bugfix: the optimization thread is now properly terminated on destruction (PR #43).
July 2026: Local velocity factors for moving sensor frames
The local velocity unary factor supports moving (non-rigid) sensor frames (PR #39) and makes the gyroscope bias observable through the lever-arm term (PR #38).
2025
Summer 2025: ROS 2 support and build-system separation
holistic_fusionbecame a pure CMake library, independent of the build system. Thin wrapper packages (holistic_fusion_catkinfor ROS 1, ament/colcon support for ROS 2) expose it to the respective workspaces.New ROS 2 (Humble) integration layer
holistic_fusion_ros2and thesmb_estimator_graph_ros2example (PR #12 and follow-ups).Docker images and CI for both ROS 1 Noetic and ROS 2 Humble.