VISION_POSITION_ESTIMATE not appearing in QGroundControl

I have (mostly) figured this out, and thought I should share for people who come across this page in the future. There were several parts to getting this working:

  1. Ensure that vision* and local* are whitelisted in mavros’ plugins file
  2. Launch mavros with fcu_protocol:=“v2.0”
  3. Ensure that the SERIAL*_PROTOCOL firmware parameters are set to “MAVLink2” (value=2)

MAVROS needs several changes to its code to get it working, so you’ll need to download and edit the code.

  1. In mavros/mavros_extras/src/plugins/vision_pose_estimate.cpp, in the function ‘vision_position_estimate’, send VISION_POSITION_DELTA messages instead of VISION_POSITION_ESTIMATE. APM doesn’t listen for the latter message.
  2. Before you start sending these messages, send a ‘mavlink::common::msg::SET_GPS_GLOBAL_ORIGIN’ Mavlink message, to set the origin for the EKF. You will have to hard-code the lat/long coordinates you wish to send (or maybe make them a mavros parameter if you’re feeling ambitious)
2 Likes