Mode comparison
The six estimator modes at a glance. Use this page as a buying decision when you know the hardware you have or the scene you intend to fly.Quick decision
If you can only read one row of this table, it is this one:| If you have… | Use… |
|---|---|
| Downward camera + rangefinder | optical_flow |
| Downward camera only (no rangefinder) | optical_flow_degraded |
| Forward camera + NPU board | vio_openvins |
| Forward camera + RK3582 / RK3588S2 board with headroom | vio_vins_fusion |
| Two cameras + NPU board | hybrid_of_plus_vio |
| None of the above | off (plugin loads, no MAVLink emission) |
Full comparison
| Dimension | off | optical_flow | optical_flow_degraded | vio_openvins | vio_vins_fusion | hybrid_of_plus_vio |
|---|---|---|---|---|---|---|
| Camera direction | none | downward | downward | forward | forward | downward + forward |
| Camera type | none | UVC or CSI | UVC or CSI | global shutter preferred | global shutter preferred | both |
| Rangefinder | optional | required | optional | optional | optional | optional |
| IMU read | gyro only | gyro only | gyro only | gyro + accel | gyro + accel | gyro + accel |
| Output | none | OPTICAL_FLOW_RAD | OPTICAL_FLOW_RAD | VISION_POSITION_ESTIMATE | VISION_POSITION_ESTIMATE | both |
| MAVLink component | none | 198 | 198 | 197 | 197 | 198 + 197 |
| Emission rate | none | 10 Hz | 10 Hz | 30 Hz | 30 Hz | 10 Hz + 30 Hz |
| ArduPilot EKF source | n/a | EK3_SRC1_VELXY=5 | EK3_SRC1_VELXY=5 | EK3_SRC1_*=6 | EK3_SRC1_*=6 | EK3_SRC1_* configurable |
| PX4 EKF param | n/a | EKF2_OF_CTRL=1 | EKF2_OF_CTRL=1 | EKF2_EV_CTRL | EKF2_EV_CTRL | both |
| Maximum altitude | n/a | rangefinder limit | barometric only | unbounded | unbounded | unbounded |
| Featureless ground tolerance | n/a | low | low | n/a (forward) | n/a (forward) | medium |
| Low-light tolerance | n/a | low (without IR illuminator) | low | medium | medium | medium |
| Fast-yaw tolerance | n/a | medium | medium | medium-high | medium-high | medium-high |
| Compute requirement | trivial | low (Pi 4B fine) | low (Pi 4B fine) | medium (NPU helps) | high (RK3582+) | high (NPU + cores) |
| RAM headroom needed | <50 MB | <100 MB | <100 MB | 120 to 180 MB | 250 to 350 MB | 300 to 400 MB |
| Calibration required | none | sensible defaults OK | sensible defaults OK | intrinsics + extrinsics + timeshift | intrinsics + extrinsics + timeshift | intrinsics + extrinsics + timeshift |
| Drone-card pill | hidden | ”OF" | "OF*" | "VIO" | "VIO" | "Hybrid” |
| Estimator state | off | converged when healthy | degraded on static rung | converged after init | converged after init | worse-of-two |
| Pre-arm gates | none | companion + flow quality + rangefinder | companion + flow quality + scale source | companion + estimator + intrinsics + extrinsics + sync + features | same as openvins | OF + VIO sets combined |
Hardware tier guide
The table below is the inverse view: pick your board, see which modes it can run.| Board | off | optical_flow | optical_flow_degraded | vio_openvins | vio_vins_fusion | hybrid |
|---|---|---|---|---|---|---|
| Raspberry Pi 4B (BCM2711) | yes | yes | yes | marginal | no | no |
| Raspberry Pi 5 (BCM2712) | yes | yes | yes | yes (NEON fallback) | marginal | marginal |
| Raspberry Pi CM4 (BCM2711) | yes | yes | yes | marginal | no | no |
| Raspberry Pi CM5 (BCM2712) | yes | yes | yes | yes (NEON fallback) | marginal | marginal |
| Raspberry Pi Zero 2 W (BCM2710A1) | yes | yes (tier-1 only) | yes (tier-1 only) | no | no | no |
| Radxa ROCK 5C Lite (RK3582) | yes | yes | yes | yes | yes | yes |
| Radxa CM4 (RK3588S2) | yes | yes | yes | yes | yes | yes |
| Rockchip RK3576 | yes | yes | yes | yes | yes | yes |