运动传感器 Motion Sensors
Android平台提供了一些监控设备运动的传感器。
运动传感器中有两个永远是基于硬件的,即加速度计和陀螺仪(accelerometer and gyroscope)。
运动传感器中有三个是既可以基于硬件又可以基于软件的,即重力感应器、线性加速度计、旋转向量传感器。
运动传感器用来监测设备的运动,比如倾斜,震动,旋转或摇摆(tilt, shake, rotation, or swing)。
运动传感器的返回值
所有的运动传感器都返回一个多维的向量值,保存在SensorEvent的values数组中。
参见链接: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)里这样设置很好看。