从左手坐标系到右手坐标系的变换
该博客主要参照论文:
链接:https://pan.baidu.com/s/1LzP2UNIHCm8RPg2eQX0rdQ
提取码:hiuc
文章目录
左手坐标系和右手坐标系之间的差异就是某一个坐标轴的方向取反,上图中是X轴取反。
和论文原文保持一致,我们以X轴取反为例分析,如何从左手坐标系转换到右手坐标系。其他的情况可以据此类推。
1.坐标点的转换
可以从图中看出,同一个小黑点,在左手坐标系中的坐标是(x,y,z)
,在右手坐标系中的坐标就是(x,y,-z)
。
图中显示了左手坐标系中的点有一个正的z分量。在右手坐标系中,观察z分量必须为负。在矩阵向量形式中,从左手点q’到右手点qr的转换是
注意啦 又要划重点啦!
此处坐标点使用的是列向量,列向量左乘在矩阵之后。行向量左乘矩阵、列向量有乘矩阵存在如下区别:AT=B
==>T'A'=B'
(其中A
和B
是点坐标组成的行向量,A'
和B'
则是转置后所得列向量,T
是矩阵)
上面的S_z矩阵具体计算如下所示:
所以,点坐标从左手坐标系转化到右手坐标系中,只需要对XYZ中某一个分量取反。例如将Z轴取反。
2. 旋转的转换
2.1 Conversion of Heading
首先,讲一下Heading(航向)是啥。绕Y轴的旋转就是Heading。
如果旋转h角度,对应的旋转矩阵如下,该矩阵在位姿控制领域也可以叫航向矩阵:
划重点啦
首先,此处的矩阵是在左手坐标系中!! 有可能你会发现这个矩阵为啥和有的地方的讲的是转置的关系。
这就是行向量左乘矩阵、列向量右乘矩阵存在如下区别:AT=B
==>T'A'=B'
造成的差异
结论就是:上述矩阵是①左手坐标系中列向量右乘时使用,表示绕Y轴旋转h度,也可以是②右手坐标系中行向量左乘时使用,表示绕Y轴旋转h度。
划重点
当然,此处使用的是①。本文所有的讲解都是以左手坐标系为主、以列向量右乘为要求。
引入航向Pitch矩阵作为一种存储旋转坐标方向的简便方法。
该矩阵具有双重功能,因为它还可用于显示原始坐标系中的点(x;y;z)如何旋转到点(x0;y0;z0)。如下所示,
在左手坐标系中,上述等式可以表示为:
当把点Q_l(x,y,z)
和点Q'_l(x', y', z')
都转化到右手坐标系中时,点的坐标变成了Q_r(x,y,-z)
和Q'_r(x',y',-z')
,那么原本的航向矩阵H_l
已经无法使得原等式成立。下面重新推导计算的等式:
结论: 相对于左手坐标系,右手坐标系中的航向矩阵转化为:H_r = S_z H_l S_z
2.1 Conversion of Pitch
有了Heading矩阵转换的讲解,此处直接粘贴论文,不做中文讲解。
2.1 Conversion of Bank
3. 旋转变换的组合
4.仿射变换的转换
总结
同一个物体在左手坐标系中描述(位姿描述=位置+姿态)是一种形式,换到右手坐标系中描述又是另一种形式。
位置描述的变换是相对简单的,只需要将某一个坐标轴的值取反,也就是与S_z
矩阵作用。
姿态描述的变换则需要结合位置描述,原本左手系中描述姿态的旋转矩阵为R_l
,转换到右手系中,则为S_z ·R_l·S_z
。