ROS MCPTAM MultiCol-SLAM 相机标定文件参数含义讲解

本文是对相机标定文件参数的详细讲解,希望可以帮到你!

文件路径:/opt/ros/kinetic/share/sensor_msgs/msg
ROS MCPTAM MultiCol-SLAM 相机标定文件参数含义讲解_第1张图片
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
ROS MCPTAM MultiCol-SLAM 相机标定文件参数含义讲解_第2张图片
ROS MCPTAM MultiCol-SLAM 相机标定文件参数含义讲解_第3张图片
文件路径:/ORB_SLAM2/Examples/Stereo/EuRoC.yaml

Camera.fx: 435.2046959714599
Camera.fy: 435.2046959714599
Camera.cx: 367.4517211914062
Camera.cy: 252.2008514404297

Camera.k1: 0.0
Camera.k2: 0.0
Camera.p1: 0.0
Camera.p2: 0.0

Camera.bf: 47.90639384423901(stereo baseline times fx)

LEFT.D: !!opencv-matrix
   rows: 1
   cols: 5
   dt: d
   data:[-0.28340811, 0.07395907, 0.00019359, 1.76187114e-05, 0.0]
LEFT.K: !!opencv-matrix
   rows: 3
   cols: 3
   dt: d
   data: [458.654, 0.0, 367.215, 0.0, 457.296, 248.375, 0.0, 0.0, 1.0]
LEFT.R:  !!opencv-matrix
   rows: 3
   cols: 3
   dt: d
   data: [0.999966347530033, -0.001422739138722922, 0.008079580483432283, 0.001365741834644127, 0.9999741760894847, 0.007055629199258132, -0.008089410156878961, -0.007044357138835809, 0.9999424675829176]
LEFT.P:  !!opencv-matrix
   rows: 3
   cols: 4
   dt: d
   data: [435.2046959714599, 0, 367.4517211914062, 0,  0, 435.2046959714599, 252.2008514404297, 0,  0, 0, 1, 0]

RIGHT.height: 480
RIGHT.width: 752
RIGHT.D: !!opencv-matrix
   rows: 1
   cols: 5
   dt: d
   data:[-0.28368365, 0.07451284, -0.00010473, -3.555907e-05, 0.0]
RIGHT.K: !!opencv-matrix
   rows: 3
   cols: 3
   dt: d
   data: [457.587, 0.0, 379.999, 0.0, 456.134, 255.238, 0.0, 0.0, 1]
RIGHT.R:  !!opencv-matrix
   rows: 3
   cols: 3
   dt: d
   data: [0.9999633526194376, -0.003625811871560086, 0.007755443660172947, 0.003680398547259526, 0.9999684752771629, -0.007035845251224894, -0.007729688520722713, 0.007064130529506649, 0.999945173484644]
RIGHT.P:  !!opencv-matrix
   rows: 3
   cols: 4
   dt: d
   data: [435.2046959714599, 0, 367.4517211914062, -47.90639384423901, 0, 435.2046959714599, 252.2008514404297, 0, 0, 0, 1, 0]

a. Camera.bf中的b指基线baseline(单位:米),
f是焦距fx(x轴和y轴差距不大),bf=bf,
和ThDepth一起决定了深度点的范围:
bf * ThDepth / fx
即大致为b * ThDepth。
基线在双目视觉中出现的比较多,
如ORB-SLAM中的双目示例中的EuRoC.yaml中的bf为47.9,ThDepth为35,fx为435.2,
则有效深度为bf * ThDepth / fx = 47.9
35/435.3=3.85米;
KITTI.yaml中的bf为387.57,ThDepth为40,fx为721.54,
则有效深度为387.57*40/721.54=21.5米。
这里的xtion的IR基线(其实也可以不这么叫)bf为40,
ThDepth为50,fx为558.34,则有效深度为3.58米(官方为3.5米)。

b. RGBD中 DepthMapFactor: 1000.0这个很好理解,
depth深度图的值为真实3d点深度*1000.
例如depth值为2683,则真是世界尺度的这点的深度为2.683米。
这个值是可以人为转换的(如opencv中的convert函数,可以设置缩放因子),
如TUM中的深度图的DepthMapFactor为5000,
就代表深度图中的5000个单位为1米。

MCPTAM(Multi-Camera Parallel Tracking and Mapping)
MultiCol-SLAM(multi-fisheye camera SLAM system)
它们输出的标定文件的内参对应关系如下图所示:
ROS MCPTAM MultiCol-SLAM 相机标定文件参数含义讲解_第4张图片
Inverse polynomial coefficients: 274.09 -126.007 -6.80859 -27.5604 3.31105 -4.754 6.00577 2.66313 -0.47732 -2.54251 0.934194

Camera.pol0: 274.09
Camera.pol1: 126.007
Camera.pol2: -6.80859
Camera.pol3: 27.5604
Camera.pol4: 3.31105
Camera.pol5: 4.754
Camera.pol6: 6.00577
Camera.pol7: -2.66313
Camera.pol8: -0.47732
Camera.pol9: 2.54251
Camera.pol10: 0.934194

规则:下标是奇数的数值便为负数。

它们输出的标定文件的外参对应关系如下图所示:
pose calibrator的结果如下所示:
camera1
1 0 0 -0
0 1 0 -0
0 0 1 -0

camera2
0.99806 -0.0592349 0.0191656 -0.0544484
0.0597737 0.997794 -0.0288826 -0.00878772
-0.0174124 0.0299722 0.999399 1.44874e-05

以第一个相机的坐标为世界坐标,计算第二个相机的旋转和平移,我标定得到的外参文件camera2是3×4的矩阵,3×3的R,以及31的T,
这里可以用hom2cayley() 函数转换成6
1,前三个表示旋转,后三个表示平移,不同的标定方法得到的参数格式也会有所不同,源码中也给出了相应的转换方式。

CameraSystem.cam1_1: -0.0238361786473007 #r1
CameraSystem.cam1_2: -2.05998171167958 #r2
CameraSystem.cam1_3: 0.695126790868671 #r3
CameraSystem.cam1_4: -0.140202124607334 #t1
CameraSystem.cam1_5: 0.0219677971160655 #t2
CameraSystem.cam1_6: -0.0226322662838432 #t3

cv::Matx C2(0.971856,  0.0218653 ,- 0.234557 , 0.101694,
			-0.0538169,  0.98996 ,- 0.130699,  0.191133,
			0.229345,  0.139644,  0.963276 , 0.0592288,0,0,0,1);
 
cv::Matx  new_C2 = hom2cayley(C2);
cout << "new_C2" << std::endl << new_C2;

6×1的矩阵经过cayley2hom()函数转换为4×4:

/**
* 6x1 minimal homogeneous transformation vector to homogeneous 4x4 transformation matrix
* @param c	6x1 Cayley parameters and translation
* @return T 4x4 homogeneous transformation matrix
*/
template
cv::Matx cayley2hom(const cv::Matx& cayleyRep)
{
cv::Matx cayleyR(cayleyRep(0, 0), cayleyRep(1, 0), cayleyRep(2, 0));
cv::Matx R = cayley2rot(cayleyR);
 
cv::Matx homM(
		R(0, 0), R(0, 1), R(0, 2), cayleyRep(3, 0),
		R(1, 0), R(1, 1), R(1, 2), cayleyRep(4, 0),
		R(2, 0), R(2, 1), R(2, 2), cayleyRep(5, 0),
		T(0), T(0), T(0), T(1));
		return homM;
}

你可能感兴趣的:(传感器标定)