`

android加速度感应

 
阅读更多

1.android测量数据
(1)android设备坐标系

按照上图所示,将手机平放在桌面上来看,手机的左下角是坐标原点,水平向右为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数据即为手机相对于地面参照系的绝对加速度了。
(5)
当 x=y=0 时,手机处于水平放置状态。
当 x=0 并且 y>0 时,手机顶部的水平位置要大于底部,也就是一般接听电话时手机所处的状态。
当 x=0 并且 y<0 时,手机顶部的水平位置要小于底部。手机一般很少处于这种状态。
当 y=0 并且 x>0 时,手机右侧的水平位置要大于左侧,也就是右侧被抬起。
当 y=0 并且 x<0 时,手机右侧的水平位置要小于左侧,也就是左侧被抬起。
当 z=0 时,手机平面与水平面垂直。
当 z>0 时,手机屏幕朝上。
当 z<0 时,手机屏幕朝下。
(6)
  方向传感器返回值的单位是角度,有三个值分别是
  values[0]: 方位角
  values[1]: 倾斜角
  values[2]: 旋转角
  如同加速度传感器一样,首先Android中 x,y,z 定义是以水平放置在的手机的右下脚为参照系坐标原点
  x 方向就是手机的水平方向,右为正
  y 方向就是手机的水平垂直方向,前为正
  z 方向就是手机的空间垂直方向,天空的方向为正,地球的方向为负
 (7)
     方向角的定义是手机y轴 水平面上的投影 与 正北方向的夹角。 (值得范围是 0 ~ 359 其中0=North, 90=East, 180=South, 270=West)
  倾斜角的定义是手机y轴 与水平面的夹角 (手机z轴向y轴方向移动为正 ,值得范围是 -180 ~ 180)
  旋转角的定义是手机x轴 与水平面的夹角 (手机x轴离开z轴方向为正, 值得范围是 -90 ~ 90)
   (8)
      需要注意的是,由于地球固有的重力加速度g (值为9.8 m/s^2),
  因此现实中实际加速度值应该是 z方向返回值 - 9.8 m/s^2.
  比如你以 2 m/s^2 的加速度将手机抛起,这时z方向的返回值应该是 11.8 m/s^2.
  反之若以手机以2 m/s^2 的加速度坠落,则z方向的返回值应该是 7.8 m/s^2.
  x,y方向则没有上述限制。
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics