Embedded Bare-Metal
Radar-Inertial Odometry

Tightly coupled 6-DoF radar-inertial state estimation running entirely on a single-core 600 MHz microcontroller, enabling resilient closed-loop flight on an unmodified PX4 autopilot under strict SWaP-C constraints.

Autonomous Robots Lab (ARL), Department of Engineering Cybernetics, NTNU
⚡ 600 MHz Cortex-M7 (Teensy 4.0) 💾 140 KB Flash (6.9% usage) 🛡️ Zero Dynamic Memory (`malloc`-free) ⏱️ 6.4 ms Radar Frame Update 🎯 < 3% Translational RPE 🚁 PX4 Closed-Loop Flight
Abstract — Compact extraplanetary rovers and micro aerial vehicles require robust state estimation frameworks designed to operate under strict computational constraints in unforgiving environments. Typical solutions involving vision or LiDAR are computationally expensive and degrade in darkness, dust, fog, or smoke. Frequency Modulated Continuous Wave (FMCW) millimeter-wave radar directly measures radial velocity while resisting perceptual degradation. We propose an embedded radar-inertial estimator where all sensor drivers, data processing, and aided inertial navigation execute on a single-core bare-metal microcontroller. Flight experiments demonstrate translational APE of 0.51 − 0.82 m and RPE <3 % against motion capture, alongside closed-loop flight through an unmodified PX4 flight stack.

System Architecture & Hardware

A clean division of computation: on-chip radar signal processing, bare-metal microcontroller estimation, and downstream autopilot flight control.

Compute Partitioning

System architecture

1. Radar SoC (TI IWR6843AOP): On-chip range/Doppler/AoA FFT → 25 Hz sparse point cloud over UART.
2. Microcontroller (Teensy 4.0): 200 Hz IMU propagation, 50 Hz baro aiding, scalar radar ESKF updates.
3. Flight Controller (Pixhawk 6C): 50 Hz MAVLink ODOMETRY fused into PX4 EKF2.

Sensor Carrier Module

Carrier board top view

Top view: Teensy 4.0, BMI088 6-DoF IMU (200 Hz SPI), and BMP388 barometer (50 Hz SPI).

Radar module bottom view

Bottom view: TI IWR6843AOPEVM 60 GHz radar module with ±60° azimuth/elevation field of view.

CAD module assembly

CAD view: 3D printed carrier mount designed for 5-inch drone airframes.

KiCad electrical schematic

Electrical schematic: Level shifting, SPI bus routing, and Pixhawk UART interface.

Size: 115 × 25 mm Weight: ≈ 50 g Power: ≈ 3.0 W

How RIO Works

A tightly coupled Error-State Kalman Filter (ESKF) processing individual radar detections without scan matching or intermediate 3D velocity fitting.

Step 1 • 200 Hz

Inertial Propagation

High-rate IMU accelerometer and gyroscope measurements drive 3D kinematics to continuously propagate position, velocity, orientation, and covariance.

Step 2 • 25 Hz

Scalar Radial-Speed Updates

Each radar return is processed individually along its line-of-sight bearing, avoiding fragile 3D velocity inversions from sparse point clouds.

Step 3 • 50 Hz

Anchored Baro Aiding

Barometric pressure is differenced against the initial ground reference at takeoff, cancelling sensor offsets and eliminating vertical altitude drift.

Step 4 • In-Flight

Calibration & Gating

Statistical innovation gating rejects multipath and dynamic clutter, while the 6-DoF radar–IMU lever arm and rotation are calibrated online.

Experimental Validation

Flight validation across 5 datasets: outdoor forest slalom, high-speed open-field pass, indoor motion capture ground truth, and closed-loop PX4 position control.

Horizontal trajectories

Horizontal Trajectory Tracking

Accurately tracks agile flight in dense forest clutter, agrees qualitatively with GPS-aided EKF2 outdoors, and aligns closely with millimeter-level motion capture indoors.

Estimated velocity tracking

3-Axis Velocity Observability

Doppler radial measurements directly constrain body velocity, reliably tracking rapid accelerations and high-rate turns without scan matching.

Doppler speed exceeding sensor limit

Doppler Aliasing Resilience (12.45 m/s)

During the high-speed pass, the drone reached 12.45 m/s, exceeding the radar's 9.68 m/s unambiguous limit. The χ² innovation gate rejected aliased returns, keeping estimation stable.

Closed-loop PX4 flight trajectory

Closed-Loop PX4 Position Control

Streaming 50 Hz MAVLink odometry into PX4 EKF2 enabled stable position holding and responsive manual flight control without GPS, vision, or LiDAR.

Performance & Resource Footprint Summary

Evaluation Metric Experimental Value Budget / Reference Status
Indoor Circular APE / RPE 0.51 ± 0.29 m / 0.27 m Qualisys MoCap Ground Truth < 3 % relative pose error
Indoor Square APE / RPE 0.82 ± 0.45 m / 0.28 m Qualisys MoCap Ground Truth Consistent short-horizon tracking
IMU Prediction Timing 233 μs (mean) 5,000 μs nominal period (200 Hz) < 5 % of nominal interval
Radar Frame Update Timing 6.44 ms (mean) / 13.69 ms (worst) 40.0 ms frame deadline (25 Hz) Well within frame deadline
Flash Memory Footprint 140.3 KB 2,048 KB available (Teensy 4.0) Only 6.9 % of Flash
Dynamic Memory (`malloc`) 0 Bytes Static linear-algebra allocation Deterministic & fragmentation-free
Desktop Replay Parity 0.05 − 0.09 m RMSE difference Desktop single-precision compile ×6 to ×16 smaller than APE

Open-Source Code & Hardware

All firmware code, KiCad schematics, PCB layouts, and 3D print models are available on GitHub:

Firmware Repository

Bare-metal C++ estimator, TI radar parser, BMI088/BMP388 drivers, and MAVLink telemetry.

git clone https://github.com/ntnu-arl/embedded_rio.git
View Firmware on GitHub →

PCB & Hardware Repository

KiCad schematics, PCB layout, Gerber files, BOM, and 3D printable mechanical mounts.

git clone https://github.com/ntnu-arl/embedded_rio-pcb.git
View PCB on GitHub →

Citation

@article{aatif2026embedded,
  title     = {Embedded Bare-Metal Radar-Inertial Odometry},
  author    = {Aatif, Nicolai Adil {\O}yen and Nissov, Morten and Alexis, Kostas},
  journal   = {arXiv preprint arXiv:2610.07278},
  year      = {2026},
  url       = {https://arxiv.org/abs/2610.07278}
}