2015-10-07 119 views
1

我試圖將旋轉從一個傳感器映射到使用四元數的Unity,並且我不能 似乎弄清楚爲什麼旋轉映射不正確。將四元數映射到Unity

我使用Adafruit BNO055以四元數的形式拉絕對方向。它們的四元數實現的源碼 可以在here找到。從我所瞭解的 四元數中,我幾乎什麼都不需要,我應該能夠將四元數從傳感器中拉出來,並將其泵入Unity中的任何GameObject中,以便它們共享相同的方向。如果我有一個循環 設置,從傳感器讀取四元數據並將其傳送到Unity,則GameObject應該像物理世界中的傳感器一樣旋轉。不幸的是,這沒有發生。

從傳感器發送到統一

數據
w: 0.903564 
x: 0.012207 
y: 0.009094 
z: -0.428223 

是對四元數從傳感器不等於在Unity使用的四元發送的一個例子?如果不是,我會怎樣去改進這些映射?

在此先感謝您的幫助!

+0

單位四元數被拉出傳感器。沒有特殊類型的四元數。檢查你的旋轉邏輯(例如,用四元數乘法運算) –

+0

@JinbomHeo你能詳細說一下檢查你的旋轉邏輯嗎?我基本上是說object.rotation = new Quaternion(w,x,y,z) – nathansizemore

+0

Unity quaternion的構造函數是新的Quaternion(x,y,z,w),而不是w,x,y,z。並且可能存在相對旋轉值。如果是這種情況,你應該是object.rotation = object.rotation *新的四元數(x,y,z,w)。 –

回答

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); 
+0

創建四元數我沒有問題,它確保四元數匹配。 – nathansizemore

+0

我只是確保你不會因爲轉換而失去精確度。 – peterept