Optical Flow from Topotek DIT30E RTSP Camera on Jetson Orin Nano - Unable to Obtain Correct Scale Factors

Hello,

I am working on GPS-denied navigation using ArduPilot and would appreciate guidance from anyone who has implemented software-based optical flow using a standard camera.

Hardware Setup

  • Flight Controller: CubeOrange

  • ArduPilot Version: 4.4.3

  • Companion Computer: Jetson Orin Nano

  • Camera: Topotek DIT30E (RTSP stream)

  • Rangefinder: SF000

  • Camera Orientation:

    • Mounted facing straight downward

    • 90° vertical (nadir)

    • 0° horizontal offset

Optical Flow Implementation

I am computing optical flow on the Jetson using the DIT30E RTSP video stream and sending MAVLink OPTICAL_FLOW_RAD messages to ArduPilot.

EKF Configuration

EK3_SRC1_POSXY = 0
EK3_SRC1_POSZ = 2
EK3_SRC1_VELXY = 5
EK3_SRC1_VELZ = 0
EK3_SRC1_YAW = 1

FLOW_TYPE = 5

Problem

The optical flow pipeline appears to be running, but I am unable to determine correct FX and FY scale factors.

In Mission Planner:

  • opt_m_x and opt_m_y values are changing

  • Values are often negative

  • I am not sure whether their magnitude is correct

  • I cannot obtain reliable calibration values for FX_SCALER and FY_SCALER

  • FLOWHOLD does not achieve stable position estimation

I would like to know:

  1. Has anyone successfully used a standard RTSP camera such as the Topotek DIT30E for optical flow?

  2. Are negative opt_m_x and opt_m_y values expected during calibration?

  3. What is the recommended procedure for determining FX_SCALER and FY_SCALER when optical flow is generated externally on a companion computer?

  4. Is there a method to validate whether the optical flow values being sent through MAVLink are physically correct before attempting flight tests?

  5. Could gimbal stabilization, RTSP latency, camera FOV, or camera calibration affect the scale factor estimation?

Any advice, examples, or logs that I should collect would be greatly appreciated.

Thank you.