,是一个测量装置,给我四元数和欧拉角。测量装置安装在盘片上,盘本身安装在臂上。手臂可以上下旋转,而固定在一端,约240度,因为它是坐在一个最大的。圆盘可以顺时针旋转,也可以逆时针旋转,两个方向都可以无限旋转。

左是侧面视图,右边是顶部视图。我想要测量的可能的旋转被画成箭头。
目标显示两个值,一个表示臂角,另一个表示盘旋转角度,都在-180度和180度之间。
测量装置数据的旋转序列为ZYX (滚动、俯仰、偏航),四元数为WXYZ。X向东为正,Y为北,Z为顶。测量装置本身的旋转顺序不是固定的(臂和盘的运动可以混合)。
我知道欧拉角是相对于物体的,因此当物体旋转时会发生变化。此外,我知道旋转顺序很重要。我读到,倒转旋转顺序(到XYZ)会给我外在的旋转(=根据世界上不变的轴而不是物体的内在轴来获得物体的相同的末端方向),但是我不知道这是否/如何可以用来解决我的问题。
我没有找到任何python函数来实现我的目标,也不理解走这条路线所需的数学。我是不是忽略了解决那个问题的简单方法?如果没有,你会如何处理它?
EDIT1:找到了一个计算臂角的解决方案
计算的角度从来都不是负的,所以每个值都有两个可能的位置,但这对我的情况来说就足够了。
对于计算旋转角度的,我的想法是将x矢量投影到x-y平面,将z设为0,然后将矢量归一化,然后计算(1,0,0)轴与投影矢量之间的角度,但这是行不通的,因为臂角有接近90度的偏移。
现在我正在考虑旋转设备的x,y,z坐标(通过将四元数定义的旋转应用到每个向量(1,0,0,1,0和(0,0,1))的球面中,使z轴对齐,这将使我能够计算原始x轴(1,0,0,0)和旋转的x轴之间的差值,但我不确定这是否符合预期。
编辑2:发现了一种工作方法,用于确定磁盘旋转角度在0到180度之间:
vector
之间的夹角。
现在我们有了180度空间内圆盘的旋转角度。
编辑3:找到了的最终解决方案,用于获得0到360度之间旋转的角度。不使用点积的arccos,我们可以使用arctan2(行列式,点(当前_x-矢量,基_x-轴)),因为这两个向量现在都在同一个平面上(z为0)。
发布于 2020-09-07 18:00:11
臂角:计算基z轴(0,0,1)与当前z轴之间的夹角(这是设备的四元数对基z轴(0,0,1)的应用)。
圆盘旋转角:通过计算两个归一化向量之间的交叉积来计算垂直于器件的基z轴和当前z轴的轴。然后用装置的四元数旋转基x轴(0,0,1),然后沿着刚刚计算的垂直轴旋转一度,其中a是我们刚开始计算的臂角。现在我们可以计算出两次旋转的x轴和原来的x轴(0,0,1)之间的角度。
有关更多细节,请参阅我在顶部的原始问题帖子。
https://stackoverflow.com/questions/63645526
复制相似问题