2016-05-17 75 views
1

我已經在機器人上橫向放置了一個Google Project Tango設備,並且希望從onPoseAvailable()事件偵聽器獲取標題。我知道框架返回API中描述的四元數。從四元數轉爲度(0 - 360度)

我嘗試了很多將四元數轉換爲度數的度量。我唯一感興趣的定位軸是yhttps://developers.google.com/project-tango/overview/coordinate-systems#project_tango_coordinate_systems),它決定了我的機器人的標題。

我的第一種方法是使用TYPE_ROTATION_VECTOR,TYPE_GYROSCOPETYPE_ORIENTATION(depricated)。但由此產生的價值是無法使用的。後來我讀了Tango在磁傳感器方面存在的主要問題(How to detect an absolute rotation of an android device

這就是從探戈本身切換到姿勢數據的原因。但這裏也一樣。無論是相當火箭科學的適當的結果或探戈也有重大問題在這裏。我閱讀了所有的stackoverflow文章以及我在互聯網上發現的幾乎所有內容。我重新實現了幾乎所有我找到的代碼。但對於我目前的情況來說,沒有一部分能按預期工作。對於其他軸的其他運動,它是!

我嘗試了以下內容:

或者是還有另一種確定機器人應用旋轉的方法嗎? (只是標題)。我想要達到的唯一目標就是轉動一個預定義的角度(以度爲單位)。大多數情況下我只想向右或向左轉(90°)。

如果任何人都可以提供一段工作代碼(定位Google Project Tango設備)將非常有幫助。用這個已經失去了日子。對於其他Android設備,我已經很快找到了解決方案。不排除,該設備有其他重大錯誤。

回答

2

試試看看這個代碼。請注意,計算的方向與服務開始時的設備方向有關。

double orientationRoll = Math.toDegrees(Math.atan2(
      2.0 * (rotation[TangoPoseData.INDEX_ROTATION_X] * rotation[TangoPoseData.INDEX_ROTATION_Y] + rotation[TangoPoseData.INDEX_ROTATION_W] * rotation[TangoPoseData.INDEX_ROTATION_Z]), 
      Math.pow(rotation[TangoPoseData.INDEX_ROTATION_W], 2) + Math.pow(rotation[TangoPoseData.INDEX_ROTATION_X], 2) - Math.pow(rotation[TangoPoseData.INDEX_ROTATION_Y], 2) - Math.pow(rotation[TangoPoseData.INDEX_ROTATION_Z], 2) 
    )); 
+0

非常感謝你......正是我在找的東西。沒有機會由我自己推導出這個公式。 – dannyyy