簡體   English   中英

Android中的旋轉矢量傳感器和方向傳感器之間的概念差異是什么?

[英]What's the conceptual difference between rotation vector sensor and orientation sensor in Android?

Android提供旋轉矢量傳感器和方向傳感器。 我知道它們會返回不同的數據,因為對於矢量傳感器,我們有角度,在方向傳感器中我們有角度。 但是概念上的區別是什么? 我從文檔中無法理解。 哪一個提供了三維空間中設備的方向? 我糊塗了!

較舊的ORIENTATION傳感器使用三個角度報告方向。 這種坐標系統的問題在於它遭受“萬向節鎖定”:當實際方向矢量接近垂直時,其中一個坐標變為90或-90度,其余兩個坐標變得無法解釋或危險地非規范化。

較新的ROTATION傳感器使用四分之一坐標報告方向,這些坐標使用起來更復雜,但不會受到萬向節鎖定問題的影響。 使用四元數坐標報告方向時,無論方向如何,都可以確定設備的精確方向。

四元數也更具計算效率。 您不需要調用昂貴的trig函數來將四元數旋轉應用於向量。 如果沒有提供w坐標,你仍然可以使用單個sqrt調用來計算w,而對於三角度歐拉形式的方向坐標的三個sin和三個cos函數調用。

短篇小說:ORIENTATION風格的傳感器做錯了。 它們在API 9中修復,用ROTATION傳感器替換它們。

ROTATION_VECTOR傳感器在API 9中引入,代表“虛擬”傳感器,它結合了來自不同傳感器(通常為ACCELEROMETER,GEOMAGNETIC_FIELD和GYROSCOPE)的數據,並進行了一些智能計算,以提供更准確的數據,而不是使用來自ACCEL和GEOMAGNETIC_FIELD傳感器的原始數據。 這被稱為“傳感器融合”。 您可以在此處找到更多信息

ORIENTATION傳感器已棄用,因為它提供的數據不是很准確。 文檔建議使用來自ACCELEROMETER和GEOMAGNETIC_FIELD傳感器的原始數據。

不幸的是,我現在無法提供任何使用ROTATION_VECTOR傳感器數據的例子,因為我正在調查中:)

萬一你需要一些例子如何使用原始數據 - 隨意問我 - 我會發布一些例子,但簡單的谷歌搜索可以幫助你更好;)

它們在概念上是相同的,只是代表性的不同。

這里查看方向傳感器的代碼。 方向傳感器的函數參數是旋轉矩陣,其中inturn是根據旋轉矢量計算的(quats表示)

在便宜的Android手機上(與高端iPhone不同),只有當手機方向接近水平(即平行於地面)時,羅盤才會起作用。

從技術上講,一個好的指南針(即浮動磁球)應該可以在任何方向工作,但便宜的指南針不能。 因此,要使用指南針,請在使用MAGNETOMETER之前通過查看ACCELEROMETER確保手機處於水平狀態。 希望Google將來會使用更好的磁力計!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM