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:
-
Has anyone successfully used a standard RTSP camera such as the Topotek DIT30E for optical flow?
-
Are negative opt_m_x and opt_m_y values expected during calibration?
-
What is the recommended procedure for determining FX_SCALER and FY_SCALER when optical flow is generated externally on a companion computer?
-
Is there a method to validate whether the optical flow values being sent through MAVLink are physically correct before attempting flight tests?
-
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.