crabpilot.dev
BlogPricing
Open Source

Rust flight
firmware.

Memory-safe autopilot for STM32H7. 24-state EKF, 13 flight modes, VTOL support, ArduPilot-compatible parameters. No GC, no heap in the control loop — 400 Hz on bare metal.

CrabPilot

Board photo coming soon
Board support

Runs on real hardware.

One TOML per board — codegen produces the RTIC app and peripheral init. Add a new flight controller without touching the control loop.

CubeOrange / CubeOrangePlus

Hex — STM32H743
Shipping

Primary development target. All peripherals exercised in CI.

USB CDC + MAVLink

AK09916 compass + ICM-20948 IMU

Used as primary dev target

Custom board

Bring your own TOML
On request

Describe your board in TOML and codegen handles peripheral init. Part of the engagement.

Bring a TOML board definition

Codegen handles peripheral init

Part of the engagement

Capabilities

Rust flight firmware, open source.

Memory-safe no_std Rust from driver to control law. 3,500+ tests, Gazebo SITL in CI.

24-state EKF

Gyro bias, accel bias, magnetic offsets, wind. Lock-free on the control loop.

13 flight modes

Stabilize through Auto, including Guided + Smart-RTL. ArduPilot semantics.

ArduPilot-compatible params

Same names, same units. Drop into existing fleets.

Gazebo SITL

Bare-metal-identical control loop, no shortcuts. Lockstep clock.

HITL bridge

Drive a real STM32 board with simulated sensors. 2 Mbaud framed UART.

Failsafe stack

Battery, GPS, geofence, link loss. Watchdog, deterministic startup.

Architecture

How it works

A layered no_std crate stack — each layer depends only on the one below it. Swap a driver without touching the EKF.

no_std crate stack

1

HAL

embedded-hal-async traits, RTIC tasks
2

Drivers

ICM-20948, BMP581, RM3100, UBlox
3

Sensor pipeline

MultiImuPipeline + BaroPipeline (corrector → LPF → voter)
4

EKF and control

24-state filter, attitude + position loops
5

MAVLink + DroneCAN

serial, USB CDC, CAN FD

Define a flight mode

Implement the FlightMode trait. The scheduler calls update every control tick — no allocation, no dynamic dispatch overhead.

pub struct LoiterMode {
    target: PositionNed,
}

impl FlightMode for LoiterMode {
    fn on_enter(&mut self, telem: &Telemetry) {
        // Capture current position as hold target
        self.target = telem.position_ned;
    }

    fn update(
        &mut self,
        dt: f32,
        telem: &Telemetry,
    ) -> ControlOutput {
        let err = self.target - telem.position_ned;
        ControlOutput::position_hold(err, dt)
    }
}
Use cases

Who flies CrabPilot

Research labs

Bring your own controller, plug it into the sensor pipeline, fly it in Gazebo before it hits hardware.

Hobby builds

ArduPilot-compatible params and modes — drop into a 5-inch quad without retraining your fingers.

Education

Read the EKF, step through it in defmt RTT. The whole stack is in one repo.

Open source

Open source. no_std. MIT.

CrabPilot is a fully open autopilot stack. Read the EKF, hack the flight modes, port it to new hardware — the entire repo is public.

3,500+ tests across the workspace

Cube Orange flashing via probe-rs + RTT

Gazebo SITL ships with the repo

Reference docs in the repo mirror every subsystem

ArduPilot parameter compatibility