Skip to main content
Vision Navigation sends an optical-flow measurement. The flight controller decides whether to fuse it, so its parameters must accept flow on MAVLink and use it for horizontal velocity. Set them in Mission Control’s parameter editor or your usual ground station. The Vision Nav tab shows a read-only parameter card for the firmware set in firmware.type. It lists the parameters that matter; it does not write them.
Test every change on the ground and in a low hover first, with a way back to GPS. Read Safety before you fly.

ArduPilot

ArduPilot receives OPTICAL_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 receives OPTICAL_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 receives OPTICAL_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 reports AHRS 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
The card is advisory. The plugin reports an 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_min in 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) or EKF2_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.
Last modified on October 11, 2026