我正在寻找一种正确的方法来对一组欧拉角进行偏移。我想要这样一种变换:给定一个特定的欧拉角集(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的零矩阵。
尝试:
我愚蠢地尝试简单地减去偏移欧拉角,如下所示:
背景:
我正在使用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]
。那么你不能只在R
的每一行中使用例如[0,1,110/30]
吗?如果可以,那么显然有任意多个解决方案;如果不行,我就真的不明白你的问题了。 - Cleb[-1, 1, 43/6]
,这显然不会对(-105+45,110,-30)
返回(0, 0, 0)
。所以如果你能更详细地解释R
的期望属性,那就太好了!如果你能够详细定义R
的属性,你也可以尝试在这里提问。 - Cleb