首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >有四元数和欧拉角,我如何计算测量装置的绝对角度(与蟒蛇)?

有四元数和欧拉角,我如何计算测量装置的绝对角度(与蟒蛇)?
EN

Stack Overflow用户
提问于 2020-08-29 09:38:15
回答 1查看 1K关注 0票数 2

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

左是侧面视图,右边是顶部视图。我想要测量的可能的旋转被画成箭头。

目标显示两个值,一个表示臂角,另一个表示盘旋转角度,都在-180度和180度之间。

测量装置数据的旋转序列为ZYX (滚动、俯仰、偏航),四元数为WXYZ。X向东为正,Y为北,Z为顶。测量装置本身的旋转顺序不是固定的(臂和盘的运动可以混合)。

我知道欧拉角是相对于物体的,因此当物体旋转时会发生变化。此外,我知道旋转顺序很重要。我读到,倒转旋转顺序(到XYZ)会给我外在的旋转(=根据世界上不变的轴而不是物体的内在轴来获得物体的相同的末端方向),但是我不知道这是否/如何可以用来解决我的问题。

我没有找到任何python函数来实现我的目标,也不理解走这条路线所需的数学。我是不是忽略了解决那个问题的简单方法?如果没有,你会如何处理它?

EDIT1:找到了一个计算臂角的解决方案

  1. 定义了基矢量(0,0,1),即中立位置的z轴(即臂与地球平行),
  2. 通过将器件四元数定义的自转方向应用到基本矢量
  3. 中,得到电流z轴,它使用arccos(numpy.clip(rotatedVectorZ,baseVectorZ),-1.0,1.0)来计算初始z轴与旋转z轴之间的夹角,即等于臂角。

计算的角度从来都不是负的,所以每个值都有两个可能的位置,但这对我的情况来说就足够了。

对于计算旋转角度的,我的想法是将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

  • Calculate

  • 定义基向量(1,0,0),它是中性位置的x轴(即磁盘没有旋转),

  • 通过将设备的四元数定义的旋转方向应用于臂旋转的基准轴,通过计算垂直于原始z轴( 0,0,1)和电流z轴(等于0,0,1 )的矢量,得到电流x轴,并计算将电流z轴旋转到原始z轴(0,0,1)的四元数的四元数。1)

  • 使用该四元数旋转当前的x轴(参见步骤2)。这模拟了一个手臂运动到与earth.

  • Calculate平行的位置,这个新的x轴和基x轴(1,0,0)

之间的夹角。

现在我们有了180度空间内圆盘的旋转角度。

编辑3:找到了的最终解决方案,用于获得0到360度之间旋转的角度。不使用点积的arccos,我们可以使用arctan2(行列式,点(当前_x-矢量,基_x-轴)),因为这两个向量现在都在同一个平面上(z为0)。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 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)之间的角度。

有关更多细节,请参阅我在顶部的原始问题帖子。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63645526

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档