Android开发系列- Android传感器类型

前一篇:Android开发系列 – 传感器概述与堆栈

 

         本部分介绍了传感器坐标轴、基础传感器和复合传感器(动作传感器、姿势传感器、未校准传感器和互动传感器)。

1.传感器坐标轴

许多传感器的传感器事件值在相对于设备静止的特定坐标系中表示。

 

1.1移动设备坐标轴

Sensor API 仅与屏幕的自然方向相关(当设备的屏幕方向更改时,坐标轴不会发生交换)。

Android开发系列- Android传感器类型

移动设备的 Sensor API 坐标系

 

 

1.2.汽车坐标轴

在 Android Automotive 实现中,坐标轴相对于车身坐标系进行定义:

Android开发系列- Android传感器类型

汽车设备的 Sensor API 坐标系

 

X 轴沿车辆右侧延伸

Y 轴沿车架前方延伸

Z 轴沿车架顶部延伸

坐标系的原点位于车辆后轴的中心。从坐标轴的正方向观察时,正旋转方向为逆时针方向。因此,当车辆向左转时,z 轴的陀螺仪转速应该为正值。

 

2. 基础传感器

基础传感器类型以其代表的物理传感器命名。这些传感器会转发来自单个物理传感器的数据(与通过其他传感器生成数据的复合传感器相反)。基础传感器类型的示例包括:

SENSOR_TYPE_ACCELEROMETER

SENSOR_TYPE_GYROSCOPE

SENSOR_TYPE_MAGNETOMETER

 

注意:有关 Android 传感器类型的详细信息,请查看以下部分。

 

但是,基础传感器不等同于其底层物理传感器,也不得与其相混淆。来自基础传感器的数据不是物理传感器的原始输出信息,因为数据已进行了校正(如偏差补偿和温度补偿)。

 

例如,在以下使用情况下,基础传感器的特性可能与其底层物理传感器的特性有所不同:

 

(1)额定偏差范围为 1 度/秒的陀螺仪芯片

在出厂校准后,通过应用温度补偿和偏差补偿,使 Android 传感器的实际偏差得到降低,最终偏差可能低于 0.01 度/秒。

在此情况下,即使底层传感器的数据表显示偏差为 1 度/秒,我们仍认为 Android 传感器的偏差低于 0.01 度/秒。

 

(2)功耗为 100 uW 的气压计。

由于生成的数据需要从芯片传输到 SoC,因此从气压计 Android 传感器收集数据的实际功耗可能会高得多,例如 1000 uW。

在此情况下,即使在气压计芯片引线上测得的功耗为 100 uW,我们仍认为 Android 传感器的功耗为 1000 uW。

 

(3)校准后功耗为 100 uW 的磁力计(但校准时的功耗更高)。

其校准程序可能需要**陀螺仪(消耗 5000 uW),并运行一些算法(额外消耗 900 uW)。

在此情况下,我们认为(磁力计)Android 传感器的最大功耗为 6000 uW。在此情况下,平均功耗是更为实用的测量指标,系统会通过 HAL 在传感器静态特性中报告平均功耗。

 

 

3.加速度计

报告模式:连续模式

getDefaultSensor(SENSOR_TYPE_ACCELEROMETER) 会返回一个非唤醒传感器

 

加速度计传感器可报告设备沿 3 个传感器坐标轴的加速度。测量的加速度包括物理加速度(速度变化)和重力加速度。测量结果在 sensor_event_t.acceleration 的 x、y 和 z 字段中报告。

 

所有值均采用国际单位制单位 (m/s^2),测量结果为设备加速度减去沿 3 个传感器坐标轴的重力加速度。

 

加速度计还通过 sensors_event_t.acceleration.status 报告其预测的读数精度

 

 

4.环境温度传感器

报告模式:变化模式

getDefaultSensor(SENSOR_TYPE_AMBIENT_TEMPERATURE) 会返回一个非唤醒传感器

 

该传感器可提供环境(室内)温度,单位是摄氏度。

 

5.磁场传感器

报告模式:连续模式

getDefaultSensor(SENSOR_TYPE_MAGNETIC_FIELD) 会返回一个非唤醒传感器

 

SENSOR_TYPE_GEOMAGNETIC_FIELD == SENSOR_TYPE_MAGNETIC_FIELD

 

磁场传感器(也称为磁力计)可报告沿 3 个传感器坐标轴测量的环境磁场。

 

