Avionics — HRKULES

One board carries the sensing, the control, the recovery firing, the logging and the radio, and it is designed, built and tested in-house.

  1. 01

    One board

    HRKULES is the flight computer: one board carrying sensing, control, recovery firing, logging and the radio. An RP2040 reads the IMU and the barometer, fuses them in an altitude Kalman filter, runs the state machine and both control loops, logs every cycle of flight to onboard flash and drives the gimbal servos and the pyro channel. All of it runs on a fixed 200 Hz schedule, and any cycle that overruns its slot is counted. Third board revision, laid out in KiCad.

    The HRKULES V3 flight computer, drawn from the KiCad layout
    Fig. 2.2  —  HRKULES · V3 board layout, 2.0 board on the bench, avionics bay
  2. 02

    A fixed 200 Hz loop

    The whole flight computer runs on one fixed schedule: 200 passes per second. Each pass reads the sensors, lets the state machine decide, updates the estimator, runs the control loops and logs the cycle; telemetry goes out at a lower rate. The loop waits for its slot and advances the schedule by a fixed period, so the rate cannot drift, and every pass that overruns its slot is counted. After an overrun it resynchronises instead of running back to back to catch up, because a burst of passes would corrupt anything that integrates over time.

  3. 03

    Telemetry

    The radio driver is written directly against the RFM95W register map rather than against a library. Telemetry is one compact packet, 50 times a second: timestamp, state, altitude, three attitude angles, total acceleration, temperature, battery, a fault word, a filter-innovation value, a flags byte, a sequence counter and a version byte. The packet size is checked when the firmware is built, so a changed layout fails the build instead of corrupting the downlink, and the ground derives packet loss from the sequence counter.

  4. 04

    Logging

    Every cycle of flight is written to a flash chip on the board. After touchdown the log is copied to the SD card, so nothing is lost when the battery is unplugged and the data opens straight in the Data Viewer. If a log is still on the chip at the next power-up, it is copied to the card first.

  5. 05

    Configuration at the pad

    Tunables are read from a config file on the SD card at boot rather than compiled in, so the vehicle can be retuned at the pad without a toolchain. Each value is checked against a range the vehicle is willing to fly. A missing file, an unknown key or a mistyped value leaves the compiled-in default in place.

  6. 06

    Faults and the start-up gate

    Faults are tracked twice: the ones live right now, and every one seen at any point since boot. A fault that comes and goes is invisible in the live view, which is why the latch exists. If a flight-critical subsystem fails at start-up the main loop never runs and the status LED blinks: the vehicle stays on the pad instead of flying on unreliable data.

  7. 07

    Specification

    Revision
    V3  (V1 → V3)
    MCU
    RP2040 @ 133 MHz · Arduino Nano RP2040 Connect module
    IMU
    MPU6050 — 6 axis
    Barometer
    BMP180
    Estimator
    Kalman filter, barometer + accelerometer
    Main loop
    200 Hz, fixed schedule
    Radio
    RFM95W · 433 MHz band
    Storage
    W25Q flash (flight) · SD (config, post-flight copy)
    Outputs
    2 servo channels (gimbal) · 1 pyro channel
    Telemetry
    compact, versioned packet · 50 Hz

Altitude estimate

Altitude and vertical velocity come from a two-state Kalman filter. The accelerometer drives the prediction at 200 Hz; the barometer corrects it whenever a fresh sample lands. Each barometer sample is checked against the filter's own uncertainty: a sample that is statistically implausible is rejected, and only a sustained run of rejections makes the filter re-anchor to the barometer. A single bad sample cannot move the estimate, but a filter that has genuinely drifted recovers on its own.

dots: barometer · red line: estimate · dashed: true altitude Ignored samples: 0
Synthetic data and illustrative parameters, not the flight values.

NextRecoveryGround control and simulation