赞
踩
上一节本人将KITTI Odometry数据集中的参数文件进行了解释。本节主要针对一些做融合slam的人,将Raw_Data数据标定文件中的参数按照自己的理解做如下阐述。其中,所讲之处如有错误,欢迎各位批评指正。
我们从官网下载原始的Raw_Data数据:
下载下来以后,我们拿synced+rectified data版本数据为例进行参数文件解读,解压数据包可以发现数据以以下结构排列:
└── 2011_10_03 ├── 2011_10_03_drive_0047_sync │ ├── image_00 │ │ ├── data │ │ └── timestamps.txt │ ├── image_01 │ │ ├── data │ │ └── timestamps.txt │ ├── image_02 │ │ ├── data │ │ └── timestamps.txt │ ├── image_03 │ │ ├── data │ │ └── timestamps.txt │ ├── oxts │ │ ├── data │ │ ├── dataformat.txt │ │ └── timestamps.txt │ └── velodyne_points │ ├── data │ ├── timestamps_end.txt │ ├── timestamps_start.txt │ └── timestamps.txt ├── calib_cam_to_cam.txt ├── calib_imu_to_velo.txt └── calib_velo_to_cam.txt
首先,对于calib_imu_to_velo和calib_velo_to_cam文件结构相对简单,内部仅包含了一个矩阵,分别表示imu到雷达坐标系的变换以及雷达到未矫正相机0的变换。
随后,对于calib_cam_to_cam文件内部较为复杂如图所示:
其中下标00号代表左边灰度相机、01号代表右边灰度相机、02号代表左边彩色相机、03号代表右边彩色相机;S_i代表1x2 矫正前的图像i的大小、K_i代表3x3 矫正前摄像机i的校准矩阵、D_i代表1x5 矫正前摄像头i的失真向量、R_i代表3x3(外部)的旋转矩阵(从相机0到相机i)、T_i代表3x1(外部)的平移矢量(从相机0到相机i)、S_rect_i代表1x2 矫正后的图像i的大小、R_rect_i代表3x3 纠正旋转矩阵(使图像平面共面)、P_rect_i代表3x4 矫正后的投影矩阵。
虽然calib_cam_to_cam包含的参数较多,但是对于我们而言,在计算外参和内参过程中仅用到了R_rect_i和P_rect_i。所以我们仅对各个相机的两个矫正矩阵进行解读即可。对于每个相机i而言,由于安装误差,通常相机坐标系不在一个直线上,为了解决这个问题,因此引入矫正矩阵。先利用R_rect_0对雷达到未矫正相机0进行旋转初步修正:
Ttemp_velo= Rrect_0 * Tunrect_cam0_velo
随后,同一直线理想(等同于最终修正)的相机0、1、2、3均与初步修正相机0存在平移偏差。因此P_rect_i可以理解为理想(最终修正)相机i的内参矩阵*初步修正相机0相对于理想(最终修正)相机i的外参矩阵即
P_rect_i=
∣
f
x
0
c
x
0
0
f
y
c
y
0
0
0
1
0
∣
所以,对于相机0、1、2、3而言,他们最终修正的内参矩阵K_cami=P_rect_i(0:3, 0:3),初步修正相机0相对于理想(最终修正)相机i的外参矩阵Tcami_temp=
∣
1
0
0
P
r
e
c
t
i
(
0
,
3
)
/
P
r
e
c
t
i
(
0
,
0
)
0
1
0
0
0
0
1
0
0
0
0
1
∣
所以我们利用calib文件得到四个相机内参数的同时,还可以得到雷达、imu与四个最终修正相机之间的外参数即:
Tcami_velo=Tcami_temp*Ttemp_velo
Tcami_imu=Tcami_velo*Tvelo_imu
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。