Android开发系列- Android传感器类型
时间:2023-02-27 00:30:00
前一篇:Android开发系列 – 传感器概述与堆栈
本部分介绍了传感器坐标轴、基本传感器和复合传感器(动作传感器、姿势传感器、未校准传感器和交互传感器)。
1.传感器坐标轴
与设备静止的特定坐标系相比,许多传感器的传感器事件值表示。
1.1移动设备坐标轴
Sensor API 仅与屏幕的自然方向有关(当设备的屏幕方向发生变化时,坐标轴不会交换)。
移动设备的 Sensor API 坐标系
1.2.汽车坐标轴
在 Android Automotive 与车身坐标系相比,实现中定义了坐标轴:
汽车设备的 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.bpm 或 heart_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.复合传感器类型
复合传感器通过处理和/或融合来自一个或多个物理传感器的数据来生成数据。(任何非基础传感器的传感器均称为复合传感器。)复合传感器的示例包括:
步测器和大幅度动作传感器,通常基于加速度计,但是也可基于其他传感器(如果功耗和精度可接受的话)。
游戏旋转矢量传感器,基于加速度计和陀螺仪。
与基础传感器一样,复合传感器的特性来自于其最终数据的特性。例如,游戏旋转矢量传感器的功耗可能等于加速度计芯片、陀螺仪芯片、数据处理芯片和传输数据的总线的功耗之和。另外,游戏旋转矢量传感器的漂移既取决于校准算法的质量,也取决于物理传感器的特性。
下表列出了可用的复合传感器类型。每种复合传感器都依赖于来自一个或多个物理传感器的数据。
11.总结
从 Android 应用的角度来看,每个 Android 传感器都是一个独立的实体,这意味着不同传感器之间不存在交互性。
即使几个 Android 传感器可能共享同一个底层物理传感器,也是如此
例如:全部依靠同一个物理加速度计的计步器、大幅度动作感测器和加速度计必须能够同时工作
对于同一传感器的唤醒和非唤醒版本也是如此
Android 传感器必须能够同时并且彼此独立工作。也就是说,一个 Android 传感器上的任何操作都不能影响其他传感器的行为。
前一篇:Android开发系列 – 传感器概述与堆栈