Search & rescue — open source

DroneDot

Your DJI drone, as a live dot on the CalTopo team map.

An Android app that runs on the DJI RC Plus 2 controller. It reads the aircraft’s GPS position through the DJI Mobile SDK V5 and reports it to a CalTopo Team as a beacon on the Shared Locations overlay — every five seconds by default.

That is the whole product. No camera, no gimbal, no flight control. Search managers see the aircraft on the same map as their ground teams, and nothing else changes about how anyone flies.

GROUND-1 GROUND-2 M4TD-01
Aircraft beacon Ground teams Shared Locations · 5 s

5 s

Default report interval. Selectable from 5 s to 3 minutes.

id · lat · lng

The entire payload. Nothing else is sent to CalTopo.

arm64-v8a

Single ABI, sideloaded. The RC Plus 2 has no Play Store.

01 What it does

Three jobs, done carefully. Everything the app knows how to do is on this list.

02 What it is not

Worth stating plainly, because the category is crowded with tools that do all of this and DroneDot deliberately does none of it. DroneDot is not a survey or mapping product.

03 Requirements

Built and field-tested against exactly one hardware combination. Other MSDK V5 airframes are plausible but unverified.

Aircraft
DJI Matrice 4TDMatrice 4D Enterprise Series — on the MSDK V5 supported-product list.
Controller
DJI RC Plus 2Android, arm64-v8a only. The RC Plus is the same platform.
SDK
DJI Mobile SDK V5, aircraft package, pinned to 5.18.0MSDK V4 does not support this airframe.
Android
minSdk 24 · targetSdk 35
CalTopo
A Team account with access to Trackable DevicesTeam Admin → Trackable Devices → Create New Access URL.
Install method
Sideload the APKDJI enterprise controllers ship without Google Play Services, so there is no Play Store to install from — the same reason DroneDeploy and Dronelink hand out APKs from their own sites.

04 Setup

Five steps, once per controller. Step 2 is the one people lose an afternoon to.

  1. Step 1

    Sideload the APK

    On a computer with the controller attached over USB and ADB enabled:

    adb install -r DroneTopo-GPS-0.3.0-arm64-v8a.apk

    Or type dronedot.nobrega.com.br/apk straight into the controller’s own browser and install from Downloads. Enable install-from-unknown-sources when prompted.

  2. Step 2

    Force-stop DJI Pilot 2 — every time

    DJI Pilot 2 holds the aircraft link. While it is running, a third-party MSDK app will not connect, and the symptom is a silent failure to ever reach READY.

    On the controller: Settings → Apps → DJI Pilot 2 → Force stop. Confirm it is no longer running before launching DroneDot.

  3. Step 3

    Create a connect key in CalTopo

    Team Admin → Trackable Devices → Create New Access URL, then copy the generated connect key. A generated key is harder to spoof than one you invent, and the device auto-appears in Trackable Devices on its first report — label and colour it there.

  4. Step 4

    Configure DroneDot

    Open Settings and set the connect key, a device ID (for example M4TD-01), the base URL https://caltopo.com, a report interval, and leave Skip invalid fixes on so (0,0) and NaN never reach the map.

    The screen echoes the resulting call sign, {CONNECT_KEY}-{DEVICE_ID}. Check it matches the Trackable Device before you rely on it.

  5. Step 5

    Start streaming

    Power the aircraft, wait for the SDK phase line to walk INITIALIZING → REGISTERING → REGISTERED and then READY, and tap Start streaming. A notification reads “Reporting as {call sign}” for as long as the beacon is live.

    On the team map, enable Map Overlays → Realtime Data → Shared Locations. The drone appears as a coloured dot.

05 How it reports

The whole integration is one GET request, which is a feature: there is very little that can break in the field, and what does break is visible on the status screen.

# one request per tick — this is the entire CalTopo integration
GET {baseUrl}/api/v1/position/report/{CONNECT_KEY}?id={DEVICE_ID}&lat={LAT}&lng={LNG}

# worked example
GET https://caltopo.com/api/v1/position/report/SARTRUCKS?id=14&lat=36.47375&lng=-118.85302

# on-map call sign, composed by CalTopo — the app only echoes it
SARTRUCKS-M4TD-01

06 Download

Signed release, no toolchain and no DJI App Key required. The build is large because the DJI MSDK ships a lot of native code; almost all of it is unused here and none of it can be stripped without breaking registration.

Version
0.3.0 · released 2026-08-27
File
DroneTopo-GPS-0.3.0-arm64-v8a.apk · 339 MiB Published before the rename, so the 0.3.0 asset filename and its launcher label still read “DroneTopo GPS”. The next release drops the old name.
SHA-256
52009d49b84445f71118a28be1bed93428ebdb0c8e6c3b7661bd25aa824a89e9
ABI
arm64-v8a onlyRC Plus 2 and RC Plus. It will not install on an armeabi-v7a device.
DJI App Key
Bound to br.com.nobrega.m4td.gpsReleased builds carry a working key. Build from source if you want your own key or your own signing identity — the package name must match whatever you register.
Licence
Apache License 2.0