Strange Position Hold behavior with Odometry data and no GPS


Our robotics team is using PX4 v1.14.0 with ROS2 to send visual position from a stereoscopic camera (ZED mini with ROS2 zed wrapper) to the flight controller (using Micro-DDS uROS agent) instead of a GPS for indoor position hold. We have done extensive testing and are sending legitimate data to /fmu/in/vehicle_visual_odometry at around 15Hz, and the data is being used, as the drone will start drifting or toilet-bowling and eventually EKF2 will freak out and the local position estimate will oscillate randomly.


The data seems to roughly match up, but we have run multiple tests and found that occasionally that the local position estimate will appear to be inverted compared to the Odometry data, but it isn’t consistent between tests, and appears on different axes despite the same odometry data being sent each time.

Our current EKF2 parameters are attached, there is no GPS, magnetometer, and we have tested both with barometer mixing and without.

Does anybody have any ideas why this would occur or what would be causing it?