提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
前言
看代码的时候,发现出现了两种不同的求pitch的函数的计算方式,于是开始了追溯。
一、浅谈欧拉角
1 前因
首先,这套代码由接入了第三方库。本身主要使用四元数表示旋转,而第三方库使用欧拉角进行计算(Z-X-Y外旋),这就涉及到了旋转表示方式的转换;而且不巧的是用了欧拉角这种虽然贴近人的认知但是理解上容易混淆、计算上容易出错的表示方式。
正如我特意标出来的“Z-X-Y外旋”,我的疑问就出在这儿。代码对第三方库的接入其实比较简单,按照“Z-X-Y外旋”的方式定义好四元数和欧拉角的转换关系就可以了,类似于借助旋转矩阵R=RyRxRz关于角度的展开式,利用反三角函数求欧拉角角度。问题是本体代码其实用的X-Y-Z外旋,但是直接使用了Z-X-Y外旋获取当前pitch,明显是不一致的两套转换,这有点危险。
2 欧拉角
为什么欧拉角会产生这种风险呢?
答案:绕轴方式和旋转顺序的多样性,且得到的姿态结果是不同的。
欧拉角的绕轴方式有两种:外旋–绕固定轴旋转(如自定义的世界坐标系)和内旋–绕动轴旋转(自身的本体轴)。前者坐标轴固定不变,后者随着旋转坐标轴不断变换位置。控制变量法,我们先固定旋转顺序为X-Y-Z。那么:
外旋求得的旋转矩阵:R=