Temporary non-GPS navigation using speed estimation possible?

Hello,
I am currently trying to determine an ArduPilot (ArduPlane) configuration where a VTOL-capable drone shall be able to navigate for a limited time without GPS data.

The hardware setup is such that a companion computer uses a range finder and an optical flow algorithm to calculate the estimated speed (all directions) where the drone is flying. These data will then be transmitted to ArduPilot and used for navigation. The algorithm cannot provide position estimation, so we solely rely on velocity data for (short-time) navigation.

For manual switching I defined two EKF source sets as follows:

EK3_SRC1_POSXY: GPS
EK3_SRC1_POSZ:  Barometer
EK3_SRC1_VELXY: GPS
EK3_SRC1_VELZ:  GPS
EK3_SRC1_YAW:   Compass

and

EK3_SRC2_POSXY: none
EK3_SRC2_POSZ:  Barometer
EK3_SRC2_VELXY: External navigation
EK3_SRC2_VELZ:  External navigation
EK3_SRC2_YAW:   Compass

The expectation is that after switching manually to the second set, the drone will disregard GPS information and only rely on external navigation data for X/Y direction.

The navigation data is transmitted using VISION_SPEED_ESTIMATE MAVLink messages. Transmission is working properly, and we can see in SITL tests that these messages are accepted. Unfortunately after switching to second source set, the ArduPilot only processes these data for about ten seconds, before automatically changing the AHRS mode from EKF3 to DCM. The EKF3 will then not enable until switching back to GPS navigation. We also tried a dedicated hardware device with not much difference. This is to say for both real estimated data and for simulated data like flying straight in one direction with constant speed.

Other relavant values (I think) for configuration are these:

  • VISO_TYPE = 1 (use MAVLink for visual odometry)
  • EK3_SRC_OPTIONS = 0 (no fusing velocities)
  • EK3_ENABLE = 1
  • AHRS_EKF_TYPE = 3

Currently I am at a loss of what may be wrong in the configuration or in the setup at all. There is just no way to test it without having to dig deep into (and understanding!) ArduPilot source code about EKF3. On the other hand, even tests with generated speed estimation data of being stationary don’t work.

Is the setup with visual odometry and external navigation for EKF3 correct? Is it possible at all to rely on speed estimation without any position values (no GPS, no IMU, no odometry)? In a similar question it was said that ArduPilot does need VISION_POSITION_ESTIMATE messages, but what would be the purpose of the speed estimate messages then? We assumed either position or speed estimates would suffice.

(I am not sure of whether I am writing in the proper forum category. If not, please leave a comment.)