EKF3 error “EK3 sources require visual odometry” when using VIO-based marker navigation with NED commands (Python, no ROS)

Hello,

I am attempting to use Visual-Inertial Odometry (VIO) for marker-based navigation and send NED position/velocity commands to the flight controller. However, when I configure EKF3 to use vision sources, I encounter the following error:

“EK3 sources require visual odometry”

Hardware Setup

  • Companion Computer: Raspberry Pi 5

  • Camera: Raspberry Pi Camera Module 3

  • Flight Controller: Pixhawk 2.4.8

  • Firmware: ArduCopter

  • Connection: UART (TELEM2) via MAVLink

Software Setup

  • Python (OpenCV + pymavlink)

  • ArUco marker detection

  • Relative pose estimation from camera

  • Navigation commands sent in NED frame

  • No ROS / MAVROS

  • Not currently sending VISION_POSITION_ESTIMATE or ODOMETRY messages

What I Changed

When I set EKF3 parameters to use vision as a source, for example:
GPS_TYPE = 0

EK3_ENABLE = 1

EK3_SRC1_POSXY = 6
EK3_SRC1_VELXY = 6
EK3_SRC1_POSZ = 6
EK3_SRC1_YAW = 6

I immediately receive the error indicating that visual odometry is required.
If I compute VIO externally and only send NED position/velocity commands, will EKF3 still reject this configuration? also What is the minimum required MAVLink message set for EKF3 to accept and fuse visual odometry?
Any clarification on the correct EKF3 configuration for Python-based VIO without ROS would be very helpful.

See example at GitHub - stephendade/aprilmav: Indoor navigation via Apriltags over MAVLink