我在CMDeviceMotion中看到來自userAcceleration字段的一些意外讀數。當我看從CMAccelerometerData原始加速度計的數據,我看到,如果iPhone是平放在桌上的讀數爲1G直下(1G在-Z軸),並且如果我把iphone(上當然柔軟的表面),然後如預期的那樣,加速度讀數爲零。這很好。當我使用CMDeviceMotion類時,當iPhone平放在桌面上時,userAcceleration讀數爲零。這再好不過了。但是,當我放棄iPhone並閱讀CMDeviceManager userAcceleration時,userAcceleration值如預期的那樣是1G直線向上(+ Z)而不是向下(-Z)。看起來用戶加速度讀數實際上與設備真正經歷的加速度完全相反。有沒有人觀察過這個?在我嘗試整合速度和位置之前,是否可以反轉(乘以-1)所有userAcceleration值,還是錯誤地指出了userAcceleration正在讀取的內容?CMDeviceMotion userAcceleration是顛倒的?
回答
有CMAccelerometerData.acceleration和CMDeviceMotion.userAcceleration
- 原始加速度計數據之間的一些概念上的差異被測量,即重力和該設備的當前加速度的組合的所有的加速度的只是總和。
- 設備的運動數據是所有3個傳感器即加速度計,陀螺儀和磁強計的傳感器融合的結果。因此消除了偏差和誤差(理論上)並將剩餘的加速度數據分離爲重力和加速度以便於使用。
所以,如果你想比較兩個,你必須檢查CMAccelerometerData.acceleration
對CMDeviceMotion.userAcceleration + CMDeviceMotion.gravity
比較like like。
一般CMDeviceMotion是當你想要精確值和硬件獨立性大多數情況下,你的第一選擇。
要考慮的另一件事是您通過startDeviceMotionUpdatesUsingReferenceFrame啓動Device Motion更新時提供的CMAttitudeReferenceFrame。我不知道使用的基本版本startDeviceMotionUpdates
你說,你要集成的值來獲得速度和位置時,什麼是默認的。關於這一點有幾個討論,而且我可以說底線是不可能獲得合理的結果。請參閱:
- Finding distance using accelerometer in iPhone
- Getting displacement from accelerometer data with Core Motion
- How can I find distance traveled with a gyroscope and accelerometer?
如果您的應用程序的概念迫使你依靠精確的結果超過半秒鐘,試圖改變它。
原來,CMAcceleration不服從右手定則,其中,x是指向左邊,y爲點到屏幕底部,在這種情況下,具有典型的右手系統,Z軸應該指向上方,但它不是。 處理運動傳感器時,這讓我感到不舒服!
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從屏幕向外。
我的結論是,你必須顛倒所有的加速度計軸,並且你將擁有像陀螺儀一樣的右手座標系並且像文檔一樣。
作爲一個堆棧溢出新手,我顯然沒有足夠的信譽來評論其他一些職位... 但我已經達到了與cduguet相同的結論。根據廣告的iPhone座標系統(https://developer.apple.com/documentation/coremotion/getting_processed_device_motion_data/understanding_reference_frames_and_device_attitude#2875084),態度數據與公佈的座標軸一致。也就是說,圍繞任何軸的手機的正向旋轉(以「右手規則」的意義)記錄適當正向的陀螺儀速度增加。什麼是有道理的,我期待什麼。
但是,當您在任何軸上向正方向傳遞線性加速度時,CMmanager將數據記錄爲負值值。我已經在所有的軸上做了幾十次這樣的測試,並且一直找到同樣的違反直覺的結果。
我可以改變所有線性加速度值的符號,使運動方程與電話座標系一致,但我一直試圖理解爲什麼蘋果會選擇這種符號約定。這對我來說沒有意義。
- 1. CMDeviceMotion userAcceleration漂移
- 2. Facebook的文本是顛倒
- 3. 是否可以顛倒e.preventDefault()?
- 4. 當選擇點是顛倒
- 5. 是否可以顛倒UIModalTransitionStyleCoverVertical?
- 6. PDF顛倒
- 7. 顛倒ObservableCollection
- 8. Hubtile.Title顛倒
- 9. 顛倒鏈表
- 10. 顛倒Floyd-Warshall
- 11. 顛倒鏈表?
- 12. 顛倒的文字
- 13. 爲什麼字節是顛倒的?
- 14. 顛倒顛倒python中的星號三角形
- 15. 顛倒sql語句?
- 16. Swift NSData getBytes顛倒
- 17. Cocos2d顛倒濺屏
- 18. NSTableView渲染「顛倒」
- 19. JOGL顛倒渲染
- 20. 顛倒Javascript功能
- 21. CGContextShowTextAtPoint渲染顛倒
- 22. 指揮顛倒TranslateTransition
- 23. 上下顛倒x_axis
- 24. CGAL:顛倒y軸
- 25. 顛倒字符串
- 26. CGPoints顛倒y值
- 27. 顛倒呈現UIActivityViewController
- 28. 顛倒jQuery動畫
- 29. Zend_Paginator顛倒順序
- 30. SQL顛倒整列