Android Sensors (5) 运动传感器 Motion Sensors

运动传感器 Motion Sensors

 

  Android平台提供了一些监控设备运动的传感器。

  运动传感器中有两个永远是基于硬件的,即加速度计陀螺仪accelerometer and gyroscope)。

  运动传感器中有三个是既可以基于硬件又可以基于软件的,即重力感应器、线性加速度计、旋转向量传感器

  运动传感器用来监测设备的运动,比如倾斜,震动,旋转或摇摆(tilt, shake, rotation, or swing)。

 

运动传感器的返回值

  所有的运动传感器都返回一个多维的向量值,保存在SensorEventvalues数组中。

  参见链接:http://developer.android.com/guide/topics/sensors/sensors_motion.html

 

加速度计Accelerometer

  加速度传感器测量作用于设备的加速度Ad:

   Ad = -∑Fs / mass

  公式中是施加于设备的外力之和和设备质量的比值。

 

  但是,重力加速度会影响这个公式:

  Ad = -g -∑F / mass

 

  我的理解是:Ad是设备的实际加速度(我们想知道的值),而加速度的读数是一个受到了重力影响的读数。即Ad+9.81

  比如,把设备静止地平放在桌面上,这时,Ad是零;加速度计的读数大小是重力加速度的数值g = 9.81 m/s2。这个常量值的大小可以用STANDARD_GRAVITY来表示。

  而当设备自由落体时,它以9.81 m/s2的加速度向地面运动,Ad为-9.81 m/s2,这时加速度计的读数应该是0。

 

 

坐标系的设置

  当把设备平放在桌面上,以它的自然方向放置:

  如果你从设备左边推它,它往右移,这时它的X加速度值是正的;

  如果你从设备下方推它,它将朝着远离你的方向移动,这时它的Y加速度值是正的;

  如果你把设备以A m/s2的加速度推向天空,Z轴的加速度值应当等于A + 9.81,(which corresponds to the acceleration of the device (+A m/s2) minus the force of gravity (-9.81 m/s2))。

 

 

重力传感器Gravity Sensor

  重力传感器测量的是重力值在三个方向上的大小。

  重力传感器和加速度传感器的单位一样m/s2,并且它们使用的坐标系也一样。

  当设备静止时,重力传感器的输出和加速度传感器的输出是完全一致的。

 

陀螺仪Gyroscope

  陀螺仪测量的是设备绕三个轴向的旋转速度,单位是rad/s。

  所使用的坐标系统仍然和加速度计的一样。

  旋转的值在逆时针方向为正,即,如果一个观察者从某个轴的正向某点向原点看,如果观察到的旋转是逆时针的,则是一个正值的旋转。这是一个关于旋转方向的标准的数学定义,注意,这个和方向传感器所用的定义不同。

  陀螺仪的输出需要对时间积分来计算。有一个例子见:http://developer.android.com/guide/topics/sensors/sensors_motion.html

 

  标准的陀螺仪提供原始的旋转数据,对噪声和漂移没有过滤和校正。

  实际运用时,陀螺仪的噪声和漂移会引入错误,所以需要被补偿。通常可以通过其他传感器(重力传感器或加速度计)来检测噪声和漂移。

 

线性加速度计Linear Accelerometer

  线性加速度计提供了沿着每个轴的加速度值,并且是排除了重力的值。

  即:linear acceleration = acceleration - acceleration due to gravity

  它所使用的单位和坐标系都和加速度计相同。

  线性加速度计有一个偏移值(offset),你需要移除这个偏移值,比较简单的方法是在你的应用一开始设置一个标定步骤:让用户把设备放在桌子上,然后读出三个轴的offset值,之后,在从线性加速度计中读数的时候减去这个offset值,就可以得到实际的线性加速度值。

 

旋转向量传感器Rotation Vector Sensor

  旋转向量用一个角度和轴向的组合来表达设备的方向信息。比如,设备绕着某一个轴向旋转了一个角度 θ。

  旋转向量的三个元素的值如下:

  x*sin(θ/2)

  y*sin(θ/2)

  z*sin(θ/2)

  rotation vector的大小是sin(θ/2),方向是它的旋转轴向。

  旋转向量没有单位。

  X轴指向东,Y轴指向北,Z轴与地面垂直,指向天空。

 

参考资料

  API Guides:Motion Sensors

  http://developer.android.com/guide/topics/sensors/sensors_motion.html

  另,今天的标题设置(圆角div)参见:http://www.cnblogs.com/mslove/archive/2009/03/24/1420703.html 

  起因就是看见人家博客(http://www.cnblogs.com/TerryBlog/archive/2013/03/13/2957158.html)里这样设置很好看。 

  

posted @ 2013-03-15 18:25  圣骑士wind  阅读(4909)  评论(0编辑  收藏  举报