2010-01-19 149 views
4

我想創建一個應用程序,可以檢測用戶旋轉iPhone設備時的旋轉次數。目前,我正在使用Compass API來獲取角度並嘗試多種方法來檢測旋轉。以下是我嘗試過的解決方案列表: 1 /在整個輪次創建2個角度陷阱(整個棋子),以檢測我們從羅盤獲得的角度是否通過了它們。 2 /計算指南針更新次數之間的所有角度距離(在updateHeading函數中)。讓我們嘗試將總和角度分爲360 =>我們可以得到旋轉數字檢測iPhone旋轉旋轉?

問題是:當手機旋轉得太快時,指南針無法跟上手機的速度,並且它會返回給我們最新時間的角度(不像實際旋轉那樣持續)。

我們也嘗試使用加速計來檢測自旋。但是,當您在平面上旋轉手機時,這種方式無法工作。

如果您有任何有關此問題的解決方案或經驗,請幫助我。

非常感謝。

回答

0

您可以使用加速度來確定手機旋轉的速度,並使用該速度填充空白直到手機停止,此時您可以再次查詢指南針。

3

iPhone4包含MEMS陀螺儀,所以這是最直接的路線。

正如你所注意到的那樣,磁力儀的反應遲鈍。這可以通過使用一種預測算法來減少,該算法使用緩慢來對當前的方向進行有根據的猜測。

首先,您需要確定傳感器的實際性能。要做到這一點,您需要以幾個轉速中的每一個以精確的速度旋轉它,並記錄指南針行爲。旋轉平臺應該能夠讀取瞬時位置。

在較慢的速度下,您將看到不同程度的固定滯後。隨着速度的增加,滯後將增加,直至接近180度,此時指南針將突然翻轉。在更高的速度下,所有你會看到的是翻轉,雖然它可能似乎不翻轉時翻轉重複在相同的值。在某些更高的速度下,指南針可能會向後旋轉,與旋轉方向相反。獲取旋轉表可能很麻煩,並且確保它不會影響本地磁場(使指南針無用)是一項挑戰。理想的桌子將由鋁製成,如果您需要使用鋼製桌子(最常見),則需要將手機安裝在非磁性平臺上,以儘可能遠離鋼材。

本地機器商店將是一個很好的開始:CNC機器可以輕鬆地完成所需的任務。

一旦你獲得了指南針的性能數據,你將需要建立一個觀測讀數與實際方向和轉速的模型。翻轉模型並將其應用於讀數以獲得實際讀數的猜測。

一個簡單的算法實現將保持讀數的歷史記錄,並保持連續讀數之間的差異列表。由於我們知道存在指南針滯後,當差值非零時,我們將知道當前值由於滯後而具有某種程度的不準確性。

下一步是創建一個'已更正'讀數的列表,其中先前實際值的已知滯後用於生成更新值,該更新值用於創建一個更新值,該值已被添加到最後一個值中'已更正'列表,並作爲最新值存儲。

當累計修正值(實際列表中的最新值與修正列表中的最大值之間的差值超過360度時,這意味着我們基本上不知道指南針指向的位置,希望這一點不會達到,因爲大多數旋轉運動通常應該持續相當短的時間

但是,由於您的目標只是計數旋轉,所以您將以小於完整旋轉的速度旋轉,直到累積誤差達到相當高的值。不知道這個值是什麼,因爲它取決於實際的羅盤滯後和實際的旋轉速度,但如果你只關心少量的旋轉(5左右),你應該能夠獲得可用的結果。

+0

我希望我能給你一個以上upvote這樣一個全面的答案。 – 2010-10-06 14:10:38

0

如果您使用的是iPhone 4,則問題已解決,您可以使用Core Motion獲取旋轉數據。

對於早期的設備,我認爲一個有趣的方法是在設備旋轉時嘗試檢測擺動,在非常精細的報告間隔內使用UIAccelerometer。您可能能夠從與旋轉平面成直角的運動中檢測到一些合理的圖案。