diff --git a/src/modules/ekf2/ekf2_main.cpp b/src/modules/ekf2/ekf2_main.cpp index c8e2edecb1..cada510bf0 100644 --- a/src/modules/ekf2/ekf2_main.cpp +++ b/src/modules/ekf2/ekf2_main.cpp @@ -1173,8 +1173,9 @@ void Ekf2::run() ev_data.quat = q; // position measurement error from parameters. TODO : use covariances from topic - ev_data.posErr = fmaxf(_ev_pos_noise.get(), fmaxf(ev_pos.eph, ev_pos.epv)); + ev_data.posErr = fmaxf(_ev_pos_noise.get(), ev_pos.eph); ev_data.angErr = _ev_ang_noise.get(); + ev_data.hgtErr = fmaxf(_ev_pos_noise.get(), ev_pos.epv); // only set data if all positions and velocities are valid if (ev_pos.xy_valid && ev_pos.z_valid && ev_pos.v_xy_valid && ev_pos.v_z_valid) { diff --git a/src/modules/mavlink/mavlink_receiver.cpp b/src/modules/mavlink/mavlink_receiver.cpp index 2759d49f2b..3e6f7d28b0 100644 --- a/src/modules/mavlink/mavlink_receiver.cpp +++ b/src/modules/mavlink/mavlink_receiver.cpp @@ -1253,6 +1253,10 @@ MavlinkReceiver::handle_message_vision_position_estimate(mavlink_message_t *msg) vision_position.y = pos.y; vision_position.z = pos.z; + //copy horizontal and vertical covariances + vision_position.eph = fmaxf(pos.covariance[0], pos.covariance[6]); + vision_position.epv = pos.covariance[11]; + vision_position.xy_valid = true; vision_position.z_valid = true; vision_position.v_xy_valid = true;