Understanding the difference between the covariances of pose_with_covariance topic and odom topic

Hey there, In order to fuse the ZED estimation in my EKF, I’m trying to understand the covariance behaviors in the topics of pose_with_covariance and odom. I refer to the trace of the position covariance.
In the odom topic I saw that the covariance is bounded to a really small bound. where the max is about 2e-6.
On the other hand, in the pose_with_covariance I saw a different behavior, first, the covariance is growing at a steady pace, it also decreases sometimes but most of the time it’s growing.
When the camera sees a white wall, the covariance explodes in a weird way from 5.0 to about 1e11 at once. while the odom topic covariance stays at the max bound I mentioned before.

Why there is a difference between the behaviors of them? what is the difference in the calculation between both of the covariances? And which of the covariances (odom/pose_with_covariance) do you recommend using in order to fuse them correctly in the EKF?

Hi @gdanan
Welcome to the Stereolabs community.

The correct behavior of the covariance is the one described for the pose topic.
The covariance published with the odom topic is related to the “odometry step”, so it’s not a cumulative covariance, but it’s relative only to the latest step.
We will fix this behavior.

Thanks for the answer!
So the odom covariance is purposely bounded to 2e-6?

And which behavior will you fix? the odom topic covariance? or the sudden covariance explosion of the pose_with_covariance topic?

So according to your answer, in order to fuse the ZED camera with other sensors in my EKF I should use the odom topic, right?

The covariance of the topic is to be fixed.

Usually in the EKF you should fuse the odometry information that is continuous, so it does not jump, a situation that can bring a bad estimation of the velocity.

The /odom topic covariance is to be fixed?

Thank you for the clarification, and I look forward to the covariance being updated.

@Myzhar could you also give us insight or documentation on the strategy StereoLabs uses for computing the pose/VIO covariance in the first place? I see that if the camera is assumed to be in a 2D plane, then the Z, x-axis rotation, and y-axis rotation diagonal and corresponding cross-correlation terms are zeroed out, but how are the rest of the covariance terms computed?