One fusion hub, every sensor, a stock flight controller
How it will work
Sensors in, one estimate out
Every sensor will publish through its own driver. A shared fusion layer will combine them and speak standard MAVLink to the flight controller. Each layer will be open and replaceable.


The fusion hub runs on the companion computer, not in the flight controller.
The organizing idea
Reliability while moving
Sensors that stay accurate in flight will carry more weight. Sensors that get noisy with speed or texture will be trusted less as the drone moves.
Motion-agnostic
Steady in flight, so they will carry high weight in the estimate.
- ToF rangefinder
- RTK GNSS
- Solid-state lidar
- mmWave radar
Scene-sensitive
Reliable when slow and textured, so their weight will drop with speed and yaw.
- Optical flow
- Stereo depth
- Mechanical 2D lidar
Mapping
Sensor roles become standard messages
The fusion layer will never fork firmware. Part of the path exists today: the agent already encodes the rangefinder, optical flow, visual position and odometry messages, and a plugin may send an estimator message only with the estimator.pose.inject permission.
| Item | MAVLink message | Encoder in the agent today |
|---|---|---|
| Rangefinder | DISTANCE_SENSOR | |
| Optical flow | OPTICAL_FLOW_RAD | |
| Visual position | VISION_POSITION_ESTIMATE | |
| Odometry | ODOMETRY | |
| Obstacle field | OBSTACLE_DISTANCE | |
| 3D obstacle field | OBSTACLE_DISTANCE_3D |
Rangefinder
MAVLink message (DISTANCE_SENSOR), Encoder in the agent today
Optical flow
MAVLink message (OPTICAL_FLOW_RAD), Encoder in the agent today
Visual position
MAVLink message (VISION_POSITION_ESTIMATE), Encoder in the agent today
Odometry
MAVLink message (ODOMETRY), Encoder in the agent today
Obstacle field
MAVLink message (OBSTACLE_DISTANCE)
No encoder in the agent today
3D obstacle field
MAVLink message (OBSTACLE_DISTANCE_3D)
No encoder in the agent today
One ecosystem, any sensor
Sensor drivers, fusion, and MAVLink mapping will ship as open source. Follow the design as it comes together.
Read the docs