点的空间变换与坐标系的空间变换

博主小白,分享一下自己对于点变换和坐标系变换的理解,不对的地方请大家指出~

坐标系变换

以最简单的坐标系变换为例,如下图
在这里插入图片描述
图中有两个坐标系,因为没有旋转,两个坐标系之间的变换关系很显然为
[ X 2 Y 2 ] = [ 0 1 − 1 0 ] [ X 1 Y 1 ] \begin{bmatrix} X_2 \\ Y_2 \end{bmatrix} = \left[ \begin{array}{cccc} 0 & 1 \\ -1 & 0 \end{array} \right ] \begin{bmatrix} X_1 \\ Y_1 \end{bmatrix} [X2Y2]=[0110][X1Y1]

[ 0 1 − 1 0 ] \begin{bmatrix} 0 & 1 \\ -1 & 0 \end{bmatrix} [0110]记为 T r T_r Tr, 也就是
[ X 2 Y 2 ] = T r [ X 1 Y 1 ] \begin{bmatrix} X_2 \\ Y_2 \end{bmatrix} = T_r \begin{bmatrix} X_1 \\ Y_1 \end{bmatrix} [X2Y2]=Tr[X1Y1]
在这个式子中, T r T_r Tr代表由坐标系2到坐标系1的空间变换,也就是坐标系1相对于坐标系2的位姿


点变换

同理,还是上面这个图,点 P ( a , b ) P(a,b) P(a,b)在坐标系1下的坐标为 P 1 ( a , b ) P_1(a,b) P1(a,b),在坐标系2下的坐标为 P 2 ( b , − a ) P_2(b,-a) P2(b,a),设 P 1 P_1 P1 P 2 P_2 P2的坐标变换为 T 1 2 T_1^2 T12代表坐标系2到坐标系1的变换,则有:

P 2 = T 1 2 ∗ P 1 P_2=T_1^2*P_1 P2=T12P1
带入 P 1 P_1 P1, P 2 P_2 P2得:
[ b − a ] = [ 0 1 − 1 0 ] [ a b ] \begin{bmatrix} b \\ -a \end{bmatrix} = \left[ \begin{array}{cccc} 0 & 1 \\ -1 & 0 \end{array} \right ] \begin{bmatrix} a \\ b \end{bmatrix} [ba]=[0110][ab]
因此,可以得到 T 1 2 = [ 0 1 − 1 0 ] T_1^2=\left[\begin{array}{cccc} 0 & 1 \\ -1 & 0 \end{array}\right] T12=[0110]

通过这个例子可以发现,点的空间变化和坐标系的空间变换是一样的

KITTI数据集中的坐标系关系

理解了上面的内容(点的空间变化和坐标系的空间变换是一样的),kitti数据集的坐标系变换就很简单了。
kitti坐标系之间的关系如下如图,其中左侧的坐标系是kitti odomtery的真值坐标系,右侧是lidar坐标系,因为A-LOAM计算的到的pose是右侧的,所以要想根据真值进行评价,我们需要将其转换到左侧的真值坐标系(其实就是左相机的坐标系),具体可以参考这篇博客在这里插入图片描述
记:

lidar to left camera的外参矩阵为 T r T_r Tr,即Tr transform a point from velodyne coordinates into the left camera coordinate system;(这里我感觉这个 T r T_r Tr其实就是camera到lidar的变换矩阵

第i帧lidar坐标系在其世界坐标系(其世界坐标系就是指的相对于第一帧lidar的pose)的pose(也即transform)为 T i l i d a r w T_i^{lidar_w} Tilidarw

第i帧camera坐标系在其世界坐标系的pose为 T i c a m e r a w T_i^{camera_w} Ticameraw

第i帧lidar坐标系下的点云为 P i l i d a r l P_i^{lidar_l} Pilidarl

第i帧camera坐标系下的点云为 P i c a m e r a l P_i^{camera_l} Picameral

第i帧点云在lidar世界坐标系(第一帧的坐标系)下的点云为 P i l i d a r w P_i^{lidar_w} Pilidarw

第i帧camera世界坐标系(第一帧的坐标系)下的点云为 P i c a m e r a w P_i^{camera_w} Picameraw

有:
P i c a m e r a w = P i c a m e r a w P_i^{camera_w}=P_i^{camera_w} Picameraw=Picameraw

T i c a m e r a w ∗ P i c a m e r a l = T r ∗ P i l i d a r w T_i^{camera_w}*P_i^{camera_l}=T_r*P_i^{lidar_w} TicamerawPicameral=TrPilidarw

T i c a m e r a w ∗ T r ∗ P i l i d a r l = T r ∗ T i l i d a r w ∗ P i l i d a r l T_i^{camera_w}*T_r*P_i^{lidar_l}=T_r*T_i^{lidar_w}*P_i^{lidar_l} TicamerawTrPilidarl=TrTilidarwPilidarl

T i c a m e r a w ∗ T r = T r ∗ T i l i d a r w T_i^{camera_w}*T_r=T_r*T_i^{lidar_w} TicamerawTr=TrTilidarw

T i c a m e r a w = T r ∗ T i l i d a r w ∗ T r − 1 T_i^{camera_w}=T_r*T_i^{lidar_w}*T_r^{-1} Ticameraw=TrTilidarwTr1

其中 T i c a m e r a w T_i^{camera_w} Ticameraw就是kitti的odomtery的真值, T i l i d a r w T_i^{lidar_w} Tilidarw为A-LOAM得到的里程计。

参考

[1] LOAM笔记及A-LOAM源码阅读