将四元数外部映射到Unity

时间:2015-10-07 01:45:12

标签: unity3d rotation quaternions

我正在尝试使用四元数将传感器的旋转映射到Unity,而我不能 似乎弄清楚为什么旋转没有正确映射。

我正在使用Adafruit BNO055以四元数的形式拉出绝对方向。该 可以找到他们的Quaternion实现的来源here。据我所知 四元数几乎没什么,我应该能够将四元数从传感器中拉出来 将它泵入Unity内的任何GameObject,以便它们共享相同的方向。如果我有一个循环 设置从传感器读取四元数据并将其泵入Unity,GameObject应该 完全像物理世界中的传感器一样旋转。不幸的是,这种情况并没有发生。

从传感器发送到Unity

的数据示例
w: 0.903564
x: 0.012207
y: 0.009094
z: -0.428223

从传感器发送的四元数是否不等于Unity中使用的四元数?如果没有,怎么样 我会正确地映射这些吗?

提前感谢您的帮助!

2 个答案:

答案 0 :(得分:2)

仅举例说明不同的转换(包括Unity和OpenGL) https://developers.google.com/project-tango/overview/coordinate-systems

我不知道您的设备和坐标符号,但您可以通过定向进行一些实验来恢复它。

转换的主要问题是,转换矩阵可能包含MIRRORING(-1矩阵分量)。并且只能通过重新排列旋转轴来解决。

答案 1 :(得分:0)

当我从逗号分隔列表中的外部传感器创建四元数时,这对我有用:

parts = SensorReceivedText.Split(',');
float x = Convert.ToSingle(parts[0]);
float y = Convert.ToSingle(parts[1]);
float z = Convert.ToSingle(parts[2]);
float w = Convert.ToSingle(parts[3]);
Quaternion rotation = new Quaternion(x, y, z, w);