Android傳感器—Motion Sensor(四)

使用線性加速度傳感器

線性加速度傳感器用一個三維向量,提供設備坐標系中每個坐標軸的加速度,但不包括重力。下列代碼顯示瞭如何獲取默認的線性加速度傳感器的實例:

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)

 

You May Also Like