Pi=
∣
f
x
0
c
x
0
0
f
y
c
y
0
0
0
1
0
∣
\begin{vmatrix} fx & 0 & cx & 0\\ 0 & fy & cy & 0\\ 0 & 0 & 1 & 0 \end{vmatrix}
fx000fy0cxcy1000*
∣
r
11
r
12
r
13
T
x
r
21
r
22
r
23
T
y
r
31
r
32
r
33
T
z
0
0
0
1
∣
\begin{vmatrix} r11 & r12 & r13 & Tx\\ r21 & r22 & r23 & Ty\\ r31 & r32 & r33 & Tz\\ 0 & 0 & 0 & 1 \end{vmatrix}
r11r21r310r12r22r320r13r23r330TxTyTz1 对于相机0而言,因为外参矩阵为I,所以相机0的内参矩阵K_cam0=P0(0:3, 0:3); 对于相机1、2、3而言,因为四个相机的安装在统一水平线上,所以相机0相对于他们的外参数旋转矩阵为I,平移矩阵仅相差一个Tx,所以相机1、2、3的矩阵P可以简化为:
Pi=
∣
f
x
0
c
x
0
0
f
y
c
y
0
0
0
1
0
∣
\begin{vmatrix} fx & 0 & cx & 0\\ 0 & fy & cy & 0\\ 0 & 0 & 1 & 0 \end{vmatrix}
fx000fy0cxcy1000*
∣
1
0
0
T
x
0
1
0
0
0
0
1
0
0
0
0
1
∣
\begin{vmatrix} 1 & 0 & 0 & Tx\\ 0 & 1 & 0 & 0\\ 0 & 0 & 1& 0\\ 0 & 0 & 0 & 1 \end{vmatrix}
100001000010Tx001=
∣
f
x
0
c
x
f
x
∗
T
x
0
f
y
c
y
0
0
0
1
0
∣
\begin{vmatrix} fx & 0 & cx & fx*Tx\\ 0 & fy & cy & 0\\ 0 & 0 & 1 & 0 \end{vmatrix}
fx000fy0cxcy1fx∗Tx00 所以相机1、2、3的内参矩阵K_cami=Pi(0:3, 0:3), 相机0相对于他们的外参矩阵Ti=
∣
1
0
0
P
i
(
0
,
3
)
/
P
i
(
0
,
0
)
0
1
0
0
0
0
1
0
0
0
0
1
∣
\begin{vmatrix} 1 & 0 & 0 & Pi(0, 3)/Pi(0, 0)\\ 0 & 1 & 0 & 0\\ 0 & 0 & 1& 0\\ 0 & 0 & 0 & 1 \end{vmatrix}
100001000010Pi(0,3)/Pi(0,0)001 Tr表示雷达velodyne坐标系转换到相机0的变换矩阵。 所以我们利用calib文件得到四个相机内参数、外参数的同时,还可以得到雷达与四个相机之间的外参数即:
Tcami_velo=Ti*Tr
三、真值pose文件解读
KITTI官网下载的odometry里程计ground truth poses文件是以第一帧相机0的位置为原点,发布的各帧相机0的真实姿态变换矩阵。所以我们在利用激光雷达进行定位得到激光雷达位姿后,为了便于和真值进行比对,就需要将其转换到同一坐标系下: 我们先利用雷达和相机0之间的外参数,将相机0的位姿真值进行如下变换,便可得到在第一帧相机0原点下雷达的真实位姿: aft_pose=pose*Tr 随后再进行如下变换,将坐标原点变换到第一帧雷达原点下,此刻便可得到第一帧雷达原点下雷达的真实位姿,由此便可与雷达slam得到的定位结果进行比对。 final_pose=Tr(-1)*aft_pose