MapPilot

Turn any Android phone into a georeferenced mobile-mapping and Visual-Inertial SLAM rig.

Status
Live
Version
0.2.0
Platform
Android app
License
Not specified
01 · Problem

Most mapping apps either stream raw video to a server or fabricate plausible-looking results when a sensor is missing. MapPilot runs on the device, reports UNAVAILABLE or DEGRADED instead of inventing values, and never lets perception, upload or thermal pressure block the capture path.

02 · Architecture

How it is put together.

MapPilot (in the MobileSLAM repository) records time-synchronized camera, IMU and GNSS, tracks the device in 3D with ARCore VIO, fuses it to real-world coordinates with a Umeyama GNSS-to-VIO alignment, and detects road assets on-device with YOLO11n on the LiteRT GPU delegate. Everything is written to MCAP and MP4 and indexed in an on-device spatial and vector database, with map, 3D point-cloud and export views. It runs on the edge; the cloud is an optional documented contract. The README reports field testing on a Galaxy A17 and sample sparse point clouds in the local VIO frame (not georeferenced).

Sensorssensors/Recordingrecording/SLAM and fusionslam/Perceptionperception/Asset extractionassets/extraction/Spatial + vector databa…core/database/Visualisationviz/single monotonic timebasesingle monotonic timeba…camera, IMU, GNSScamera, IMU, GNSSgeoreferenced trajectorygeoreferenced trajectorydetectionsdetectionsgeoreferenced assetsgeoreferenced assetsmap, 3D, exportmap, 3D, exportSensorssensors/Recordingrecording/SLAM and fusionslam/Perceptionperception/Asset extractionassets/extraction/Spatial + vector databa…core/database/Visualisationviz/single monotonic timebasesingle monotonic timeba…camera, IMU, GNSScamera, IMU, GNSSgeoreferenced trajectorygeoreferenced trajectorydetectionsdetectionsgeoreferenced assetsgeoreferenced assetsmap, 3D, exportmap, 3D, export
FIG. 01Modules and data flows, from the repository layout and documentation.
  1. 1

    Sensors

    Camera, IMU and GNSS capture modules

    sensors/
  2. 2

    Recording

    MCAP writer and MP4 video

    recording/
  3. 3

    SLAM and fusion

    ARCore VIO backend, Umeyama GNSS fusion

    slam/
  4. 4

    Perception

    YOLO11n detection, depth, embeddings

    perception/
  5. 5

    Asset extraction

    Back-projection, tracking and de-duplication into georeferenced assets

    assets/extraction/
  6. 6

    Spatial + vector database

    Room with R-Tree and cosine search

    core/database/
  7. 7

    Visualisation

    MapLibre map and GLES3 point-cloud renderer

    viz/
03 · Capabilities

Specification.

Capture
Synchronized camera + six IMU streams + GNSS (per-satellite C/N0, raw measurements) with per-stream health monitoring
SLAM
ARCore VIO 6-DoF pose, sparse point cloud and depth; motion/time keyframe selection
Georeferencing
Umeyama GNSS–VIO similarity solve → local ENU and WGS84; degenerate alignments rejected
Perception
YOLO11n via LiteRT GPU delegate with CPU/XNNPACK fallback; depth back-projection to georeferenced assets; MobileNetV3 embeddings for similarity search
Recording
Custom Kotlin MCAP writer (chunked, indexed, CRC, segmented, protobuf schemas) + H.264 MP4; crash recovery
Storage and export
Room + R-Tree spatial index + cosine vector search; PLY, PCD, GeoJSON, CSV
Sample capture
Sparse cloud of 47,839 points from a ~1.2 km walk on a Galaxy A17 (local VIO frame, not georeferenced)
Platform
Android 12+ (minSdk 31, compileSdk 35); ARCore-capable device recommended
Runs on
Android APK built with Gradle and installed via adb; Android 12+ and ARCore device
Stack
  • Kotlin
  • Jetpack Compose
  • Hilt
  • Kotlin coroutines / Flow
  • ARCore
  • LiteRT (TensorFlow Lite)
  • Room
  • MapLibre Native
  • OpenGL ES 3
  • MediaCodec
  • Protobuf
  • WorkManager
04 · Changelog

Releases.

  1. v0.2.0
    MobileSLAM v0.2.0 - georeferencing works on-device