運動傳感器 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)里這樣設置很好看。