ODYX
On-device Visual-Inertial SLAM with GNSS fusion. Your own localization core, no ARCore.
- Status
- Live
- Version
- 0.1.0
- Platform
- Android app
- License
- MIT
Most Android apps that need a camera pose call ARCore and stop there. ODYX computes pose itself from raw sensor streams, so the whole localization stack is owned, GNSS can be fused for a global frame, and it can run on devices ARCore does not support.
How it is put together.
ODYX turns a phone's camera, IMU and raw GNSS into a globally georeferenced, drift-corrected 6-DoF pose and a live 3D map, computed entirely on the device. It is a from-scratch visual-inertial SLAM core built around a GTSAM fixed-lag smoother, with GTSAM, Boost, OpenCV, DBoW3 and RTKLIB cross-compiled into one native library. It exposes a PoseProvider interface so other apps can use it instead of ARCore. The README describes it as a research prototype: capture, time sync and front end run live on hardware, while VIO tuning against real motion remains.
- 1
Android sensor I/O
Camera2, IMU and raw GNSS capture in Kotlin
- 2
Time sync
Time-base unification onto a single REALTIME clock
app/src/main/cpp/sync/ - 3
Front end
KLT tracking + ORB features, VIO initialisation and online calibration
app/src/main/cpp/frontend/ - 4
Estimator
GTSAM fixed-lag smoother with visual, IMU preintegration and GNSS factors
app/src/main/cpp/backend/ - 5
GNSS
Loose and tight GNSS factors (RTKLIB)
app/src/main/cpp/gnss/ - 6
Loop closure
DBoW3 bag-of-words loop closure and relocalisation
app/src/main/cpp/loop/
Specification.
- Estimator
- GTSAM fixed-lag smoother fusing visual features, IMU preintegration and GNSS factors
- GNSS modes
- LOOSE (per-fix position factors, default) or TIGHT (raw pseudorange + Doppler via RTKLIB)
- Sensors
- Camera2 frames, 200 Hz SensorManager IMU, raw GnssMeasurement on one monotonic clock
- Front end
- KLT feature tracking + ORB; DBoW3 loop closure, pose-graph optimisation and relocalisation
- Calibration
- Online camera-IMU time offset and extrinsics, rolling-shutter compensation, in-app Allan-variance IMU logger
- Output
- Drift-corrected 6-DoF trajectory in a global ENU frame; sparse 3D map; PoseProvider API
- Status
- Research prototype; static or rotation-only starts do not initialise yet
- Runs on
- Android APK with a native C++ core (libodyx.so) built via NDK and Gradle
Releases.
- v0.1.0
More systems.
Turn any Android phone into a georeferenced mobile-mapping and Visual-Inertial SLAM rig.
Mapping and localization · ResearchCORRIDYXTurn dash phones into a live, city-scale map of where camera-based autonomy can see
Next systemLANYXLive, on-device, top-down lane mapping from a dash-mounted phone