位姿的刚体变换与坐标系转换

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=T0T1

注意,这里的位姿T0T1是世界坐标系到相机坐标系的表示方式, 即如果一个世界坐标系的点p0,通过公式T0p0将变换到相机坐标系下的位置。如果T0T1相机坐标系到世界坐标系的表示方式, 即如果一个世界坐标系的点p0,通过公式T10p0将变换到相机坐标系下的位置,那么根据公式(2.4),可以得到如下位姿变换结果

(2.5)

T1=TT0

3 坐标系变换
有时我们会在左右手坐标系之间进行转换,有时我们需要将x、y轴进行对调,有时我们需要将当前坐标系按某种形式进行旋转……这一系列的坐标系变换,可以看成一个镜像、旋转、偏移的组合,这里以如下的变换矩阵来表示 
(3.1)
T=[Rt0T1]


注意:这里的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)

(T1TTT0)p0=0


由于对任意p0均要满足公式(3.6),因此有 
(3.7)

T1=TT0T1

对(3.7)进行展开有   
(3.8)

[R1t10T1]=[RR0R1Rt0+tRR0R1t0T1]

即旋转部分与偏移部分的变换结果分别为 
(3.9)

R1=RR0R1t1=Rt0+tRR0R1t

特别地,当t=0时,有 
(3.10)
R1=RR0R1t1=Rt0

 

3.2.2 相机坐标系不变,世界坐标系按约定变换

这里同样使用3.2.1当中的符号表达,由于这里约定相机坐标系不变,因此(3.5)式变为

(3.11)

p=T1p1

由公式(3.2),(3.3),(3.11)可以得到

(3.12)

(T1TT0)p0=0

由于对任意p0均要满足公式(3.12),因此有 
(3.13)

T1=T0T1

 

3.2.3 相机坐标系按约定变换,世界坐标系不变

这里同样使用3.2.1当中的符号表达,由于这里约定世界坐标系不变,因此(3.5)式变为

(3.14)

p=T1p0

由公式(3.3),(3.4),(3.14)可以得到

(3.15)

(TT0T1)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=[010001100]


根据需求,偏移部分为 
(4.3)

t=[000]


因此最终得到扩展后的变换矩阵 
(4.4)
T=[0100001010000001]

按公式(3.7),可得到最终的坐标系变换结果 
T1=TT0T1

 

5 延伸

5.1 按指定向量旋转

很多时候,我们可能希望得到某些点以p0为原心,由向量n1 旋转到向量n2后的位置,这个本质上是求公式(3.2)当中的变换矩阵T

很明显,第一步,可以将所有点以p0为原心,进行平移;第二步,由于向量n1 与向量n2叉乘后的单位轴向量a同时垂直于n1n2,因此a可以作为旋转轴,而旋转角度,可以通过余弦公式计算得出。因此可先按如下方式确定对应变量:

(5.1)

a=n1×n2|n1||n2|θ=arccos(n1n2|n1||n2|)

结合SLAM之李群李代数工具中的公式(1.5),可以得到旋转矩阵R,最终变换矩阵形式如下

(5.2)

T=[RRp001]

6 thoughts to “位姿的刚体变换与坐标系转换”

    1. 1. 不知道是否有对应论文,由于上面的理论是直接根据公式简单推导得到,因此不需要单独去参考其它论文(如果有的话)。 2. 需要注意,文章里提到的位姿矩阵约定是局部(相机)到世界的表示方式,在实际使用中可能使用的是世界到局部的表示方式,注意加以区分。

  1. 刚体变换不会改变空间中对象的相对位置信息。怎么理解?刚体变换为坐标系的旋转平移和旋转变换之后,对点不是发生了变化吗?

    1. 1. 这里的刚体变换,只是对坐标系进行变换,也就是变换不同表达方式,因为是刚体变换,因此物体之间本身的相对关系不改变。比如A物体在B物体左边10米处,不管坐标系怎么表示,A物体始终在B物体坐标10米处。 2. (整个)坐标系的旋转平移,改变的是坐标系下点的表示方式,其点的位置本身没有改变。注意区别,坐标系的表示方式的变换和实际中点对的刚体平移旋转变换。

      1. 那么,刚体变换和坐标系变换的区别在哪呢?关于左右坐标系的变换,我可以理解为相同的点下,将坐标系变换分为平移和旋转吗?

         

        1. 1、刚体变换描述的是变换属性的“刚体”性,而坐标系变换描述的是坐标系不同的表示方式,前者重点强调的是属性,后者重点强调的是表示方式,需要注意的是,坐标系变换也可以非刚性,比如有限元里的等参变换。

          2、左右坐标系的变换,可以理解成坐标系表示方式的平移与旋转。

回复 匿名 取消回复

您的电子邮箱地址不会被公开。

Rich Text Editor, comment