how to get the relative camera pose to another camera pose?

24 次查看(过去 30 天)
Two camera absolute poses, pose1(rotationMatrix1,translationVec1),pose2(rotationMatrix2,translationVec2) are know,how to get the camera2 to camera1 relative pose? i know cam2 to cam1 relative oriention matrix is R2*R1',but i can't be sure the relative translation, is (T2-T1)*R1' or T2-T1*R1'? (rotationMatrix1=R1, rotaitonMartix=R2,translationVec1=T1,translationVec2=T2)
i can see many of vSLAM examples "helperAddNewKeyFrame" function use (T2-T1)*R1' as relative translation vectors? i think is T2-T1*R1',because T21 = T2w+Tw1 = T2+(0-T1)*R1' = T2-T1*R1'

采纳的回答

Qu Cao
Qu Cao 2022-5-16
编辑:Qu Cao 2022-5-17
Note that the geometric transformation convention used in the Computer Vision Toolbox (CVT) is different from the one used in the Robotics System Toolbox. If you transform a 3-D point [X, Y, Z] from one coordinate system to another, its new location is computed as
[X2, Y2, Z2] = [X, Y, Z] * R_cvt + t_cvt
where R_cvt is the rotation matrix and t_cvt is the translation vector. This is diffrent from the common convention you may have seen:
[X2, Y2, Z2]^T = R * [X, Y, Z]^T + t
where T represents transpose.
In other words, CVT uses the post-multiply convention and the rotation matrix and the translation vector are the transposed version of the common format.
Back to the question you were asking, following the common convention, the relative pose is computed as:
R_rel = R1^T * R2
t_rel = R1^T * (t2 - t1)
See also this post for reference.
Now with the new convention,
R_rel_cvt = R_rel^T = R2^T * R1 = R2_cvt * R1_cvt^T
t_rel_cvt = (t2-t1)^T * R1 = (t2_cvt - t1_cvt) * R1_cvt^T
this explains the code in the helperAddNewKeyFrame function.
I know this is a little confusing, but we're actively working on adopting the common geometric transformation convention in the Computer Vision Toolbox.

更多回答(0 个)

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by