1 前言
在一些场景里,可能会遇到坐标系转换与刚体变换的问题,对于空间点来说,它们的变换形式是一致的,而对于带旋转的位姿来说,它们的变换方式却不一致。
一个对象进行刚体变换,整体表现为旋转与平移,不改变坐标系本身约定的性质(各个轴之间的相对关系不会改变)。刚体变换可以理解成在同一个约定的坐标系下,从一个相对坐标系到另一个相对坐标系的变换过程!(PS:世界坐标系也可看成一个特殊的相对坐标系)
坐标系转换,从名字上就可以看出,其本身是对约定的系统进行改变。比如,左右坐标系的转换,它们各个轴的相对关系因坐标系的不同而不同。
不管是刚体变换还是坐标系之间的转换,主要的难点是旋转矩阵的表现形式。本文这里仅简单记录。
注意:
(1) 本文中没有特别说明的,其表示方式均为世界坐标系的表示方式。
(2) 本文当中的3D点p为了表示方便,均以齐次坐标形式表示,即
(1.1)
p=[xyz1]
2 刚体变换
刚体变换的主体思想是,对操作对象进行旋转与平移,这里约定有如下(2.1)的变换矩阵,然后用这个矩阵对操作对象进行操作即达到刚体变换效果。
(2.1)
T=[Rt0T1]
2.1 点的变换
对于空间点p0,假设在刚体变换T后变为p1,那么变换前后的关系可以表示为
(2.2)
p1=Tp0
2.2 位姿的变换
对于空间中,有一个相机的位姿为T0,假设在刚体变换T后变为T1。同样,空间点p0,在刚体变换T后变为p1。由于刚体变换不会改变空间中对象的相对位置信息,因此可知点p0在相机T0里的相对位置不会改变,因此可以得到
(2.3)
T0p0=T1p1=T1Tp0
由于对任意p0均要满足公式(2.3),因此有
(2.4)
T1=T0T−1
注意,这里的位姿T0、T1是世界坐标系到相机坐标系的表示方式, 即如果一个世界坐标系的点p0,通过公式T0p0将变换到相机坐标系下的位置。如果T0、T1相机坐标系到世界坐标系的表示方式, 即如果一个世界坐标系的点p0,通过公式T−10p0将变换到相机坐标系下的位置,那么根据公式(2.4),可以得到如下位姿变换结果
(2.5)
T1=TT0
3 坐标系变换
有时我们会在左右手坐标系之间进行转换,有时我们需要将x、y轴进行对调,有时我们需要将当前坐标系按某种形式进行旋转……这一系列的坐标系变换,可以看成一个镜像、旋转、偏移的组合,这里以如下的变换矩阵来表示
(3.1)
T=[R′t0T1]
注意:这里的R′的行列式不一定为1,也可能为-1。
3.1 点的坐标系变换
对于空间点p0,假设在坐标系变换T后变为p1,那么变换前后的关系可以表示为
(3.2)
p1=Tp0
3.2 位姿的坐标系变换
3.2.1 相机坐标系按约定变换,世界坐标系按约定变换
对于空间中,有一个相机的位姿为T0,假设经过坐标系变换系数T后变为T1。同样,空间点p0,在经过坐标系变换T后变为p1。由于p0在相机T0里的相对位置不会改变。但是,需要注意的是,虽然相对位置不会改变,但是按约定,坐标系进行了变化(例如,在世界坐标系,我们约定x轴向前,y轴向右,z轴向上;在相机坐标系,我们也会默认x轴向前,y轴向右,z轴向上),则可得到如下结果
这里假设,在变换前的坐标系下,p0相对于T0的位置为p′,则可以得到
(3.3)
p′=T0p0
p′在经过坐标系变换T后变为p″,则有
(3.4)
p″=Tp′
由于在变换后的坐标系下,p1相对于T1的位置也为p″,即
(3.5)
p″=T1p1
根据公式(3.2)-(3.5)可得到
(3.6)
(T1T–TT0)p0=0
由于对任意p0均要满足公式(3.6),因此有
(3.7)
T1=TT0T−1
对(3.7)进行展开有
(3.8)
[R1t10T1]=[RR0R−1Rt0+t–RR0R−1t0T1]
即旋转部分与偏移部分的变换结果分别为
(3.9)
R1=RR0R−1t1=Rt0+t–RR0R−1t
特别地,当t=0时,有
(3.10)
R1=RR0R−1t1=Rt0
3.2.2 相机坐标系不变,世界坐标系按约定变换
这里同样使用3.2.1当中的符号表达,由于这里约定相机坐标系不变,因此(3.5)式变为
(3.11)
p′=T1p1
由公式(3.2),(3.3),(3.11)可以得到
(3.12)
(T1T–T0)p0=0
由于对任意p0均要满足公式(3.12),因此有
(3.13)
T1=T0T−1
3.2.3 相机坐标系按约定变换,世界坐标系不变
这里同样使用3.2.1当中的符号表达,由于这里约定世界坐标系不变,因此(3.5)式变为
(3.14)
p″=T1p0
由公式(3.3),(3.4),(3.14)可以得到
(3.15)
(TT0–T1)p0=0
由于对任意p0均要满足公式(3.15),因此有
(3.16)
T1=TT0
3.3 相机坐标系变换总结
最终,相机坐标系变换方式,可分3种情况进行:
情况1:相机坐标系按约定变换,世界坐标系按约定变换,这时使用公式(3.7)
情况2:相机坐标系不变,世界坐标系按约定变换,这时使用公式(3.13)
情况3:相机坐标系按约定变换,世界坐标系不变,这时使用公式(3.16)
4 例子
现在有一个原始的相机位姿为T0
(4.1)
T0=[R0t00T1]
因为一些接口需要,我们希望将原始坐标系的x轴指向新坐标系的z轴反向,原坐标系的y轴指向新坐标系的x轴反向,原坐标系的z轴指向新坐标系y轴。根据需求,可得到变换矩阵的旋转部分
(4.2)
R=[0−10001−100]
根据需求,偏移部分为
(4.3)
t=[000]
因此最终得到扩展后的变换矩阵
(4.4)
T=[0−1000010−10000001]
按公式(3.7),可得到最终的坐标系变换结果
T1=TT0T−1
5 延伸
5.1 按指定向量旋转
很多时候,我们可能希望得到某些点以p0为原心,由向量n1 旋转到向量n2后的位置,这个本质上是求公式(3.2)当中的变换矩阵T。
很明显,第一步,可以将所有点以p0为原心,进行平移;第二步,由于向量n1 与向量n2叉乘后的单位轴向量a同时垂直于n1、n2,因此a可以作为旋转轴,而旋转角度,可以通过余弦公式计算得出。因此可先按如下方式确定对应变量:
(5.1)
a=n1×n2|n1||n2|θ=arccos(n1⋅n2|n1||n2|)
结合SLAM之李群李代数工具中的公式(1.5),可以得到旋转矩阵R,最终变换矩阵形式如下
(5.2)
T=[R−Rp001]
您好,我想问一下这些理论有对应的论文吗?
1. 不知道是否有对应论文,由于上面的理论是直接根据公式简单推导得到,因此不需要单独去参考其它论文(如果有的话)。 2. 需要注意,文章里提到的位姿矩阵约定是局部(相机)到世界的表示方式,在实际使用中可能使用的是世界到局部的表示方式,注意加以区分。
刚体变换不会改变空间中对象的相对位置信息。怎么理解?刚体变换为坐标系的旋转平移和旋转变换之后,对点不是发生了变化吗?
1. 这里的刚体变换,只是对坐标系进行变换,也就是变换不同表达方式,因为是刚体变换,因此物体之间本身的相对关系不改变。比如A物体在B物体左边10米处,不管坐标系怎么表示,A物体始终在B物体坐标10米处。 2. (整个)坐标系的旋转平移,改变的是坐标系下点的表示方式,其点的位置本身没有改变。注意区别,坐标系的表示方式的变换和实际中点对的刚体平移旋转变换。
那么,刚体变换和坐标系变换的区别在哪呢?关于左右坐标系的变换,我可以理解为相同的点下,将坐标系变换分为平移和旋转吗?
1、刚体变换描述的是变换属性的“刚体”性,而坐标系变换描述的是坐标系不同的表示方式,前者重点强调的是属性,后者重点强调的是表示方式,需要注意的是,坐标系变换也可以非刚性,比如有限元里的等参变换。
2、左右坐标系的变换,可以理解成坐标系表示方式的平移与旋转。