Android是面向智能手机和其他便携式设备的最受欢迎的操作系统(OS)之一。 它为多种传感器提供了标准的API接口,包括加速度计。加速度计的标准API定义了原始加速度数据的坐标系统。用户必须将从传感器中读取的原始数据转换为标准单位,并使其符合系统定义的坐标方向。本文介绍了Android中的坐标系统是如何定义的,以及如何在Android系统的驱动代码中对3轴加速度计数据的方向和坐标进行转换。本文讨论的示例代码基于飞思卡尔的Android 2.2和2.3驱动程序,加速度计则以飞思卡尔的MMA8452Q加速度传感器为例。
一部智能手机或便携设备应具有Wi-Fi和互联网功能,能够运行应用软件等诸多特征,而且一定会具有内置传感器。高端智能手机可能集成接近传感器,环境光传感器,3轴加速度计,以及磁力计等多种传感器。Android 2.3添加了一些支持多种新型传感器的API,包括陀螺仪、旋转向量、线性加速度、重力和气压传感器等。应用软件可以使用这些新型传感器,将它们组合起来,就可以实现高精确度的高级运动检测功能。
3轴加速度计或低g值传感器是Android API支持的传感器之一,具有特定的坐标系统,可以给应用程序提供标准的接口数据。坐标空间的定义与手机屏幕的默认方向有关,如图1所示。
在Android坐标系统中,坐标原点位于屏幕的左下角,X轴水平指向右侧,Y轴垂直指向顶部,Z轴指向屏幕前方。 在该系统中,屏幕后方的坐标具有负的Z轴值。
Android加速度计数据定义为:
Sensor.TYPE_ACCELEROMETER
所有数值都采用SI标准单位(m/s2),测量手机的加速度值,并减去重力加速度分量。
values[0]:x轴上的加速度值减去Gx
values[1]:y轴上的加速度值减去Gy
values[2]:z轴上的加速度值减去Gz
例如,当设备平放在桌上并推着其左侧向右移动时,x轴加速度值为正。当设备平放在桌上时,加速度值为+9.81,这是用设备的加速度值 (0 m/s2) 减去重力加速度值 (-9.81 m/s2)得到的。
当设备平放在桌上放,并以加速度A m/s2朝天空的方向推动时,加速度值等于A+9.81,这是用设备加速度值(+A m/s2)减去重力加速度值(-9.81 m/s2)得到的。
表1列出了与设备的各个位置相对应的传感器的加速度值读数。用户可以用下表检查加速度计的方向与系统坐标是否一致。
表1. 不同位置上各轴的加速度值
位置
x
y
z
朝上:
0
9.81m/s2
0
朝左:
9.81m/s2
0
0
朝下:
0
-9.81m/s2
0
朝右:
-9.81m/s2
0
0