2012-02-02 53 views
4

Android Documentation指定第三個參數爲SensorManager.getRotationMatrix重力參數或android中的加速度計參數值?

float[] gravity 

則規定現在

[0 0 g] = R * gravity (g = magnitude of gravity) 

,在大多數的在線的例子,我可以看到每個人發送加速度值getRotationMatrix,但是,是不是假設我應該只發送重力值?

例如,如果手機有重力傳感器, 我應該將它的原始輸出發送到getRotationMatrix嗎? 如果它沒有,我應該發送加速計值嗎?我應該首先提取非重力組件嗎? (因爲加速度計值是加速度減去G)。

使用重力傳感器值比使用具有該傳感器的移動電話中的加速度計值更可靠嗎?

在此先感謝!吉列爾莫。

回答

1

我認爲你只能看到使用加速度計值的例子的原因是因爲重力感應器只在API 9中啓動,也因爲大多數手機可能不會將此值與加速度計值分開,或者沒有傳感器等。等等。

另一個原因是因爲在大多數情況下結果往往是相同的,因爲加速度傳感器輸出的是設備線性加速度加上重力,但大部分時間手機將會站立仍然或甚至以恆定速度移動,因此設備加速度將爲零。

setRotationMatrix Android的文檔:只有當設備沒有自由落體,這是不接近磁北

這個函數返回的矩陣是有意義的。如果設備正在加速,或置於強磁場中,則返回的矩陣可能不準確。

現在,你問的重力數據是否會讓我更可靠?好吧,沒有什麼比測試更好,但是我認爲它沒有多大區別,它取決於你想要的應用程序。此外,獲取簡單的重力值並不是微不足道的,它需要過濾,所以最終可能會產生噪音。

+0

關於第二個原因,如果我想獲得旋轉矩陣,我假設用戶正在旋轉設備而不是以恆定速度旋轉,因此它應該有加速度,對不對?我錯過了什麼嗎? getRotationMatrix()只表示應該將加速度作爲參數發送,但它並未指定文檔中的哪種加速度弱點... 獲取重力值很容易,因爲存在重力傳感器(如果是有一個手機)。 謝謝你的回答! – polonskyg 2012-02-02 19:17:02

+0

我不確定如何獲得重力傳感器值,但我嚴重懷疑設備中是否有另一個傳感器。也許這些值是從加速度傳感器獲得的,正如它在文檔中所說的那樣,但我猜測。 – MobileCushion 2012-02-03 11:12:14

+0

我認爲這是一個熔絲傳感器,但它可能會應用不同的濾波器,如卡爾曼濾波器可以檢索更好的結果。這就是爲什麼我問,但我不知道。 – polonskyg 2012-02-03 13:08:23