1.android測量數據
(1)android設備座標系
x<0 x>0
^
|
+-----------+--> y>0
| |
| |
| |
| | / z<0
| | /
| | /
O-----------+/
|[] [ ] []/
+----------/+ y<0
/
/
|/ z>0 (toward the sky)
O: Origin (x=0,y=0,z=0)
按照上圖所示,將手機平放在桌面上來看,手機的左下角是座標原點,水平向右爲x軸,水平向前爲y軸,由x軸和y軸正方向叉乘形成的方向
爲z軸,當手機平放時,z軸指向天空的方向。
(2)方向傳感器
android的方向傳感器可以獲取3個數據。
orientation0:y軸在水平面上的投影偏離正北方向的角度,範圍0~359度,正北爲0,正東爲90,正南爲180,正西270。
orientation1:y軸和y軸在水平面上投影之間的角度,即y軸與水平面的夾角。
orientation2:x軸和x軸在水平面上投影之間的角度,即x軸與水平面的夾角。
(3)加速度傳感器
android的加速度傳感器可以獲取3個數據。
accelerometerX:x軸方向的加速度-重力加速度在x軸上的分量。
accelerometerY:y軸方向的加速度-重力加速度在y軸上的分量。
accelerometerZ:z軸方向的加速度-重力加速度在z軸上的分量。
根據上述的兩個傳感器,能夠測量出手機x,y,z軸相對於地面參照系的方向和手機相對於手機參照系的加速度。
因爲我們項目的需要,要度量出手機相對於地面參照系的加速度,所以需要進行一些計算。
2.相對於地面參照系的加速度的計算
思路:將相對於手機座標系的3個加速度相對於地面參照系的3個方向分解,再將分解後的加速度分量根據地面參照系的3個方向進行相加合成。得到相對於地面參照系的加速度。
在計算之前,先定義地面參照系的3個方向,垂直向上的方向爲1,水平向北的方向爲2,水平向東的方向爲3.
(1)y軸
首先求y軸的單位向量在地面參照系中3個方向的分量。(這裏的o1爲orientation1,以此類推)
y0 = (-Math.sin(o1));
y1 = Math.cos(o1)*Math.cos(o0);
y2 = Math.cos(o1)*Math.sin(o0);
(2)x軸
temp = Math.acos(-(Math.tan(o1)*Math.tan(o2)));
x0 = (-Math.sin(o2));
x1 = Math.cos(o2)*Math.cos(o0+temp);
x2 = Math.cos(o2)*Math.sin(o0+temp);
(3)z軸
z0 = x2*y1-x1*y2;
z1 = x0*y2-x2*y0;
z2 = x1*y0-x0*y1;
(4)計算相對於地面參照系的3個方向的加速度(這裏的ax爲accelerometerX,以此類推)
a0 = ax*x0+ay*y0+az*z0+SensorManager.STANDARD_GRAVITY;(這裏加上標準重力加速度以抵消默認的重力加速度)
a1 = ax*x1+ay*y1+az*z1;
a0 = ax*x2+ay*y2+az*z2
這樣的a0,a1,a2數據即爲手機相對於地面參照系的絕對加速度了。