转自 http://blog.csdn.net/a345017062/article/details/6459643html
陀螺仪就是内部有一个陀螺,它的轴因为陀螺效应始终与初始方向平行,这样就能够经过与初始方向的误差计算出实际方向。手机里陀螺仪其实是一个结构很是精密的芯片,内部包含超微小的陀螺。
加速计是用来检测手机受到的加速度的大小和方向的,而手机静置的时候是只受到重力加速度(这个高中学过)的.因此不少人把加速计功能又叫作重力感应功能。
磁力计是测试磁场强度和方向的。
陀螺仪测量是参考标准是内部中间在与地面垂直的方向上进行转动的陀螺。经过设备与陀螺的夹角获得结果。
加速计是之内部测量组件在各个方向上的受力状况来获得结果。
磁力计的原理就是中学物理中涉及到的那个最简单的指南针了(那记得那根被磁化的钢针么)。
它们分别有本身的强项:
陀螺仪的强项在于测量设备自身的旋转运动。对设备自身运动更擅长。但不能肯定设备的方位。
加速计的强项在于测量设备的受力状况。对设备相对外部参考物(好比,地面)的运动更擅长。但用来测量设备相对于地面的摆放姿式,则精确度不高。
磁力计的强项在于定位设备的方位。能够测量出当前设备与东南西北四个方向上的夹角。
举几个例子:
陀 螺仪对设备旋转角度的检测是瞬时的并且是很是精确的,能知足一些须要高分辨率和快速反应的应用好比FPS游戏的瞄准。并且陀螺仪配合加速计能够在没有卫星 和网络的状况下进行导航,这是陀螺仪的经典应用。加速度计可用于有固定的重力参考坐标系、存在线性或倾斜运动但旋转运动被限制在必定范围内的应用。同时处 理直线运动和旋转运动时,就须要把加速度和陀螺仪计结合起来使用。若是还想设备在运动时不至于迷失方向,就再加上磁力计。
对于一个发射出去的导弹来讲,要想精确追踪并调整导弹的轨道的话,下面几组数据必不可少:
GPS定位它的位置
加速计测量当前加速度
磁力计肯定导弹头的方向(只能知道东南西北四个方向上的夹角),陀螺仪知道导弹的角速度。这两个仪器结合才能肯定导弹的准确的立体运动方向。
加速计获得的结果就是XYZ三个值,分别表明三个方向的加速度。关于XYZ三值的介绍,能够看这里:
android 重力感应和屏幕旋转关系
http://blog.csdn.net/lzx_bupt/archive/2010/04/20/5507165.aspx
用加速计和磁力计能够计算出orientation(方位计),orientation涉及到了三个概念:
Roll:左右倾斜角度,也叫滚转角 http://baike.baidu.com/view/1769672.htm
Pitch:先后倾斜,也叫俯仰角 http://baike.baidu.com/view/3832041.htm
Yaw:左右摇摆,也叫偏航角 http://baike.baidu.com/view/1769448.htm
下 面代码是Android2.3中/development/samples/Compass的源码,演示了如何使用加速计和磁力计来肯定手机的摆放姿式和 方位。由于手机运动的加速度不高,精确度也没有太大的要求,用加速计替代陀螺仪也能够。但若是作一些精度比较高的游戏的话,最好仍是有陀螺仪。java
补充于2011.7.14android
gsensor的较正比较容易完成,通常是让机器以某个固定角度(好比水平)放置,而后连续取N个值(好比20个)进行一系列计算。Android和iphone中,屏幕会随着设备的旋转方向变化而改变,其实应用的只是gsensor。
msensor 的较正分为水平较正和倾斜补偿。水平较正有平面较正、8字较正、十面较正等几种方法。通过水平较正后,msensor在水平放置时已经可使用了,但设备 与水平面有必定的倾斜角时,这个倾斜角会对msensor的精度形成影响。所以,还须要进行倾斜角补偿较正。先经过较正好的gsensor得出倾斜角,然 后使用倾斜角(pitch,roll)进行补偿较正计算。
orientation sensor能够由一个单独芯片来实现,也能够由gsensor和msensor共同计算出来的(我看android2.3的Sample中的 Compass就已经这样干了)。orientation sensor输出三个值:roll,pitch,yaw。其中,roll和pitch分别表明手机的X轴和Y轴与水平面的夹角,因此这两个值能够由 gsensor计算出来。yaw表明手机y轴水平面上的投影与正北方向的夹角,由msensor计算出来。
陀螺仪能够捕捉很微小的运动轨迹变化,所以能够作高分辨率和快速反应的旋转检测。但不能像msensor或orientation sensor那样测量当前的运行方向。飞机当中就用它记录运动角度改变,从而造成运动轨迹。缺点就是随着时间增加会有偏差积累,网络
补充于2011.7.19iphone
陀螺仪的XYZ分别表明设备围绕XYZ三个轴旋转的角速度:radians/second。至于XYZ使用的坐标系与gsensor相同。逆时针方向旋转时,XYZ的值是正的。下面是使用陀螺仪进行开发时的演示代码:测试
另外,陀螺仪运转一段时间之后,noise和offset会致使数据误差,须要借助其它传感器进行较正。this
补充于2011.7.20spa
利用加速计(gsensor),磁力计(msensor)模拟出方位传感器(orientation)来
Android最近的新版本已经不建议咱们在开发的时候像下面这样直接用方位传感器了:
Sensor ori = mSensorManager.getDefaultSensor(Sensor.TYPE_ORIENTATION);
mSensorManager.registerListener(this, ori, SensorManager.SENSOR_DELAY_GAME);
而 是建议使用SensorManager.getOrientation(mR, mOrientation)这个API本身在应用程序的onSensorChanged中计算出方位传感器。但咱们在作HAL层时,却不得不考虑一些 APK仍是像上面代码那样直接使用方位传感器的状况,因此,咱们必须在sensor.c中模拟出一个方位传感器来:
激活方位传感器时,同时激活加速计和磁力计,关闭方位传感器时也要同时关闭加速计和磁力计,同时还要考虑若是用户注册了加速计或磁力计,而且正在使用的状况。操作系统
参考文章:.net
加速度计和陀螺仪的区别
http://www.cnblogs.com/liuq0s/archive/2010/09/02/1816394.html
三轴陀螺仪与加速度计如何辅助Iphone定位的
http://www.weizhiquan.com/archives/1072
ST集成传感器方案实现电子罗盘功能
http://www.eeworld.com.cn/gykz/2011/0408/article_5352.html
Android设备中实现陀螺仪(Orientation Sensor)
http://blog.csdn.net/beeboobeeboo/article/details/6536941
简单易懂的文字 带你认识iPhone 4陀螺仪
http://mobile.zol.com.cn/187/1876651.html
Android操做系统11种传感器介绍
http://hi.baidu.com/aokikyon/blog/item/f9a539d74a4f5fc4a044df40.html