2013-05-13 72 views
4

我在CMDeviceMotion中看到來自userAcceleration字段的一些意外讀數。當我看從CMAccelerometerData原始加速度計的數據,我看到,如果iPhone是平放在桌上的讀數爲1G直下(1G在-Z軸),並且如果我把iphone(上當然柔軟的表面),然後如預期的那樣,加速度讀數爲零。這很好。當我使用CMDeviceMotion類時,當iPhone平放在桌面上時,userAcceleration讀數爲零。這再好不過了。但是,當我放棄iPhone並閱讀CMDeviceManager userAcceleration時,userAcceleration值如預期的那樣是1G直線向上(+ Z)而不是向下(-Z)。看起來用戶加速度讀數實際上與設備真正經歷的加速度完全相反。有沒有人觀察過這個?在我嘗試整合速度和位置之前,是否可以反轉(乘以-1)所有userAcceleration值,還是錯誤地指出了userAcceleration正在讀取的內容?CMDeviceMotion userAcceleration是顛倒的?

回答

6

CMAccelerometerData.accelerationCMDeviceMotion.userAcceleration

  1. 原始加速度計數據之間的一些概念上的差異被測量,即重力和該設備的當前加速度的組合的所有的加速度的只是總和。
  2. 設備的運動數據是所有3個傳感器即加速度計,陀螺儀和磁強計的傳感器融合的結果。因此消除了偏差和誤差(理論上)並將剩餘的加速度數據分離爲重力和加速度以便於使用。

所以,如果你想比較兩個,你必須檢查CMAccelerometerData.accelerationCMDeviceMotion.userAcceleration + CMDeviceMotion.gravity比較like like。

一般CMDeviceMotion是當你想要精確值和硬件獨立性大多數情況下,你的第一選擇。

要考慮的另一件事是您通過startDeviceMotionUpdatesUsingReferenceFrame啓動Device Motion更新時提供的CMAttitudeReferenceFrame。我不知道使用的基本版本startDeviceMotionUpdates


你說,你要集成的值來獲得速度和位置時,什麼是默認的。關於這一點有幾個討論,而且我可以說底線是不可能獲得合理的結果。請參閱:

如果您的應用程序的概念迫使你依靠精確的結果超過半秒鐘,試圖改變它。

0

原來,CMAcceleration不服從右手定則,其中,x是指向左邊,y爲點到屏幕底部,在這種情況下,具有典型的右手系統,Z軸應該指向上方,但它不是。 處理運動傳感器時,這讓我感到不舒服!

0

3年後,但仍然認爲這是一個懸而未決的問題。我不認爲這是「全精」爲CMAccelerometerData閱讀大約在-Z軸1G,因爲根據他們的文檔(https://developer.apple.com/library/content/documentation/EventHandling/Conceptual/EventHandlingiPhoneOS/motion_event_basics/motion_event_basics.html)+ Z是從屏幕向外。當手機放在桌子上時,屏幕朝上,這意味着它正在試驗桌子的向上力量。在09:15看到這google talk。 x和y也是一樣。

陀螺儀讀數的行爲與文檔中描述的一樣,其中x向右,y向上,z從屏幕向外。

我的結論是,你必須顛倒所有的加速度計軸,並且你將擁有像陀螺儀一樣的右手座標系並且像文檔一樣。

0

作爲一個堆棧溢出新手,我顯然沒有足夠的信譽來評論其他一些職位... 但我已經達到了與cduguet相同的結論。根據廣告的iPhone座標系統(https://developer.apple.com/documentation/coremotion/getting_processed_device_motion_data/understanding_reference_frames_and_device_attitude#2875084),態度數據與公佈的座標軸一致。也就是說,圍繞任何軸的手機的正向旋轉(以「右手規則」的意義)記錄適當正向的陀螺儀速度增加。什麼是有道理的,我期待什麼。

但是,當您在任何軸上向正方向傳遞線性加速度時,CMmanager將數據記錄爲負值值。我已經在所有的軸上做了幾十次這樣的測試,並且一直找到同樣的違反直覺的結果。

我可以改變所有線性加速度值的符號,使運動方程與電話座標系一致,但我一直試圖理解爲什麼蘋果會選擇這種符號約定。這對我來說沒有意義。