Android---陀螺仪传感器

如何把从陀螺仪获取的X,Y,Z轴的角速度信息转换成Roll(左右倾斜)、Pitch(前后倾斜)、Yaw(左右摇摆)全方位信息?



 陀螺仪就是内部有一个陀螺,它的轴由于陀螺效应始终与初始方向平行,这样就可以通过与初始方向的偏差计算出实际方向。手机里陀螺仪实际上是一个结构非常精密的芯片,内部包含超微小的陀螺。


陀螺仪测量是参考标准是内部中间在与地面垂直的方向上进行转动的陀螺。通过设备与陀螺的夹角得到结果。


陀螺仪的强项在于测量设备自身的旋转运动。对设备自身运动更擅长。但不能确定设备的方位。


陀螺仪对设备旋转角度的检测是瞬时的而且是非常精确的,能满足一些需要高分辨率和快速反应的应用比如FPS游戏的瞄准。而且陀螺仪配合加速计可以在没有卫星和网络的情况下进行导航,这是陀螺仪的经典应用。


同时处理直线运动和旋转运动时,就需要把加速度和陀螺仪计结合起来使用。如果还想设备在运动时不至于迷失方向,就再加上磁力计。


因为手机运动的加速度不高,精确度也没有太大的要求,用加速计替代陀螺仪也可以。但如果做一些精度比较高的游戏的话,最好还是有陀螺仪。


陀螺仪可以捕捉很微小的运动轨迹变化,因此可以做高分辨率和快速反应的旋转检测。但不能像msensor或orientation sensor那样测量当前的运行方向。

另外,陀螺仪运转一段时间以后,noise和offset会导致数据偏差,需要借助其它传感器进行较正。


陀螺仪的XYZ分别代表设备围绕XYZ三个轴旋转的角速度:radians/second。至于XYZ使用的坐标系与gsensor相同。逆时针方向旋转时,XYZ的值是正的。下面是使用陀螺仪进行开发时的演示代码:


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!”。是不是很有趣?这两个东西要比重力感应高级的多,也是未来手机应用中的主流,全新的控制方式,更有趣的应用,都会随之而诞生。

你可能感兴趣的:(游戏,iPhone,HTC,手机,float,数学计算)