旋转坐标轴还是旋转坐标?有什么区别?相信很多人都有过类似的问题,这里我来简单尝试着理解一下。
旋转矩阵的相关知识请查看维基百科旋转矩阵
需要注意的是 Roll Pitch Yaw 的定义:
这里的旋转矩阵是需要左乘的,而且以逆时针为正。
关于左乘和右乘:
R是一个旋转矩阵,X是一个三维列向量[x,y,z]'。
RX就是把X旋转。
(RX)'=X'*R',看R'就是一个右乘的旋转矩阵,但是左边必须要是行向量。
坐标轴的旋转:
下面来说坐标轴的旋转:A代表点,B代表坐标系,R代表坐标系各轴的旋转,C代表点在坐标系中的表示。
以二维坐标系为例,命名为B1,如图:
为理解方便,我们再假设有一个固定的世界坐标系G,和该坐标系是重合的。
现在将坐标系B1其绕原点顺时针旋转90度,旋转矩阵R1是:
R1 = [0 1 0;
-1 0 0;
0 0 1]
得到新的坐标系B2,如图:
从坐标系来看,B2=R1B1。B1和B2 都是在G中的坐标系表示。原来坐标系B1上的点A,在G中的坐标,记为C1,是 (1,0,0),旋转之后,A在G中的坐标是不变的(无论怎么旋转,A在世界坐标系中的位置都不会发生变化,但平移会发生变化),但是在B2中的坐标,记为C2,变成了(0,-1,0)。将其左乘A在B1中的坐标,就得到A在B2中坐标了。C2=R1C1,即A点在B2中的表示(A在B2中的向量表示)
这一点其实挺好解释的,因为B2相对于B1(也就是G)顺时针旋转了90度,那就相当于A点相对于B1到B2的变化是逆时针旋转了90度。逆时针旋转90度的矩阵,记为R2,是:
R2 = [0 -1 0;
1 0 0;
0 0 1]
R2实际就是R1的逆矩阵,这点也不难理解,R2R1X,就相当于先把X顺时针90度,再逆时针90度,还是X,即 R2R1X=X,R1 = inv(R2)。R2和R1都是针对G来说的。
仿佛有点规律了,RB1 = B2, 然后 C2 = inv(R)C1。
确实是这样,那怎么得到?我们来推导一下:
R*B1 = B2
这一步实际上做了一个基底的变换,基底变了,但是还有下面这个等式:
B1*C1 = B2*C2 //B1C1和B2C2得到的都是A点在G中的表示
也就是说在不同基底下,我们还有同样的值
于是可以求出 C2 = inv(B2)*B1*C1 = inv(B1)*inv(R)*B1*C1 //inv(RB1)=inv(B2)=inv(B1)inv(R)
等等,刚刚不是说C2 = inv(R)*C1的么?别急,B1实际上是一个单位矩阵,可以以同B1重合的G为参考系理解一下。于是:
C2 = inv(R)*C1 = R'*C1
旋转坐标系时旋转矩阵的列
- 第一列,旋转后的新X轴在原来的坐标系(x,y,z)下怎么表示(单位向量)
- 第二列,旋转后的新Y轴在原来的坐标系(x,y,z)下怎么表示(单位向量)
- 第三列,旋转后的新Z轴在原来的坐标系(x,y,z)下怎么表示(单位向量)
比如R1*B1之后:
- B2的X轴是在B1坐标系的(0 -1 0), X轴是原来的-Y轴
- B2的Y轴是在B1坐标系的(1 0 0),Y轴是原来的X轴
- B2的Z轴是在B1坐标系的(0 0 1),Z轴不变