旋转矩阵
点,向量,坐标系
刚体不光有位置,还有自身的姿态.位置是指刚体在空间中的哪个地方,姿态是指刚体的朝向.
欧式变换
相机运动是一个刚体运动,它保证了同一个向量在各坐标系下的长度和夹角都不会发生变化,这种变换称为欧式变换.
假设有一组正交基为下某个向量的值为 ,
那么在下,这个向量的坐标为
有
于是有
-
意思是
定义为
在上式中,我们把两组基之间的内积定义为矩阵,这个矩阵刻画了旋转前后同一个向量的坐标变化关系,只要旋转时一样的,这个矩阵就是一样的,因此我们把称为旋转矩阵
另外,旋转矩阵是一个行列式为1的正交矩阵,反之亦然.
旋转矩阵的集合叫做特殊正交群群( Special Orthogonal Group) 定义如下:
上式中,是特殊正交群的意思,n为向量的维度,是单位矩阵.
综上,通过旋转矩阵,我们可以直接谈论两个坐标系之间的旋转变换,而不用再从基开始谈起.也就是说旋转矩阵可以描述相机的旋转.
且由于旋转矩阵为正交矩阵,它的逆和转置相同,故有
所以是的逆运算.
综上,向量,经过一次旋转(用描述)和一次平移t之后,得到的
其中t为平移向量.
变换矩阵与齐次坐标
假设进行两次变换:和,满足:
即向量a变成c为:
这样的形式在多次变换后会过于复杂,引入齐次坐标和变换矩阵重写式:
可以看到,我们在三维向量末尾加上了,使其变成了四维向量,称为齐次坐标.
称为变换矩阵:左上角为旋转矩阵,右上角为平移
将的齐次坐标用
有:
于是有
另外,在不致歧义的情况下,我们一般不区分齐次坐标和非齐次坐标的写法,也就是说,上式可以写成
对于变换T,具有特殊结构:左上角为旋转矩阵,右上角为平移向量,左下角为0,右下角为1,这种矩阵又称为特殊欧式群(Special Euclidean Grop):
T的逆为:
*: 齐次坐标,通过添加最后一维,我们用四个实数描述了一个三维向量,这显然多了一个自由度,齐次坐标中,某个点乘以一个常数k,得到的向量与原来相同,也就说,所以,但最后一项不为1时,我们可以将所有数除以最后一项,以获得标准坐标.
**:当我们使用时,默认是齐次坐标;当使用时,默认是非齐次坐标.
旋转向量和欧拉角
刚体旋转自由度:一一个刚体在空间任意运动时,可分解为质心O的平动和绕通过质心轴的转动
- 平动自由度:确定到质心的位置,需要三个坐标(x,y,z)
- 转动自由度: \三个正交的坐标轴上的旋转
旋转矩阵有9个量(3x3矩阵),却只能表达物体的旋转(3个自由度),也就是说:SO(3)的旋转矩阵有9个量,但每次旋转只有3个自由度;
同理,SE(3)有16个变量,可以表达6个自由度(旋转,平移).
综上,我们想知道有没有更紧凑的表达方式.
旋转向量
任意一个旋转,都可以用一个旋转轴和一个旋转角来刻画.于是,我们可以使用一个向量,其方向和旋转轴一致,而长度等于旋转角.这种向量称为旋转向量.(旋转轴过质心)
对于旋转矩阵,这种表示法只需要一个三维向量即可描述旋转.
同样的,对于变换矩阵,我们是有一个旋转向量和一个平移向量即可表示一个变换,此时正好为6维.
所以,旋转向量可以如下表示:
其中,n为单位旋转轴,为旋转角度.
旋转向量-->旋转矩阵
旋转向量和旋转矩阵的转换叫做罗德里格斯公式:
其中是单位矩阵,是向量到反对称的转换符.的定义如下:
旋转矩阵-->旋转向量
是矩阵的迹.
关于旋转轴,由于旋转轴向量在经过旋转之后,不发生改变,于是有:
根据线性代数的知识,我们可以得出转轴是矩阵特征值为1的特征向量.
欧拉角
无论是旋转矩阵,还是旋转向量都能描述旋转.但是,对人类却十分不直观.
欧拉角提供一种非常直观的方式来描述旋转--使用3个分离的转角,把一个旋转分解成3次绕不同轴的旋转.
航空中的偏航角,就是ZYX旋转
- 绕物体Z轴旋转,偏航角,yaw
- 绕旋转之后的Y轴旋转,俯仰角,pitch
- 绕旋转之后的X轴旋转,滚动角,roll
此时,可以用这样一个三维向量来描述任意旋转.
不同的欧拉叫是按照旋转轴的顺序来称呼的.
欧拉角具有奇异性问题,也就是万向锁问题:在俯仰角pitch为时,第一次旋转yaw与第三次roll将使用同一个轴,使得系统丢失一个自由度.
所以,欧拉角不适于插值和迭代,往往只用于人机交互.
四元数
旋转矩阵使用9个量描述3个自由度旋转,具有冗余性;欧拉角和旋转向量是紧凑的,但是具有奇异性;
事实上,我们找不到不带奇异性的三维向量描述方式.
在表达三维空间的旋转的时候,有一种类似于复数的代数:四元数.四元数是一种扩展复数,它即是紧凑的,又是没有奇异性的.虽然,四元数不够直观,计算也较为复杂.
一个四元数q拥有一个实部和三个虚部,下面式子把实部写在前面(有的写在后面):
为四元数的三个虚部,满足:
由于它的这种特殊表现形式,有时人们也用一个标量和一个向量来表示四元数.
其中
这里s称为四元数的实部,v称为虚部.
如果一个四元数的虚部为0,那么为实四元数,反之为虚四元数.
假设某个旋转是绕单位向量进行了角度为的旋转,那么该旋转的四元数表示为:
反之,从单位四元数中可以计算出对应的旋转轴和夹角:
上式给我们一种"转了一半"的感觉,事实上,任意旋转都可以由两个互为相反数的四元数表示,同理,取为0,得到一个没有任何旋转的四元数: