iPhone4包含MEMS陀螺儀,所以這是最直接的路線。
正如你所注意到的那樣,磁力儀的反應遲鈍。這可以通過使用一種預測算法來減少,該算法使用緩慢來對當前的方向進行有根據的猜測。
首先,您需要確定傳感器的實際性能。要做到這一點,您需要以幾個轉速中的每一個以精確的速度旋轉它,並記錄指南針行爲。旋轉平臺應該能夠讀取瞬時位置。
在較慢的速度下,您將看到不同程度的固定滯後。隨着速度的增加,滯後將增加,直至接近180度,此時指南針將突然翻轉。在更高的速度下,所有你會看到的是翻轉,雖然它可能似乎不翻轉時翻轉重複在相同的值。在某些更高的速度下,指南針可能會向後旋轉,與旋轉方向相反。獲取旋轉表可能很麻煩,並且確保它不會影響本地磁場(使指南針無用)是一項挑戰。理想的桌子將由鋁製成,如果您需要使用鋼製桌子(最常見),則需要將手機安裝在非磁性平臺上,以儘可能遠離鋼材。
本地機器商店將是一個很好的開始:CNC機器可以輕鬆地完成所需的任務。
一旦你獲得了指南針的性能數據,你將需要建立一個觀測讀數與實際方向和轉速的模型。翻轉模型並將其應用於讀數以獲得實際讀數的猜測。
一個簡單的算法實現將保持讀數的歷史記錄,並保持連續讀數之間的差異列表。由於我們知道存在指南針滯後,當差值非零時,我們將知道當前值由於滯後而具有某種程度的不準確性。
下一步是創建一個'已更正'讀數的列表,其中先前實際值的已知滯後用於生成更新值,該更新值用於創建一個更新值,該值已被添加到最後一個值中'已更正'列表,並作爲最新值存儲。
當累計修正值(實際列表中的最新值與修正列表中的最大值之間的差值超過360度時,這意味着我們基本上不知道指南針指向的位置,希望這一點不會達到,因爲大多數旋轉運動通常應該持續相當短的時間
但是,由於您的目標只是計數旋轉,所以您將以小於完整旋轉的速度旋轉,直到累積誤差達到相當高的值。不知道這個值是什麼,因爲它取決於實際的羅盤滯後和實際的旋轉速度,但如果你只關心少量的旋轉(5左右),你應該能夠獲得可用的結果。
我希望我能給你一個以上upvote這樣一個全面的答案。 – 2010-10-06 14:10:38