测量结果在 sensors_event_t.magnetic 的 x、y 和 z 字段中报告,且所有值单位均是微特斯拉 (uT)。

 

磁力计还通过 sensors_event_t.magnetic.status 报告其预测的读数精度。

 

 

6.陀螺仪

报告模式:连续模式

 

getDefaultSensor(SENSOR_TYPE_GYROSCOPE) 会返回一个非唤醒传感器

 

陀螺传感器可报告设备围绕 3 个传感器坐标轴的旋转速率。

 

逆时针方向为正转方向(右手规则)。即,如果位于原点的设备逆时针旋转,观察者从设备 x、y 或 z 轴某个正位置看过去,将报告正向旋转。请注意,这是正向旋转的标准数学定义,与航空航天领域对转动的定义并不一致。

 

测量结果在 sensors_event_t.gyro 的 x、y 和 z 字段中报告,且所有值的单位均为每秒转数 (rad/s)

 

7.心率传感器

报告模式:变化模式

 

getDefaultSensor(SENSOR_TYPE_HEART_RATE) 会返回一个非唤醒传感器

 

心率传感器可报告触摸设备的人员当前的心率。

 

以每分钟心跳次数 (BPM) 表示的当前心率在sensors_event_t.heart_rate.bpm 中报告,而传感器的状态在 sensors_event_t.heart_rate.status 中报告。

 

因为传感器采用变化模式,当且仅当 heart_rate.bpmheart_rate.status 自上次事件后已发生变化时才会触发事件。事件生成速度不会大于每隔 sampling_period 一次。

 

sensor_t.requiredPermission 始终是 SENSOR_PERMISSION_BODY_SENSORS

 

 

8.光线传感器

报告模式:变化模式

 

getDefaultSensor(SENSOR_TYPE_LIGHT) 会返回一个非唤醒传感器

 

光线传感器可报告当前照明度,采用国际单位勒克斯 (lux)

 

测量结果在 sensors_event_t.light 中报告。

 

9.近程传感器

报告模式:变化模式

 

通常定义为唤醒传感器

 

getDefaultSensor(SENSOR_TYPE_PROXIMITY) 会返回一个唤醒传感器

 

近程传感器可报告从传感器到最近的可见表面的距离。

 

在 Android KitKat 版本或更早版本中,近程传感器一直是唤醒传感器,也就是说,此类传感器在检测到近程距离发生变化时会唤醒 SoC。

 

对于 Android KitKat 之后的版本,我们建议您首先实现该传感器的唤醒版本,因为该版本在打电话时用于开启和关闭屏幕。

 

测量结果在 sensors_event_t.distance 中报告(以厘米为单位)。请注意,一些近程传感器仅支持二元“近”或“远”测量结果。在此情况下,传感器检测到“远”状态时报告值 sensor_t.maxRange,检测到“近”状态时报告一个小于 sensor_t.maxRange 的值。

 

10.复合传感器类型

复合传感器通过处理和/或融合来自一个或多个物理传感器的数据来生成数据。(任何非基础传感器的传感器均称为复合传感器。)复合传感器的示例包括:

 

步测器和大幅度动作传感器,通常基于加速度计,但是也可基于其他传感器(如果功耗和精度可接受的话)。

游戏旋转矢量传感器,基于加速度计和陀螺仪。

 

与基础传感器一样,复合传感器的特性来自于其最终数据的特性。例如,游戏旋转矢量传感器的功耗可能等于加速度计芯片、陀螺仪芯片、数据处理芯片和传输数据的总线的功耗之和。另外,游戏旋转矢量传感器的漂移既取决于校准算法的质量,也取决于物理传感器的特性。

 

下表列出了可用的复合传感器类型。每种复合传感器都依赖于来自一个或多个物理传感器的数据。

 

Android开发系列- Android传感器类型

 

 

11.总结

从 Android 应用的角度来看,每个 Android 传感器都是一个独立的实体,这意味着不同传感器之间不存在交互性

 

即使几个 Android 传感器可能共享同一个底层物理传感器,也是如此

例如:全部依靠同一个物理加速度计的计步器、大幅度动作感测器和加速度计必须能够同时工作

 

对于同一传感器的唤醒和非唤醒版本也是如此

Android 传感器必须能够同时并且彼此独立工作。也就是说,一个 Android 传感器上的任何操作都不能影响其他传感器的行为。

 

前一篇:Android开发系列 – 传感器概述与堆栈