Ultra-Fusion: a tightly-coupled multi-sensor SLAM framework for sensor degradation
Ultra-Fusion: A Resilient Tightly-Coupled Multi-Sensor Fusion SLAM Framework under Sensor Degradation and Spatiotemporal Perturbation
At a glance
- What is it?
- Ultra-Fusion is an MIT-licensed SLAM framework from SJTU that runs WIO, VIO, LIO and LVIO inside one sliding-window optimizer on ROS1 Noetic or ROS2 Humble. Its pitch is resilience to degraded sensors and miscalibration, and its install path is a pre-built Debian package.
- Who is it for?
- Adopt Ultra-Fusion if you already run ROS1 Noetic or ROS2 Humble and need one estimator that covers WIO, VIO, LIO and LVIO with wheel and GNSS factors, and if you can live with amd64-only Debian assets and a single documented dataset path. Do not adopt it if you need an officially documented arm64 build, a native installation recipe spelled out end to end, or a project that publishes a support window.
- Can I use it commercially?
- Yes. MIT is a permissive licence: you can use, modify and sell software built on it, as long as you keep its copyright and licence notices.
- Is it still maintained?
- Yes. The repository last received commits 22 days ago.
- What is it written in?
- Mainly Shell, according to GitHub's language statistics.
Answers come from the project's GitHub data, last synced on September 17, 2026, and from our analysis. They are not legal advice.
DEEP OPEN-SOURCE ANALYSIS
What Ultra-Fusion actually solves for ITS deployments
Most SLAM stacks are written around one sensor suite. A LiDAR-inertial pipeline assumes the LiDAR keeps returning structure. A visual-inertial pipeline assumes the camera keeps seeing texture. Ultra-Fusion starts from the opposite assumption: that on a real vehicle, illumination drops, LiDAR degenerates in a corridor or open plaza, wheels slip, and GNSS disappears, sometimes in the same run. The README frames this as sensor degradation plus spatiotemporal miscalibration, and names intelligent transportation systems as the target domain.
The audience is narrower than the abstract suggests. This is for robotics engineers who already have a robot, already have a ROS graph publishing sensor streams, and want one estimator they can reconfigure rather than four codebases they have to maintain. The README states the framework was validated on wheeled, legged and aerial platforms, and lists five public benchmarks including M3DGR, M2DGR-Plus, KAIST Complex Urban and GrandTour. If you are building a first SLAM prototype from scratch, the configuration surface here is more than you need.
One sliding-window optimizer behind WIO, VIO, LIO and LVIO
The mechanism the README describes is factor-based. Asynchronous sensor streams are timestamp-ordered and converted into optional factors inside a single sliding-window optimizer, which shares state representation, marginalization and calibration logic across all fusion modes. The word optional is doing real work: WIO, VIO, LIO and LVIO are not four separate binaries but four configurations of the same estimator, with wheel and GNSS fusion as additional factors and online calibration running alongside.
That design has a visible consequence. Because calibration is a state in the same window rather than a preprocessing step, the framework can absorb extrinsic errors and timing delays at runtime, which is what the spatiotemporal perturbation in the paper title refers to. It also means a bad extrinsic prior is not isolated to one sensor: it propagates through the shared window. The README does not document a way to freeze calibration and diagnose a single sensor in isolation, so debugging a misbehaving camera means reasoning about the coupled estimate.
The pipeline image in the repository shows four named stages: initialization, reliability scheduling, online calibration, and multi-modal fusion. The README does not define what reliability scheduling does internally, so treat that box as a black box until you read the paper at arXiv 2606.21223.
Installing Ultra-Fusion from the Debian assets
The README marks Docker installation as recommended, but the fastest path to a running node is the pre-built Debian package. Two assets are listed with their SHA256 values: ultrafusion_0.1.3_amd64.deb for ROS1 Noetic and ultrafusion-ros2_0.2.2_amd64.deb for ROS2 Humble. Both are amd64. If you are on arm64, the README gives no asset for you and you are left with the Dockerfile or a native build.
Download the package for your runtime and verify its hash before installing. The README table lists the expected value for ultrafusion_0.1.3_amd64.deb as fe3c74d999a4f6bcf4d11be4c70e67aa48586c3b5cda2af37b521f8e37c8a84c. If the two strings differ, stop. For the ROS2 asset ultrafusion-ros2_0.2.2_amd64.deb the README gives 243f88fa5e3d87fcd96a2b02c8561fca4d5e56419ab72ec0a3a731b0ea34cccc. The README says the ROS1 and ROS2 runtimes share the same YAML-driven uf_node workflow, so the launch surface should look familiar across both. The README does not document an apt repository, so expect to fetch the .deb by hand and repeat that on every upgrade.
A first run on the M3DGR benchmark
The README routes new users to the M3DGR dataset section for ROS1, and v0.1.0 is described as pre-built binaries intended to reproduce the paper benchmarks. That is the intended first run: install the package, point the node at M3DGR, and confirm the estimator tracks before you touch your own sensor rig. The README does not print the exact roslaunch or rosrun invocation in the text available here, so read docs/ in the repository for the current command rather than guessing at a launch file name.
What you configure is a YAML profile. The README describes uf_node as YAML-driven and lists the profile topics it covers: fusion mode, camera intrinsics, GNSS fusion, extrinsics, calibration and delays, and map PCD export. That list is the practical checklist for moving from M3DGR to your own device. Get the fusion mode wrong and the node will wait for factors your robot does not publish. Get the extrinsics wrong and you are testing the online calibration rather than the estimator.
Map PCD export is worth noting separately. The v0.1.2 release notes describe it as flag-gated, and v0.2.2 brings the same opt-in workflow to ROS2. It is off unless you enable it, which means a first run that produces no point cloud map is expected behaviour, not a failure.
Where Ultra-Fusion is the wrong choice
The hard constraint is the platform. Both Debian assets are amd64, and the Dockerfiles are built on ubuntu:20.04 for ROS1 Noetic. If your robot carries an arm64 compute module, the documented install path does not cover you. The README does not state whether an arm64 build is planned.
The second constraint is the upgrade story. There is no apt repository documented, so upgrades mean re-downloading a .deb, re-checking a SHA256, and reinstalling. The project ships ROS1 and ROS2 lines in parallel with separate version numbers, v0.1.x and v0.2.x, and the README does not publish an end-of-support date for either. If you need a pinned runtime with a stated support window, that information is not here.
The third is scope. Ultra-Fusion is an estimator, not a full autonomy stack. There is no path planning, no control, no mapping pipeline beyond the opt-in PCD export. If your problem is loop closure at city scale or semantic mapping, this framework gives you a trajectory and a point cloud export, and you bring the rest. The README also does not document rollback to a previous .deb version, so keep the older package file if you upgrade.
How Ultra-Fusion differs from LIO-SAM and FAST-LIO style pipelines
The obvious comparison is with LiDAR-inertial systems such as LIO-SAM or FAST-LIO. Those are LiDAR-centric: the LiDAR supplies the primary geometric constraint, the IMU supplies motion prior, and adding a camera means adding a separate module with its own calibration and its own failure behaviour. Ultra-Fusion treats the sensor set as configuration. WIO, VIO, LIO and LVIO are modes of one optimizer, and wheel and GNSS enter as factors rather than as bolted-on corrections.
The practical difference shows up when a sensor degrades. In a LiDAR-centric pipeline, LiDAR degeneracy is the failure you design around, and a camera is a fallback you have to wire in yourself. In Ultra-Fusion the README's claim is that reliability scheduling inside the shared window handles the degradation, which is why the same binary is advertised for wheeled, legged and aerial platforms with different sensor suites. The trade-off is that you inherit the framework's calibration model and its factor choices. A pipeline dedicated to one sensor set can be tuned more aggressively for that set; Ultra-Fusion asks you to accept a general estimator in exchange for not maintaining four of them.
Licence and the cost of staying current
Ultra-Fusion is MIT licensed, and the repository carries a LICENSE file at the top level. MIT is permissive: it allows commercial use and modification, and the obligation is essentially attribution and inclusion of the licence text. For a framework that vendors ROS, Eigen, PCL, OpenCV and Ceres, the licence of Ultra-Fusion itself tells you nothing about the licences of those dependencies, and the README does not enumerate them. Check the dependency licences separately if you ship a product, and treat this as a pointer rather than legal advice.
The maintenance picture from the repository metadata is active: the last push was on 2026-08-29, and releases v0.1.3, v0.2.2 and v0.1.2 landed in July 2026 across both ROS lines. The README closes with "More demos and releases are on the way", which is a statement of intent rather than a schedule. The upgrade cost is the part to budget for. Two parallel runtime lines, no apt repository, manual SHA256 verification per download, and release notes spread across docs/releases/v0.1.2.md, v0.1.3.md and v0.2.2.md. That is manageable for a lab, heavier for a fleet where every node must run the same pinned build.
Editorial conclusion
Adopt Ultra-Fusion if you already run ROS1 Noetic or ROS2 Humble and need one estimator that covers WIO, VIO, LIO and LVIO with wheel and GNSS factors, and if you can live with amd64-only Debian assets and a single documented dataset path. Do not adopt it if you need an officially documented arm64 build, a native installation recipe spelled out end to end, or a project that publishes a support window. Before committing, verify the SHA256 of the .deb you download against the value in the README table, confirm that your camera intrinsics and extrinsics match the keys the YAML profile expects, and check whether the map PCD export flag is documented for your runtime, since the release notes for v0.1.2 and v0.2.2 describe it as opt-in and flag-gated.
Frequently asked questions
What is Ultra-Fusion?
It is a tightly-coupled multi-sensor SLAM framework for intelligent transportation systems, released under the MIT licence. The README describes it as supporting WIO, VIO, LIO and LVIO within one configurable optimization framework, with optional wheel and GNSS fusion and online calibration.
Which ROS version should I use with Ultra-Fusion?
The README maintains two lines: ROS1 Noetic, currently at v0.1.3, and ROS2 Humble, currently at v0.2.2. It states that both runtimes share the same YAML-driven uf_node workflow, so the choice is driven by your existing ROS installation rather than by feature differences.
How do I install Ultra-Fusion?
The README lists pre-built Debian assets for both runtimes, ultrafusion_0.1.3_amd64.deb and ultrafusion-ros2_0.2.2_amd64.deb, each with a SHA256 value to verify. It marks Docker installation as recommended and also documents a native installation path. There is no apt repository documented, so upgrades mean downloading and installing the package again.
Does Ultra-Fusion support arm64 or only amd64?
Both Debian assets published in the README are amd64, and the ROS1 Dockerfile is based on ubuntu:20.04. The README does not list an arm64 package or state whether one is planned.
Community notes