如何把從陀螺儀擷取的X,Y,Z軸的角速度資訊轉換成Roll(左右傾斜)、Pitch(前後傾斜)、Yaw(左右搖擺)全方位資訊?
陀螺儀就是內部有一個陀螺,它的軸由於陀螺效應始終與初始方向平行,這樣就可以通過與初始方向的偏差計算出實際方向。手機裡陀螺儀實際上是一個結構非常精密的晶片,內部包含超微小的陀螺。
陀螺儀測量是參考標準是內部中間在與地面垂直的方向上進行轉動的陀螺。通過裝置與陀螺的夾角得到結果。
陀螺儀的強項在於測量裝置自身的旋轉運動。對裝置自身運動更擅長。但不能確定裝置的方位。
陀螺儀對裝置旋轉角度的檢測是瞬時的而且是非常精確的,能滿足一些需要高解析度和快速反應的應用比如FPS遊戲的瞄準。而且陀螺儀配合加速計可以在沒有衛星和網路的情況下進行導航,這是陀螺儀的經典應用。
同時處理直線運動和旋轉運動時,就需要把加速度和陀螺儀計結合起來使用。如果還想裝置在運動時不至於迷失方向,就再加上磁力計。
因為手機運動的加速度不高,精確度也沒有太大的要求,用加速計替代陀螺儀也可以。但如果做一些精度比較高的遊戲的話,最好還是有陀螺儀。
陀螺儀可以捕捉很微小的運動軌跡變化,因此可以做高解析度和快速反應的旋轉檢測。但不能像msensor或orientation sensor那樣測量當前的運行方向。
另外,陀螺儀運轉一段時間以後,noise和offset會導致資料偏差,需要藉助其它感應器進行較正。
陀螺儀的XYZ分別代表裝置圍繞XYZ三個軸旋轉的角速度:radians/second。至於XYZ使用的座標系與gsensor相同。逆時針方向旋轉時,XYZ的值是正的。下面是使用陀螺儀進行開發時的示範代碼:
[java]
view plaincopy
- private static final float NS2S = 1.0f / 1000000000.0f;
- private float timestamp;
- public void onSensorChanged(SensorEvent event)
- {
- if (timestamp != 0) {
- final float dT = (event.timestamp - timestamp) * NS2S;
- angle[0] += event.data[0] * dT;
- angle[1] += event.data[1] * dT;
- angle[2] += event.data[2] * dT;
- }
- timestamp = event.timestamp;
- }
android 就是GOOGLE的nexus s 有
iPhone4跟HTC的一款機子有
三星 Nexus S有三軸陀螺儀
LG 的2X也帶了
陀螺儀
Iphong4的發布了一項重大的應用——陀螺儀。據喬布斯所介紹,該裝置可以讓iPhone4感知人體的移動方向,結合重力感應、加速感應裝置可以給iPhone 4提供前所未有的完美遊戲體驗!
陀螺儀的作用簡單點說就是可以跟蹤位置變化,也就是我上面對三維電子羅盤的猜想,只要你在某個時刻得到了當前所在位置,然後只要陀螺儀一直在運行,根據數學計算,就可以知道你的行動軌跡。所以陀螺儀最常見的應用就是導航儀,在GPS沒有訊號時,通過陀螺儀的作用仍然能夠繼續精確導航。
就我所瞭解的,三維的電子羅盤,不僅具有指南針功能,還可以實現傾角的測量,和陀螺儀類似,站在一個斜坡上,可以計算出這個斜坡的角度;不過最重要的就是都可以在開飛機的時候使用...
總之電子羅盤和陀螺儀的應用都是為了提高導航精度,其次最重要的作用就是為遊戲和應用增加了控制方式,設想一下,到時候的遊戲都會很好玩,像CS這樣的遊戲,你完全可以拿著手機左跑跑右跑跑,在你家的客廳跑到臥室,再跑到衛生間尋找敵人,手持手機還可以控制準星,“Head shoot!”。是不是很有趣?這兩個東西要比重力感應進階的多,也是未來手機應用中的主流,全新的控制方式,更有趣的應用,都會隨之而誕生。