【发布时间】:2016-03-04 15:10:54
【问题描述】:
我正在寻找将偏移量应用于一组欧拉旋转的正确方法。我想在给定一组特定的欧拉角(x1,y1,z1)的情况下进行转换,如果我对它们进行转换,我会得到一个(0,0,0)的欧拉序列。转换后的所有其他欧拉序列 (xi,yi,zi) 将表现得像 (x1,y1,z1) 是 (0,0,0)。
背景:
我正在使用 Oculus DK2 HMD 来显示虚拟环境(Vizard 5、Python 2.7.5),同时使用 Vicon 动作捕捉系统 (Nexus 2) 来更新位置和方向。我可以从 Vicon 系统获得 HMD 的欧拉角(来自标记集群,而不是 DK2 陀螺仪),但是当面向我想要的 (0,0,0) 方向时,HMD 具有非零旋转序列。
问题:
我很难考虑什么转换(旋转矩阵?)我可以找到可以采用 (-105, 110, -30) 之类的序列并使其成为 (0,0,0) 而不是无用的零矩阵。如果旋转矩阵全为零,则任何序列都将转换为 (0,0,0))。我想到的公式是(请忽略语法):
[0,0,0] = (3x3)R*(3x1)[-105,110,-30] 什么是 R? R 不能是 3x3 零矩阵。
尝试:
我愚蠢地试图像这样简单地减去偏离欧拉角:
import viz
viz.go()
navigationNode = viz.addGroup() #create node
viewLink = viz.link(navigationNode, viz.MainView) #link it to the main view
#I am not showing how I get variables HMDX HMDY HMDZ but it's not important for this question
navigationNode.setEuler(HMDRZ-90,HMDRX+180,-1*(HMDRY)+30) #update the view orientation
唉,
我确信这是可能的,事实上我过去做过类似的事情,我必须在校准位置将标记集群转换为刚体的框架。但在这种情况下,我就是无法绕过琐碎的解决方案(零矩阵)。如果碰巧有人会使用四元数来解释这一点,我也可以使用它们。
【问题讨论】:
-
我可能在这里错过了一些非常基本的东西,但是假设您有
[-105,110,-30],并希望使用矩阵R将其转换为[0,0,0]。你能不能不只使用例如[0, 1, 110/30]在R的每一行中!?如果是这样,那么对于这个问题显然有很多任意的解决方案;如果不是,我真的不明白你的问题。 -
好的,您能否更详细地解释一下您真正在寻找什么?我只举了一个随意的例子;您也可以选择
[-1, 1, 43/6],然后显然不会为(-105+45,110,-30)返回(0, 0, 0)。因此,如果您能更详细地解释R所需的属性,那就太好了!如果你能详细定义R的属性,你也可以试试here。 -
@Cleb 很抱歉造成混淆,我认为您所描述的是通过将向量与旋转矩阵相乘来转换向量。有许多矩阵 R 可以将向量变为零。但是,对于欧拉角,您不能简单地将欧拉角乘以旋转矩阵。那是没有意义的。相反,您与另一个旋转矩阵相乘并使用逆运动学来获得新的欧拉角。我希望我说得通。感谢您的回复
-
好的,谢谢你的解释;我可以学到一些东西:)
标签: python-2.7 quaternions rotational-matrices euler-angles vizard