Origin of positional data

I wanted to continue the conversation from here: Using the IMU Pose.Translation data

How is the position determined when calling get_translation in pose? Is it purely from VO or is there some fusion with the IMU data? I am wondering if creating my own Kalman filter to fuse the IMU data and the pose data would be pointless.

What are the differences between the states obtained in the positional tracking tutorial? Namely Orientation vs IMU orientation?

Hi @lgatien
welcome to the Stereolabs community.

The pose of the camera is estimated by fusing Visual Odometry information and inertial information.
I cannot add detailed information because the algorithm is a closed source.
The gyroscope of the IMU is used to estimate the rotation, while the accelerometer to extract the gravity vector and to improve the orientation estimation.
We do not use the accelerometer to estimate the translation, so you can add a new Kalman Filter level if you want to add this feature.

You can always disable the IMU fusion effect (see enable_imu_fusion) and create your own Kalman Filter for sensors fusion.

Thanks @Myzhar

I’m trying to understand the difference of the two orientations in the example. An extraction from there.

POSE
Contains positional tracking data which gives the position and orientation of the ZED in 3D space.
Different representations of position and orientation can be retrieved, along with timestamp and pose >confidence.

zed_pose = sl.Pose()

SENSORSDATA
Contains all sensors data (except image sensors) to be used for positional tracking or environment study.

zed_sensors = sl.SensorsData()
zed_imu = zed_sensors.get_imu_data()

ORIENTATION
Designed to contain orientation (quaternion) data of the positional tracking.
Orientation is a vector defined as [ox, oy, oz, ow].

py_orientation = sl.Orientation()
ox = round(zed_pose.get_orientation(py_orientation).get()[0], 3)

TRANSFORM
Designed to contain translation and rotation data of the positional tracking.
zed_imu_pose = sl.Transform()
ox = round(zed_imu.get_pose(zed_imu_pose).get_orientation().get()[0], 3)

For zed_pose.get_orientation it’s what the camera believes the orientation is.
For zed_imu.get_pose(zed_imu_pose).get_orientation it’s what the IMU believes the orientation is.

Is this correct?

Yes, that’s correct indeed