2012-04-24 38 views
2

我使用TYPE_MAGNETIC_FIELD/TYPE_ACCELEROMETER傳感器基本上創建一個指南針。Android傳感器旋轉到度

我打電話getRotationMatrix然後remapCoordinateSystem(總是橫向)交換軸,然後getOrientation然後我把我軸線當前需要指數0,然後我打電話toDegrees,然後我使其0-360範圍內

VAL =(val + 360)%360;

現在所有的工作都很好,只是它波動有點多,所以我去搜索上帝(谷歌)和查找低通濾波器分配和大多數不工作如此之好,但我發現一個幾乎工作。 newval = oldVal + ALPHA *(newval-oldVal); newval = oldVal + ALPHA *(newval-oldVal); newval = oldVal + ALPHA *

阿爾法0.2-0.5

所以,現在在180(-180旋轉),它很快跳轉到0,然後它去181(-179旋轉),但如果我刪除的過濾器它不這樣做。

過濾器有什麼問題或者我該如何解決這個問題。

Android 2.2的所以沒有TYPE_LINEAR_ACCELERATION或TYPE_ORIENTATION(已取消)

感謝

+0

當遇到這樣的問題時,可以記錄輸入到過濾器的樣本和過濾器輸出一段時間內的問題。將結果格式化爲表並考慮它可能會幫助您瞭解這是一個環繞問題還是真正百搭的採樣數據。解決這個問題可能更具挑戰性......同樣,爲了解決這個問題,你可能會發現一個電子表格對於假設「如果......」場景很有用。 – 2012-04-24 20:11:10

+0

嗨。我將它添加到excel中,並創建了一個圖表,我確定它在180後跳到0。我甚至將它繪製在白板上,但我仍然無法理解它。首先,我認爲這是因爲小數點與它混淆了......謝謝 – Pintac 2012-04-24 20:22:02

+0

當輸入值稍微超過180時,輸入值有什麼價值? 180後的預期下一個值是多少?如果(並且我不是說他們是,因爲我最近沒有看過文檔)180和-180是等價的,問題是過濾器會將這兩個數字平均爲零。 – 2012-04-24 20:28:14

回答

0

的問題,你有方向的角度是週期性的。 180度旋轉與-180度相同(正如所指出的)也與540度相同等等。因此,雖然低通濾波器的算法不會改變,但您需要的數字字段必須是週期性的,以便爲您提供很好的答案。你會得到一個代表你方向的旋轉矩陣,這些矩陣構成了一個完美的數字系統。所以如果你在旋轉矩陣上做所有的濾波算術,然後只在最後一分鐘轉換成角度,你的濾波器就可以正常工作。