在前四个系列里分别介绍了轴角法/四元数/欧拉角/旋转矩阵,他们分成了两个帮派,轴角法和四元数 VS 欧拉角和旋转矩阵。最后这一篇介绍一下二者之间的联系与相互转化。
其中二者的纽带之一就是----罗德里格斯公式(Rodrigues' rotation formula)
如果三维向量v绕着单位向量K(也就是旋转轴)旋转角度θ,那么旋转后的向量v的应该如何表示呢?
罗德里格斯公式就是解决这样一个问题,其中,公式如下:
在旋转矩阵系列中讲过旋转矩阵可以理解为三个坐标轴在另外一个坐标系下的表示,所以,对三个坐标轴均使用以上的旋转公式,整理之后, 就可以得出旋转矩阵了。
旋转轴和旋转角,这就是轴角法/四元数的组成,因此,罗德里格斯公式建立了轴角法/四元数到旋转矩阵之间的转化关系,旋转矩阵求出之后,欧拉角也就同样求出来了。
罗德里格斯公式更加方便之处在于,在这种情况下,可以不用四元数的计算, 直接利用此公式对向量进行旋转,十分的方便。
旋转矩阵和四元数之间的相互转换
为什么我们仅仅说四元数和旋转矩阵之间的相互转化呢?因为二者代表了相应的数学计算方法,只要知道四元数或者旋转矩阵了,就很容易求出相应的轴角法和欧拉角了。
四元数转化为欧拉角:
也可以写为:
第二种的计算量更小一点,二者是等价的。
旋转矩阵转化为四元数:
旋转矩阵有一条性质,它的迹(对角线元素之和)为1 + 2 cos(θ)
因此可以直接求出旋转角度,也就求出了四元数的第一个数值。
也可用利用上一个公式之家相加推导出。
因此q0为:
又因为
因此也可求出q1.
以此类推:
其中的符号确定如下:
q0取正取负都可以,建议取正。
欧拉角转化为旋转矩阵:
维基百科中给出了12种欧拉角分别转化为旋转矩阵的公式:
旋转矩阵转化为欧拉角:
这是比较麻烦的,很容易出现问题,这里给出常用的zyx转序欧拉角转化伪代码:
其他转序的欧拉角与其转化相似,都是以仅仅有sin/cos那一项为突破口。
具体参见附录1
专栏里每一篇都是我一个字一个字打的,都是我认为的原创干货。
欢迎指正讨论,转载请注明,认同请点赞。
这个系列的文章很容易出错,希望大佬们多多指正补充。
仅仅收藏是学不会的,还得点赞。
参考
https://www.gregslabaugh.net/publications/euler.pdf
https://www.andre-gaschler.com/rotationconverter/
https://blog.csdn.net/shenshike
评论(0)
您还未登录,请登录后发表或查看评论