firmware.type. It lists the parameters that matter; it does not write them.
ArduPilot
ArduPilot receivesOPTICAL_FLOW (#100) with the raw angular rate in the flow_rate_x and flow_rate_y fields. It uses those fields once it sees a non-zero value and subtracts its own gyro.
Set the rangefinder’s minimum and maximum distance parameters to the sensor’s range, so the flight controller ignores readings outside it.
A way back to GPS
Fly flow on its own EKF source set (for example source set 2, with set 1 on GPS). Assign an RC switch to the EKF source-set option (RCx_OPTION = 90) so you can return to GPS from the transmitter. Mission Control and the extension do not switch source sets for you.
PX4
PX4 receivesOPTICAL_FLOW_RAD (#106): the angle the ground swept over the interval and the gyro rotation over the same interval.
Reboot the flight controller after changing
EKF2_* parameters. The PX4 card on the Vision Nav tab shows EKF2_OF_CTRL, and EKF2_AID_MASK for releases before 1.14, only when the flight controller reports them.
iNav
iNav 7.0 and newer receivesOPTICAL_FLOW (#100), the same as ArduPilot.
In iNav’s Ports tab, enable MAVLink on the UART that connects to the companion, then reboot the flight controller. The iNav card on the Vision Nav tab lists the related parameters (
opflow_scale, nav_extra_arming_safety, nav_landing_speed, nav_rangefinder_for_terrain) as a reference.
Betaflight
Betaflight has no position estimator, so it cannot use optical flow. The plugin’s firmware setting offers only ArduPilot, PX4 and iNav. To fly GPS-denied on the same hardware, flash iNav or ArduPilot.Set the EKF origin
Without GPS the flight controller has no origin for its local position frame, and ArduPilot reportsAHRS waiting for home. The extension does not set the origin. Set it before you arm: in Mission Control, right-click the map at the take-off point and choose Set EKF Origin. Mission Control sends SET_GPS_GLOBAL_ORIGIN with the terrain height at that point; the flight controller does not acknowledge it, so confirm the message clears.
Pre-flight checks
The Vision Nav tab’s Pre-arm card shows the extension’s checks:- Companion process active
- Optical flow quality at or above
flow_quality_min(default 50) - Rangefinder healthy (
optical_flow): a fresh reading inside the sensor’s range - Altitude scale source (
optical_flow_degraded): a live height source, not the static fallback
armable flag and per-check rows, but it does not stop the flight controller from arming. Check that every row is green, that the Distance on the Sensors card matches the real height, and that the flight controller’s own pre-arm checks pass. Then arm.
Tuning
- Flow quality gate. Feature-poor ground (smooth concrete, snow, water) gives low quality. Lower
flow_quality_minin the plugin config only for testing over a safe area; below about 20 the tracker reports noise. - Latency. If the drone oscillates in Loiter, tune
EK3_FLOW_DELAY(ArduPilot) orEKF2_OF_DELAY(PX4). The plugin does not measure flow latency. - Yaw. Flow does not measure yaw. Calibrate the compass well.
- First hops. Start between 1 and 3 m. Lower is close to the rangefinder’s floor; higher has fewer features in view.
Next steps
Modes and fallback
What each mode checks and how scale falls back.
Install
The plugin config keys.