本文主要是介绍【自动驾驶】26.【很清晰】旋转矩阵,欧拉角,四元数,旋转向量和齐次变换矩阵,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
原文链接:https://blog.csdn.net/varyshare/article/details/91899049
前言
这几个名词都是用来描述一个物体的位置和姿态的。它们之间可以相互转化,而且各有各的优点与缺点。我先把这几个名词之间的联系理清楚,然后再解释他们各自适合的领域以及为何需要他们。
1.旋转矩阵
旋转矩阵
的初衷就是人们希望给定一个向量x,然后我对它旋转,能直接通过矩阵乘法的形式得到旋转后的向量坐标。也就是说y=Ax。这个方便计算机计算,因此旋转矩阵常用于编程。旋转矩阵是一个正交矩阵:
而且行列式是1。
2.欧拉角
既然有了旋转矩阵
,那么为何还要欧拉角
呢?
这是因为我给你一个旋转矩阵,人看不懂它到底转了多少角度啊。计算机很容易算出来,但是对人来说非常困难。比如飞机驾驶员你让他以旋转矩阵的形式给飞机下指令,那人家不得疯了。而欧拉角那就非常直观,欧拉角就是我飞机头抬头多少(俯仰角pitch),向左拐还是向右拐(偏航角yaw),以及滚筒动作的角度(滚转角roll)。因此欧拉角一般是方便用户操作,或者程序员检查运算结果是否正确。
3.四元数
然后有了欧拉角
为何还要四元数
呢?
因为欧拉角有问题,即万向锁问题可以看这个解释万向锁视频。
欧拉角的意思是说旋转可以分解为绕机身,机翼,垂直机身三个轴旋转。注意了是依次旋转,每次旋转后的旋转轴姿态已经变化。看下图,比如你先绕机翼那个轴转90度,然后你会发现原先(第一幅图)的滚转角(即绕原先的机身转)与现在的偏航角(绕垂直机身的那个轴)重合了。也就是说滚转这个方向等与偏航了,两个自由度合并成一个了。这样一个麻烦就是如果一个给定旋转矩阵可能会计算出多个欧拉角。于是乎,数学家就用四元数
来代替欧拉角。
4.旋转向量
旋转向量其实和欧拉角类似也会存在万向锁的,任何只用三个变量来描述姿态的方法都会产生万向锁。旋转向量就是【方向与旋转轴相同,模为旋转角度】
的一个向量。之所以会用旋转向量是因为旋转矩阵用9个元素来描述三维的旋转,太浪费了。所以想用三个元素的向量来描述三维运动,这个向量就是旋转向量。
5.齐次变换矩阵
齐次变换矩阵就是既包含旋转又包含平移的变换矩阵(它是4x4),旋转矩阵R
只包含旋转(它是3x3),齐次变换矩阵的左上角是旋转矩阵R
,右侧那列是平移量T
。
这几个名词是可以相互转换的。我就不讲公式,我只讲转换的方法。
旋转矩阵变换到欧拉角、旋转向量
旋转矩阵它本质是把极坐标写成矩阵的形式,它可以计算出旋转的角度然后将角度分解得到欧拉角。旋转矩阵也可以转换到旋转向量,旋转向量的方向 是 旋转矩阵特征值为1的那个特征向量
。
为什么呢?因为旋转向量的方向是旋转轴重合也就是说这个向量绕旋转轴怎么旋转都不变,即R*n=n
,而这刚好是特征值为1时候的表达式。前面提到了旋转的角度是旋转向量的模。然后旋转的角度是根据rodrigues公式两边求trace(对角线元素求和)可以算出旋转的角度。
旋转向量变换到旋转矩阵、四元数
旋转向量变换到旋转矩阵是利用rodrigues公式.而变换到四元数是直接可以等价变换。接下来讲讲旋转向量怎么变换到四元数。
假设旋转向量的方向向量是 [ n x , n y , n z ] \color{red}[ n_x , n_y , n_z ] [nx,ny,nz],它的模是θ
,那么变换到的四元数为
同样四元数也很容易可以变换到旋转向量。
这篇关于【自动驾驶】26.【很清晰】旋转矩阵,欧拉角,四元数,旋转向量和齐次变换矩阵的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!