android度量相對於地球座標系的加速度

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數據即爲手機相對於地面參照系的絕對加速度了。

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章