<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>

SLAM tracer bullet from EuRoC

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.

Goal

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.

Read first

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:

Scope

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.

Environment

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: