关于矩阵左乘和右乘的区别,看了不少数学解释,但这些解释对我个人来说是数字的游戏,对做有物理含义的应用帮助不是很大(也可能是我水平不够)。这里我们既谈左右乘,又抛开左右乘,重点看旋转矩阵的实际使用含义。
旋转矩阵的乘法,在我目前做的方向上主要有两个用途:
- 求点的坐标(旋转矩阵和点相乘)
- 求新的旋转矩阵(旋转矩阵和旋转矩阵相乘)
0. 旋转矩阵的基本推导
我们假设有一个固定坐标系o-xyz,其绕Z轴逆时针旋转a角度,得到新的移动坐标系o-x'y'z',如图所示。
注意这个变换关系的表述,是o-xyz通过旋转,得到新的坐标系o'-x'y'z',那么从原坐标系到新坐标的旋转矩阵为:
下标的表示顺序非常的用重要,表示从O代表的o-xyz,变换到O'代表的o'-x'y'z'的变换关系。
1. 点的坐标变换
弄清楚上面的坐标系之间旋转矩阵表达的实际含义,先来看点的坐标变换。实际上旋转矩阵或者变换矩阵和点相乘,只有一种乘法顺序,即矩阵在左,点坐标在右,对于点来说始终是左乘一个旋转或者变换矩阵。而引起点的坐标变换的原因只有两个,点所代表的向量变化了,点所在的坐标系变化了。这两种变换对应的公式其实是统一的。
1.1 坐标系不变,点变化(向量旋转)
如上图所示,坐标系不变,点的位置经过旋转,到了一个新的位置(也可以看做向量的旋转)。计算公式为:
这个不用多说,很符合我们的认知习惯,为了求出旋转后的P',需要知道原始点P,以及P如何变化到P'的旋转变换关系。我们把这个变化关系的顺序写的清楚一些,Rp'p表示从p点变换到p'点的变换关系,方便下面比较。
1.2点不变,坐标系变换
如下图所示,原始坐标系为o-xyz经过绕z轴旋转角度a,得到新的坐标系o-x'y'z'。这个和0.基本推导中的图一致。图中p点的绝对位置没有发生变化,但是p点在两个坐标系中的表示一定不同,即p点在两个坐标系中的坐标不同。已知p点在o-xyz的坐标,求p点在o-x'y'z'中的坐标。
这个应用非常的常见,在自动驾驶场景中,经常已知将传感器坐标系下的点,和传感器坐标到世界坐标系的变换矩阵,求这个点在世界坐标系下的位置。
计算公式为:
一般的公式都会写成上面的形式,P点是o-xyz坐标系下的坐标,P'是o-x'y'z'坐标系下的坐标。R实际上是o-x'y'z'变换到o-xyz的变换关系。换成下面的写法(Roo'表示o-xyz变换到o-x'y'z'的变换,这个下标的写法和定义非常的重要)这里的区别是,1.1中的旋转是主动旋转,1.2中的旋转是被动旋转。虽然下面的写法有点违背常规认知,但按照规定的解读确实是P点左乘一个从新坐标系变换到原坐标系的旋转矩阵,才能得到P’(P在新坐标系下的坐标)。
2. 坐标系之间的变换
坐标系之间的变化涉及到左右乘的区别,但对于矩阵之间的乘法这种变化,明确下标表示和内项相消的数学表达,就可以忘掉左右乘。
2.1 关于矩阵及下标的描述
这个非常的重要,如果没有定义好矩阵下标和坐标系之间变化的关系,就会彻底陷入混乱。和上文中定义的方法一样。表示把坐标系 2旋转变换到坐标系1的矩阵变换关系。
2.2 内项相消及连续乘法
对于矩阵乘法来说,是遵循内项相消的。也就是说。这里,如果我们有坐标系3到坐标系2的矩阵变换关系,以及坐标系2到坐标系1的矩阵变换关系,就可以得到坐标系3转到坐标系1的变换矩阵了,即。
3. 既有点变换,又有坐标系变换
自动驾驶中经常涉及到这样的场景,已知世界坐标系到IMU坐标系的关系(这个通常可以从IMU中解算出来),雷达传感器坐标系到IMU坐标系的关系,雷达传感器坐标系下的点。需要求世界坐标系下的P点坐标。按照上面的推到,可以得到下面的公式:
4. 抛开内项相消,看矩阵左右乘
理论上如果遵循内项相消的原则,那么其实就不分什么左右乘(待继续补充)