Open-source release (Apache-2.0) · coming soonOpen source · Apache-2.0
xclean
Real-time stereo visual-inertial SLAM, built in India. Python, with GPU code written in CuPy and CPU hot paths in Numba: no C++ build step, no ROS. It runs natively on Windows 11 and is built for a Luxonis OAK-D-Lite stereo camera.
The code is not public yet.
The open-source release (Apache-2.0) comes after its GPU checks; the repository will be github.com/necessityrobotics/xclean. Until then, github.com/necessityrobotics is our organisation page.
What it does
xclean estimates the pose of a stereo camera at every frame, while it moves. Every pose is published live from a solve that contains that frame, and loop corrections are applied live.
xclean is a stereo visual-inertial SLAM system: it uses the IMU while a built-in consistency check accepts it, and otherwise continues as stereo visual odometry with loop closure. In the final board the IMU stayed in use to the end on 50 of 216 runs (mostly EuRoC and 4Seasons). On MADMAX, Rosario and our own OAK-D-Lite recordings the check dropped or refused it. KITTI has no IMU. Per dataset.
- Front end on the GPU: stereo feature tracking.
- Inertial: IMU preintegration, with an online consistency check (it can drop or refuse the IMU) and an online camera-IMU clock-offset estimate.
- Back end on the GPU: a sliding-window factor graph.
- Full SLAM: loop closure, relocalisation and map reuse.
- No learned networks in the SLAM pipeline.
"Written in CuPy" does not mean "pure Python": CuPy compiles our CUDA C source at first use (NVRTC), and the CPU hot paths are compiled by Numba.
In numbers
Measured on one desktop (RTX 5090) with its normal background load, host-side from frame arrival to the loop-corrected pose, in our development environment. The 38 routes were held out from xclean's development; 10 of them were run in a set-aside first launch whose results were never read. Robustness caveat: on 2 of those 38 routes a replay attempt crashed or hung, and the unsupported-frames check passed on 9 routes, failed on 4 and is pending on 25 (all MADMAX, whose ground truth has known faults). The engine was frozen with one of its pre-registered tests (K14) failed on two routes and passed on a third (kitti_09) only through its no-harm clause; details. Source: the final board of 2026-10-30 (data/board.json on this site).
Accuracy against other systems, wins and losses, is on the results page.
Install and run
Install and run instructions will be published with the code. What you will need: an NVIDIA GPU and driver. The full requirements come with the release.
Known issue (being fixed before release)
In the current install environment the live engine (paced and lock-step, which use the GPU front end on an NVIDIA machine) stops at a start-up self-check: its GPU and CPU results for small 3×3 solves do not match. The final board ran in our development environment, which is a different one. We will publish the install route once it reproduces the engine.
Tested, and not yet
| What | Status |
|---|---|
| The engine on the final board: 216 live paced runs on 72 routes, one frozen build, Windows 11, RTX 5090 | Done, in our development environment |
| Release package: unit tests | 45 pass on CPU. They do not check the install environment's GPU path. |
| Release package: lock-step identity with the frozen engine, on CPU (5 routes) | Identical, except once: the last frame of rosario_01 differed in 1 of 4 runs, from an end-of-stream race in the frozen engine's lock-step feeder |
| Release package: offline runner on the GPU | Byte for byte the frozen engine's output under deterministic settings. Its default settings vary from run to run, for the frozen engine too. |
| Release package: paced and live engine, and lock-step on the GPU | Blocked by the install-environment issue above |
| Live on-device run of the release on the OAK-D-Lite | Pending. Before the engine was frozen, only a 90 s static on-device smoke test ran. |
| Our OAK-D-Lite routes on the board | Recorded on the camera and replayed in real time (paced); no ground truth |
| Smaller GPUs, Linux, a clean machine | Not tested: all timings come from one desktop |
Licence
xclean will be released under the Apache License 2.0 (release coming soon): free for personal, research and commercial use.xclean is open source under the Apache License 2.0: free for personal, research and commercial use.
If you ship xclean in a product, you must credit it.
Keep the NOTICE file and show its text where your product lists third-party software (an About screen, the documentation or the credits). If you distribute modified files, mark them as changed.
Using it in a service or inside your company? We would love to know: add your name to USERS.md in the repository once it is public, or write to necessityrobotics@gmail.com (optional).
The datasets used in our evaluation keep their own licences and are not included. The place-recognition vocabulary shipped in the package is derived from TartanAir images (CC BY 4.0); its attribution and the licences of the dependencies are in THIRD_PARTY.md and on our data credits page.