坐标系转换在很多方面都会用到,比如机器人中的骨骼关节间的空间关系,GIS中的坐标系,渲染和计算机视觉中的相机等,往往需要采用矩阵来实现不同坐标系间的转换。因此,这里主要涉及到几何和线性代数两方面的数学知识。
个人一直想把这块知识点梳理一下,形成一个自我的理解体系。正巧前阵子有同事提到了齐次坐标,不妨以此为动机,形成这一系列。本篇主要针对旋转。
首先,我们先定义两个坐标系,一个是固定坐标系(fixed),也可以称为全球坐标系(global),或世界坐标系(world),其特点是该坐标系是绝对的,一旦确立就不再变化,我们记为
。另一个则是移动坐标系(moving),也称为本地坐标系(local)或自身坐标系(body),其特点是会移动(旋转R,平移T,缩放S,RTS),我们记为
。本文主要针对旋转,自然也分为两种情况,相对
的旋转,或相对
的旋转。
上图是坐标系
相对于
旋转
对应的结果及矩阵。同理,相对于
旋转
对应的矩阵分别是:
并且,该矩阵为正交矩阵:
这里,如果坐标系M绕坐标系F的某一个轴
旋转
,其中
和
分别对应某一点相对于
和
的坐标位置,则转换关系如下:
例子1,初始是
,
绕着
旋转
,此时,
坐标系上的一点
对应
坐标系的位置
是多少?
求解如下:
同理,初始是
,然后
绕着
进行了一系列的旋转
,此时,空间上同一个点,对应M和F坐标系下的空间位置分别记作
,满足公式:
全球坐标系下,针对不同轴的旋转,这里有一个对应的roll-pitch-yaw:
刚才我们只讨论了围绕
坐标系的旋转并给出了对应的矩阵,这里,如果我们相对
坐标系旋转,分别得到对应的三个矩阵:
同理,如果此时
绕着
旋转
,
分别对应某一点相对于
和
的坐标位置,则转换关系如下:
例子2,初始是
,
绕着
旋转
,此时,
坐标系上的一点
对应
坐标系的位置
是多少?
求解如下:
例子3,初始是
,
绕着
旋转
,此时,
坐标系上的一点
对应
坐标系的位置
是多少?
求解如下:
同理,初始是
,然后
绕着
进行了一系列的旋转
,此时,空间上同一个点,对应M和F坐标系下的空间位置分别记作
,满足公式:
这样,我们可以把绕固定坐标系
和移动坐标系
旋转综合在一起,可得如下
- 初始是
,相当于M绕F旋转一个单位矩阵:
- 然后,M旋转
:
- 如果相对于
:
- 如果相对于
:
这里,R用于将
坐标系下的一点
转换为相对于
坐标系下的点
。如上的规则应该算是本篇内容最重要的部分了。
同样,在局部坐标系下,针对不同轴的旋转,这里有一个对应的roll-pitch-yaw:
基于如上的旋转,有的是基于
,有的则是基于
,我们可以基于一系列的旋转复合形成该物体的朝向(orientation)。这里就有了欧拉角这个概念:
- 绕
旋转
,称为precession
- 绕
旋转
,称为nutation
- 绕
旋转
,称为spin
欧拉角对应的过程如下图所示:
(1)precession:
(2)nutation:
(3)spin:
将R展开:
通过本章,我们可以得到一个结论:
对于原点相同的任意两个坐标系
,空间中相同的一个点,分别对应坐标系下的位置为
,必然存在一个转换矩阵R,满足两者之间的映射关系:
坐标系旋转的内容基本介绍完毕,下一篇继续,基于rotation,最终将确定物体的朝向,orientation这部分的内容会在下一篇详细介绍。