旋转矩阵左右乘,弄清变换关系更重要

关于矩阵左乘和右乘的区别,看了不少数学解释,但这些解释对我个人来说是数字的游戏,对做有物理含义的应用帮助不是很大(也可能是我水平不够)。这里我们既谈左右乘,又抛开左右乘,重点看旋转矩阵的实际使用含义。

旋转矩阵的乘法,在我目前做的方向上主要有两个用途:

  • 求点的坐标(旋转矩阵和点相乘)
  • 求新的旋转矩阵(旋转矩阵和旋转矩阵相乘)

0. 旋转矩阵的基本推导

我们假设有一个固定坐标系o-xyz,其绕Z轴逆时针旋转a角度,得到新的移动坐标系o-x'y'z',如图所示。

注意这个变换关系的表述,是o-xyz通过旋转,得到新的坐标系o'-x'y'z',那么从原坐标系到新坐标的旋转矩阵为:

R_{O'O} = \begin{bmatrix} cosa & -sina \\ sina & cosa \end{bmatrix}

下标的表示顺序非常的用重要,表示从O代表的o-xyz,变换到O'代表的o'-x'y'z'的变换关系。

1. 点的坐标变换

弄清楚上面的坐标系之间旋转矩阵表达的实际含义,先来看点的坐标变换。实际上旋转矩阵或者变换矩阵和点相乘,只有一种乘法顺序,即矩阵在左,点坐标在右,对于点来说始终是左乘一个旋转或者变换矩阵。而引起点的坐标变换的原因只有两个,点所代表的向量变化了,点所在的坐标系变化了。这两种变换对应的公式其实是统一的。

1.1 坐标系不变,点变化(向量旋转)

 如上图所示,坐标系不变,点的位置经过旋转,到了一个新的位置(也可以看做向量的旋转)。计算公式为:

P' = Rz(a) \cdot P

这个不用多说,很符合我们的认知习惯,为了求出旋转后的P',需要知道原始点P,以及P如何变化到P'的旋转变换关系。我们把这个变化关系的顺序写的清楚一些,Rp'p表示从p点变换到p'点的变换关系,方便下面比较。

P' = Rp'p \cdot P

1.2点不变,坐标系变换

如下图所示,原始坐标系为o-xyz经过绕z轴旋转角度a,得到新的坐标系o-x'y'z'。这个和0.基本推导中的图一致。图中p点的绝对位置没有发生变化,但是p点在两个坐标系中的表示一定不同,即p点在两个坐标系中的坐标不同。已知p点在o-xyz的坐标,求p点在o-x'y'z'中的坐标。

这个应用非常的常见,在自动驾驶场景中,经常已知将传感器坐标系下的点,和传感器坐标到世界坐标系的变换矩阵,求这个点在世界坐标系下的位置。


 

计算公式为:

P' = Rz(a) \cdot P

一般的公式都会写成上面的形式,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在新坐标系下的坐标)

P' = Roo' \cdot P

2. 坐标系之间的变换

坐标系之间的变化涉及到左右乘的区别,但对于矩阵之间的乘法这种变化,明确下标表示和内项相消的数学表达,就可以忘掉左右乘。

2.1 关于矩阵及下标的描述

这个非常的重要,如果没有定义好矩阵下标和坐标系之间变化的关系,就会彻底陷入混乱。和上文中定义的方法一样。M_{1,2}表示把坐标系 2旋转变换到坐标系1的矩阵变换关系。

2.2 内项相消及连续乘法

对于矩阵乘法来说,是遵循内项相消的。也就是说M_{1,3} = M_{1,2} * M_{2,3}。这里,如果我们有坐标系3到坐标系2的矩阵变换关系M_{2,3},以及坐标系2到坐标系1的矩阵变换关系M_{1,2},就可以得到坐标系3转到坐标系1的变换矩阵了,即M_{1,3}

3. 既有点变换,又有坐标系变换

自动驾驶中经常涉及到这样的场景,已知世界坐标系到IMU坐标系的关系M_{imu,world}(这个通常可以从IMU中解算出来),雷达传感器坐标系到IMU坐标系的关系M_{imu,lidar},雷达传感器坐标系下的点P_{lidar}。需要求世界坐标系下的P点坐标。按照上面的推到,可以得到下面的公式:

P_{lidar}= M_{world,imu} * M_{imu,lidar}P_{world}

P_{world} =(M_{imu,world} ^{-1}* M_{imu,lidar}))^{T}P_{lidar}

4. 抛开内项相消,看矩阵左右乘

理论上如果遵循内项相消的原则,那么其实就不分什么左右乘(待继续补充)

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值