Transform Pose Data from documentation

Hi, I looked at the Document and I know that the way you calculate new pose from transformPose function is incorrect. This confused me couple time what I looked at it.

void transformPose(sl::Transform &pose, float tx) {
    Transform transform_;
    transform_.setIdentity();
    // Translate the tracking frame by tx along the X axis  
    transform_.tx = tx;  
    // Pose(new reference frame) = M.inverse() * Pose (camera frame) * M, where M is the transform between two frames
    pose = Transform::inverse(transform_) * pose * transform_;  
}

// Get the distance between the center of the camera and the left eye
float translation_left_to_center = zed.getCameraInformation().camera_configuration.calibration_parameters.T.x * 0.5f;
// Retrieve and transform the pose data into a new frame located at the center of the camera
POSITIONAL_TRACKING_STATE tracking_state = zed.getPosition(camera_pose, REFERENCE_FRAME::WORLD);
transformPose(camera_pose.pose_data, translation_left_to_center);

// Pose(new reference frame) = M.inverse() * Pose (camera frame) * M
if you have M^-1 * M = I which Pose * I = Pose so the fomular did nothing if I am correct.

also I catched in python example, you calculate the center of the camera but missing the tx * 0.5

# Get the distance between the center of the camera and the left eye
translation_left_to_center =zed.get_camera_information().camera_configuration.calibration_parameters.T[0]

I think you should update your Documentation.
Thanks

Hello and thank you for reporting this,

Can you add a link to the documentation that is wrong ? I don’t know which one you are talking about, just to be sure.

Hi, here is the link Coordinate Frames | Stereolabs

1 Like