Drones and field work
Flight safety, firmware and geology, tested in simulators and on emulators.
Six repos for aircraft, firmware and the ground: a ROS 2 guard that forwards only setpoints it can prove safe, terrain clearance proofs for drone missions, CI checks for autopilot parameters, A/B firmware updates that survive power cuts, and a ground model and field notebook for borehole logs.
- Repos
- 6
- Passing tests
- 518, one dot each, run in October 2026 the way each repo's CI runs them
- Languages
- C++, Python, Rust, Kotlin
The six repos
Open a repo for its project page: what it does stage by stage, with real runs.
-
geofence-guard
96 passing tests
Forwards only setpoints proven inside the envelope
A ROS 2 node between a setpoint source and the autopilot that forwards a move only when it can show the whole path stays inside the flight envelope.
- Language
- C++
- Stack
- C++17, ROS 2 Jazzy, GoogleTest, PX4 SITL
- Scope
- The core and CLI build anywhere with CMake. The ROS 2 node and the PX4 SITL flights run in CI.
- Counted with
make test(87 GoogleTest cases plus 9 CLI tests; the 10 ROS 2 node tests run in CI and are not counted here)
-
terrain-follow
237 passing tests
Proves a mission clears the terrain
Proves that a drone mission clears the terrain, counting elevation, altitude and cross-track error, refuses any leg it can't prove, and raises the mission until every leg is proven.
- Language
- Python
- Stack
- Python standard library only, Hypothesis, PX4 SITL in Docker
- Counted with
pytest -q(38 test functions, 203 of the items parametrised)
-
paramguard
67 passing tests
CI check for PX4 and ArduPilot parameters
A CI check for PX4 and ArduPilot parameter files that compares what the vehicle will actually run, checks it against the firmware's own metadata and rules, and blocks the pull request until a named person accepts the change.
- Language
- Python
- Stack
- Python standard library only, composite GitHub Action, PX4 SITL in Docker
- Counted with
pytest -q(1 of them needs ArduCopter 4.6.3's parameter metadata from make ap-meta, as in CI)
-
ota-safe
33 passing tests
A/B firmware updates that survive power cuts
A/B firmware updates for microcontrollers with a trial boot and automatic rollback, checked by cutting power at every flash operation of a device's life and run on a Cortex-M3 in QEMU.
- Language
- Rust
- Stack
- no_std Rust with sha2 and ed25519-dalek, QEMU Cortex-M3
- Counted with
cargo test --locked(the depth-2 search, run by make deep, is ignored by default)
-
strata
46 passing tests
Borehole logs to a ground model with intervals
A Rust command-line tool that turns borehole logs into a layered ground model, puts a checked 95% interval on every contact, and refuses where that interval would be useless.
- Language
- Rust
- Stack
- No dependencies, ordinary kriging, leave-one-out calibration
- Counted with
cargo test --locked
-
fieldlog
39 passing tests
Offline Android notebook for boreholes
An offline-first Android notebook for logging boreholes, where phones merge their edits through CRDTs with no server deciding, and the merged logs reach strata only once they pass strata's own checks.
- Language
- Kotlin
- Stack
- Kotlin 2.0, Jetpack Compose, CRDTs with no merge library, Android emulator in CI
- Counted with
./gradlew testandconnectedDebugAndroidTest(33 JVM tests, 3 app unit tests and 3 Compose UI tests on an emulator)