Android传感器介绍
一、Android手机坐标系及角速度传感器TYPE_ACCELEROMETER介绍
在Android 坐标系统中,坐标原点位于屏幕的左下角,X 轴水平指向右侧,Y 轴垂直指向顶部,Z 轴指向屏幕前方。在该系统中,屏幕后方的坐标具有负的Z 轴值。Android 加速度计数据定义为:Sensor.TYPE_ACCELEROMETER
图 1. 3 轴加速度计的Android 坐标系统
所有数值都采用SI 标准单位(m/s),测量手机的加速度值,并减去重力加速度分量。 values[0]:x 轴上的加速度值减去Gx values[1]:y 轴上的加速度值减去Gy values[2]:z 轴上的加速度值减去Gz
例如,当设备平放在桌上并推着其左侧向右移动时,x 轴加速度值为正。当设备平放在桌上
22时,加速度值为+9.81,这是用设备的加速度值 (0 m/s) 减去重力加速度值 (-9.81m/s
2m/s2)得到的。当设备平放在桌上放,并以加速度A m/s2 朝天空的方向推动时,加速度值
22等于A+9.81,这是用设备加速度值(+A m/s)减去重力加速度值(-9.81 m/s)得到的。
表 1 列出了与设备的各个位置相对应的传感器的加速度值读数。用户可以用下表检查加速度计的方向与系统坐标是否一致。
表 1. 不同位置上各轴的加速度值
1 / 7
通过加速度传感器读取3 轴加速度值时,需要假设传感器的3 轴方向与系统坐标是一致的。但是在实际的产品中,可能会使用不同的传感器芯片,或者采用不同的安装方向,因此数据方向也会不同。图2 所示的是飞思卡尔MMA8452Q 3 轴加速度传感器的方向定义。
图 2. MMA8452Q 的方向定义
在图 2 中,我们可以看到当安装芯片时,必须让引脚1 处于右下角的位置(PD),并安装在PCB 的前方,这样才能与Android 坐标系统的默认位置相符。这样安装后,用户可确定数据方向与系统坐标定义是一致的。在任何其他情形下,数据都无法与系统定义保持完全一致,所以需要更改数据方向和坐标。在某些情况下,X 和Y 轴必须交换,或者既要改变方向,也要交换X-Y 轴。
2 / 7
判断是否需要改变方向或交换X-Y 轴的方法如下所述: 1. 将设备放置在朝上(UP)的位置,如表1 中所示。
2. 从传感器中读取3 轴的数据。如果Y 轴上的数据为 ±1 g (±9.81m/s2),其他两个轴上的数据大约为0,则不需要交换X-Y 轴。否则,需要交换X 和Y 轴,请转至步骤3。 2.1. 在该位置上,如果Y 轴上读取的数据为+1 g (+9.81m/s2),则Y 轴的方向不需要改变,如果数据为负,则Y 轴的方向需要改变。
2.2. 将设备放置在朝左(LEFT)的位置,如表1 中所示。X 轴上读取的数据应为±1g (±9.81其他两个轴上的数据应大约为0。如果X 轴上的数据为正,则其方向不需要改变;m/s2),
否则X 轴的方向需要改变。然后,执行第4 步判断Z 轴的方向。
3. 设备仍然放置在朝上(UP)的位置,并从传感器中读取3 个轴的数据。此时X 轴上的数据应为 ±1 g (±9.81m/s),其他两个轴上的数据大约为0,需要X-Y 交换。 3.1. 在该位置上,如果X 轴的数据读取为+1 g (+9.81m/s),则X 轴的方向不需要改变;否则需要改变。
3.2. 将设备放置在向左(LEFT)位置上,如表1 中所示。Y 轴上读取的数据应为±1g (±9.81
22m/s2),其他两个轴上的数据应大约为0。如果Y 轴上的数据为正,则其方向不需要改变;
否则需要改变。然后执行第4 步判断Z 轴的方向。
4. 将设备放置在正面朝上(FRONT-UP)的位置,并从传感器中读取3 轴数据。如果 Z轴上的数据为+1 g (+9.81m/s),其他两个轴上的数据大约为0,则Z 轴方向无需改变;如果Z 轴数据为-1 g (-9.81m/s),则Z 轴方向需要改变。
在 Android 系统中,传感器数据由内核空间中的Linux 驱动读取,然后由HAL 层驱动发送至API。分层结构如图3 所示。因此,传感器数据可以在Linux 驱动层或在HAL 层上进行转换。
22二、方向传感器TYPE_ORIENTATION介绍
继续明确一下空间坐标系的三个方向:
3 / 7
x 方向就是手机的水平方向,右为正; y 方向就是手机的水平垂直方向,前为正;
z 方向就是手机的空间垂直方向,天空的方向为正,地球的方向为负。
方向角的定义是手机y轴水平面上的投影与正北方向的夹角。(值得范围是0~359,其中0=正北方向, 90=正东方向, 180=正南方向, 270=正西方向)。
倾斜角的定义是手机y轴与水平面的夹角(手机z轴向y轴方向移动为正,值的范围是 -180 ~ 180)。
旋转角的定义是手机x轴与水平面的夹角(手机x轴离开z轴方向为正,值的范围是-90 ~ 90)。
也就是说,当你把手机水平放置在桌面上(屏幕向上)且手机指向正北方向(Y轴方向),此时传感器获得的xyz三个值应该都为0,即values[0]=0;values[1]=0;values[2]=0。
4 / 7
由图可以知道values[0]是绕Yaw轴旋转得到的值,values[1]是绕Pitch轴旋转得到的值,values[2]是绕Roll轴旋转得到的值。
以下是不同位置方向角传感器的数值:
1. 手机平放桌面绕z轴旋转360
400350300250200方向角倾斜角旋转角150100500020406080100120140160-50 2. y朝上x朝右
300250200150100系列1系列250系列300102030405060-50-100-150 3. y朝下x朝右
5 / 7
400300200系列1100系列2系列300102030405060-100-200 4. y朝左x朝上
300250200150系列1系列2系列31005000102030405060708090100-50 5. y右x朝上
20015010050系列10051015202530354045系列2系列3-50-100-150-200 6 / 7
6. y右x朝下
400350300250200150系列1系列2100系列35000-5020406080100120140-100-150 7. y左x朝下
25020015010050系列10系列20102030405060708090100系列3-50-100-150-200-250 7 / 7
因篇幅问题不能全部显示,请点此查看更多更全内容