使用线性加速度传感器
线性加速度传感器用一个三维向量,提供设备坐标系中每个坐标轴的加速度,但不包括重力。下列代码显示了如何获取默认的线性加速度传感器的实例:
private SensorManager mSensorManager;
private Sensor mSensor;
...
mSensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
mSensor = mSensorManager.getDefaultSensor(Sensor.TYPE_LINEAR_ACCELERATION);
概念上,这种传感器根据下列关系来 提供加速度数据:
线性加速度 = 加速度 – 重力加速度
通常,在想要获取没有重力影响的加速度数据时,使用这种传感器。例如,你能够使用这种传感器来看你的汽车运行速度。线性加速度传感器始终有一个偏移量,你需要删除这个偏移量。做这件事的最简单的方法就是在你的应用程序中建立一个校准处理。在校准期间,你能够要求用户把设备放到桌面上,读取所有三轴的偏移量,然后从加速度传感器中读取的数据中直接减去对应的偏移量,来获取线性加速度。
该传感器的坐标系统与加速度传感器的坐标系相同,它的测量单位是(m/s2)。
使用旋转矢量传感器
旋转矢量用角和轴的组合来代表设备的取向,即设备绕着轴(X、Y或Z)旋转角度θ。下列代码显示了如何获取默认的旋转矢量传感器的实例:
privateSensorManager mSensorManager;
privateSensor mSensor;
...
mSensorManager =(SensorManager) getSystemService(Context.SENSOR_SERVICE);
mSensor = mSensorManager.getDefaultSensor(Sensor.TYPE_ROTATION_VECTOR);
这三个旋转矢量元素分别被表述以下形式:
x*sin(θ/2)
y*sin(θ/2)
z*sin(θ/2)
其中sin(θ/2)是旋转的数量,旋转轴的方向是旋转矢量的方向。
这三个旋转矢量元素等于一个四元数(cos(θ/2),X*sin(θ/2),Y*sin(θ/2),Z*sin(θ/2)的最后三部分。旋转矢量元素是无单位的。X、Y和Z轴的定义与加速度传感器相同。该参照坐标系统是用直接正交基来定义的(如图1)
图1.旋转矢量传感器使用的坐标系统
这个坐标系统有以下特点:
1. X轴是用向量积YxZ来定义的,它在设备的当前位置与地面相切,并指向东方;
2. Y轴在设备当前位置与地面相切,并指向地磁场的北极。
3. Z指向天空,并垂直与地面。
Android SDK提供了一个演示如何使用旋转矢量传感器的示例应用程序。这个实例应用程序位于API Demos代码中(OS-RotationVectorDemo)