<aside> ⚠️
This page is synced from GitHub. Edits will be overwritten.
Source: https://github.com/uwrealitylabs/standalone-knowledge-base/blob/main/docs/standalone-driver/task-guides/SLAM tracer bullet from EuRoC.md
Last synced: 2026-11-01 23:20:31 UTC
</aside>
Part of Monado headset driver. Implements the SLAM half of Stage 2 in the Tracer bullet roadmap.
Code references: uwrealitylabs/standalone-monado-driver, branch dev at 6bbefe8, paths relative to src/xrt/ unless noted. The task itself is decided; the implementation details below are suggestions to adapt.
Recorded camera and IMU data reaches an OpenXR app through our driver, running on the EB5:
EuRoC dataset ─► EuRoC player (xrt_fs) ─► t_slam sinks ─► t_slam ──VIT──► libbasalt.so
▲ xrt_tracked_slam_get_tracked_pose(t)
standalone HMD xrt_device ◄── Monado core ◄── hello_xr
(all created and connected once, in standalone_open_system_impl)
This proves the whole SLAM path (build, loading, wiring, pose query, core) before any of our sensors or capture code exist. Later stages replace the EuRoC player with live capture behind the same sinks; nothing above them should need to change.
| Note | Why |
|---|---|
| EB5 Monado Development Setup | The Ubuntu 24.04 container all building and running happens in |
| Monado headset driver | What the builder, device and trackers each do; push below the device, pull above it; current state of our code |
| Sinks | How data reaches trackers; who owns what; teardown |
| EuRoC player | The replay source, the two calls a builder makes, configuration, timestamp rebasing, a code sketch |
| t_slam | The SLAM adapter, its pose path and gotchas |
| VIT | How t_slam loads and calls Basalt; Basalt's behaviour and asserts |
Code worth reading alongside:
drivers/twrap/twrap_slam.c (228 lines): the smallest xrt_device built around t_slam, including the Basalt axis correction (:77).drivers/euroc/euroc_runner.c:91–115: the replay wiring with no device.drivers/rift_s/rift_s_tracker.c:634–680: a complete pose composition chain on real hardware.In: building Basalt and Monado in the development container, Monado build options, builder wiring, the device's pose query, one dataset, running headless on the EB5.
Out: live capture and our sensors, hand tracking (Hand tracking), calibrating our hardware, display and panel bring-up (Display), GPU acceleration, and the Mock capture branch, which can't feed SLAM. A 3DoF fallback is optional.
The EB5's stock image is Ubuntu 18.04 with a 4.19 kernel, too old for Monado's dependencies. All builds and runs happen in the Ubuntu 24.04 container from EB5 Monado Development Setup, over SSH; see also OS and kernel.
Consequences for this task: