传感器类型

本部分介绍传感器轴、基本传感器和复合传感器(活动、姿态、未校准和互动)。

传感器轴

来自许多传感器的传感器事件值以特定帧表示,该帧相对于设备是静态的。

移动设备轴

传感器 API 仅与屏幕的自然方向相关(当设备的屏幕方向改变时,轴不会交换)。

Coordinate
system of sensor API for mobile devices

图 1. 传感器 API 使用的坐标系(相对于移动设备)

汽车轴

在 Android Automotive 实现中,轴是相对于车身框架定义的。车辆参考框架的原点是后轴的中心。车辆参考框架的方向应使

  • X 轴指向右侧,并且位于水平面上,垂直于车辆对称平面。
  • Y 轴指向前方,并且位于水平面上。
Coordinate system of sensor API for
automotive devices

图 2. 传感器 API 使用的坐标系(相对于汽车设备)

车辆参考框架是右手坐标系。因此,Z 轴指向上方。

参考框架的 Z 轴与重力对齐,这意味着 X 轴和 Y 轴均为水平。因此,Y 轴可能并非始终穿过前轴。

基本传感器

基本传感器类型以它们所代表的物理传感器命名。这些传感器中继来自单个物理传感器的数据(与从其他传感器生成数据的复合传感器相反)。基本传感器类型的示例包括

  • SENSOR_TYPE_ACCELEROMETER
  • SENSOR_TYPE_GYROSCOPE
  • SENSOR_TYPE_MAGNETOMETER

但是,基本传感器不等于并且不应与它们的基础物理传感器混淆。来自基本传感器的数据不是物理传感器的原始输出,因为应用了校正(例如,偏差补偿和温度补偿)。

例如,在以下用例中,基本传感器的特性可能与其基础物理传感器的特性不同

  • 额定偏差范围为 1 度/秒的陀螺仪芯片。
    • 在工厂校准后,应用了温度补偿和偏差补偿,Android 传感器的实际偏差将会减小,可能会降至偏差保证低于 0.01 度/秒的程度。
    • 在这种情况下,我们说 Android 传感器的偏差低于 0.01 度/秒,即使基础传感器的规格书上写的是 1 度/秒。
  • 功耗为 100 微瓦的气压计。
    • 由于生成的数据需要从芯片传输到 SoC,因此从气压计 Android 传感器收集数据的实际功耗可能会高得多,例如 1000 微瓦。
    • 在这种情况下,我们说 Android 传感器的功耗为 1000 微瓦,即使在气压计芯片引脚处测得的功耗为 100 微瓦。
  • 一个磁力计,校准后功耗为 100 微瓦,但在校准时功耗更高。
    • 它的校准程序可能需要激活陀螺仪(功耗为 5000 微瓦)并运行一些算法(成本为 900 微瓦)。
    • 在这种情况下,我们说(磁力计)Android 传感器的最大功耗为 6000 微瓦。
    • 在这种情况下,平均功耗是更有用的衡量标准,并且它是在传感器静态特性中通过 HAL 报告的内容。

加速度计

报告模式: 连续

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

加速度计传感器报告设备沿三个传感器轴的加速度。测量的加速度包括物理加速度(速度变化)和重力。测量值在 sensors_event_t.acceleration 的 x、y 和 z 字段中报告。

所有值均以 SI 单位 (m/s^2) 表示,并测量设备加速度减去沿三个传感器轴的重力。

以下是一些示例

  • 当处于自由落体状态时,(x, y, z) 的范数应接近于 0。
  • 当设备平放在桌面上并从左侧向右侧推动时,x 加速度值为正。
  • 当设备平放在桌面上时,沿 z 轴的加速度值为 +9.81 alo,这对应于设备加速度(0 m/s^2)减去重力(-9.81 m/s^2)。
  • 当设备平放在桌面上并向上推向天空时,加速度值大于 +9.81,这对应于设备加速度(+A m/s^2)减去重力(-9.81 m/s^2)。

读数使用以下方法进行校准

  • 温度补偿
  • 在线偏置校准
  • 在线比例校准

偏置和比例校准必须仅在传感器停用时更新,以避免在流式传输期间导致值跳变。

加速度计还通过 sensors_event_t.acceleration.status 报告其读数的预期精度。有关此字段可能值的更多信息,请参阅 SensorManager SENSOR_STATUS_* 常量。

环境温度

报告模式: 变化时

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

此传感器提供摄氏度的环境(房间)温度。

磁场传感器

报告模式: 连续

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

SENSOR_TYPE_GEOMAGNETIC_FIELD == SENSOR_TYPE_MAGNETIC_FIELD

磁场传感器(也称为磁力计)报告环境磁场,沿三个传感器轴测量。

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

磁力计还通过 sensors_event_t.magnetic.status 报告其读数的预期精度。有关此字段可能值的更多信息,请参阅 SensorManager SENSOR_STATUS_* 常量。

读数使用以下方法进行校准

  • 温度补偿
  • 工厂(或在线)软铁校准
  • 在线硬铁校准

陀螺仪

报告模式: 连续

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

陀螺仪传感器报告设备绕三个传感器轴的旋转速率。

旋转在逆时针方向为正(右手定则)。也就是说,从 x、y 或 z 轴上的某个正位置观察位于原点的设备的观察者,如果设备看起来在逆时针旋转,则会报告正旋转。请注意,这是正旋转的标准数学定义,与航空航天中滚转的定义不一致。

测量值在 sensors_event_t.gyro 的 x、y 和 z 字段中报告,所有值均以弧度/秒 (rad/s) 为单位。

读数使用以下方法进行校准

  • 温度补偿
  • 工厂(或在线)比例补偿
  • 在线偏置校准(以消除漂移)

陀螺仪还通过 sensors_event_t.gyro.status 报告其读数的预期精度。有关此字段可能值的更多信息,请参阅 SensorManager SENSOR_STATUS_* 常量。

陀螺仪不能基于磁力计和加速度计进行模拟,因为这会导致其局部一致性和响应性降低。它必须基于常用的陀螺仪芯片。

心率

报告模式: 变化时

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

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

以每分钟节拍数 (BPM) 为单位的当前心率在 sensors_event_t.heart_rate.bpm 中报告,传感器的状态在 sensors_event_t.heart_rate.status 中报告。有关此字段可能值的更多信息,请参阅 SensorManager SENSOR_STATUS_* 常量。特别是,在首次激活时,除非已知设备不在身体上,否则第一个事件的状态字段必须设置为 SENSOR_STATUS_UNRELIABLE。由于此传感器是变化时传感器,因此仅当 heart_rate.bpmheart_rate.status 自上次事件以来发生更改时才会生成事件。生成事件的速度不快于每 sampling_period 一次。

sensor_t.requiredPermission 始终为 SENSOR_PERMISSION_BODY_SENSORS

光线

报告模式: 变化时

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

光线传感器报告 SI 勒克斯单位的当前照度。

测量值在 sensors_event_t.light 中报告。

接近

报告模式: 变化时

通常定义为唤醒传感器

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

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

在 Android 4.4 之前,接近传感器始终是唤醒传感器,在检测到接近变化时唤醒 SoC。在 Android 4.4 之后,我们建议首先实现此传感器的唤醒版本,因为它是在通话时用于打开和关闭屏幕的版本。

测量值以厘米为单位在 sensors_event_t.distance 中报告。请注意,某些接近传感器仅支持二进制“近”或“远”测量。在这种情况下,传感器报告其“远”状态下的 sensor_t.maxRange 值和“近”状态下小于 sensor_t.maxRange 的值。

压力

报告模式: 连续

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

压力传感器(也称为气压计)报告百帕 (hPa) 的大气压力。

读数使用以下方法进行校准

  • 温度补偿
  • 工厂偏置校准
  • 工厂比例校准

气压计通常用于估计海拔高度变化。为了估计绝对海拔高度,必须使用海平面压力(随天气变化)作为参考。

相对湿度

报告模式: 变化时

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

相对湿度传感器测量相对环境空气湿度并返回百分比值。

复合传感器类型

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

  • 步测器显著运动,它们通常基于加速度计,但也可能基于其他传感器,如果功耗和精度可以接受。
  • 游戏旋转矢量,基于加速度计和陀螺仪。
  • 未校准陀螺仪,它类似于陀螺仪基础传感器,但偏置校准是单独报告的,而不是在测量中进行校正。

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

下表列出了可用的复合传感器类型。每个复合传感器都依赖于来自一个或多个物理传感器的数据。避免选择其他底层物理传感器来近似结果,因为它们会提供较差的用户体验。

传感器类型 类别 底层物理传感器 报告模式

游戏旋转矢量

姿态

加速度计、陀螺仪、绝不能使用磁力计

连续

地磁旋转矢量 低功耗传感器

姿态

加速度计、磁力计、绝不能使用陀螺仪

连续

扫视手势 低功耗传感器

互动

未定义

单次

重力

姿态

加速度计、陀螺仪(如果存在)或磁力计(如果陀螺仪不存在)

连续

未校准陀螺仪

未校准

陀螺仪

连续

线性加速度

活动

加速度计、陀螺仪(如果存在)或磁力计(如果陀螺仪不存在)

连续

未校准磁场

未校准

磁力计

连续

方向(已弃用)

姿态

加速度计、磁力计、陀螺仪(如果存在)

连续

拿起手势 低功耗传感器

互动

未定义

单次

旋转矢量

姿态

加速度计、磁力计、陀螺仪

连续

显著运动 低功耗传感器

活动

加速度计(或其他,只要是低功耗的即可)

单次

步数计数器 低功耗传感器

活动

加速度计

变化时

步测器 低功耗传感器

活动

加速度计

特殊

倾斜检测器 低功耗传感器

活动

加速度计

特殊

唤醒手势 低功耗传感器

互动

未定义

单次

低功耗传感器 = 低功耗传感器

活动复合传感器

线性加速度

底层物理传感器:加速度计和(如果存在)陀螺仪(或磁力计,如果陀螺仪不存在)

报告模式:连续

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

线性加速度传感器报告传感器坐标系中设备的线性加速度,不包括重力。

输出在概念上是:加速度计的输出减去 重力传感器的输出。它以 m/s^2 为单位在 sensors_event_t.acceleration 的 x、y 和 z 字段中报告。

当设备静止时,所有轴上的读数应接近于 0。

如果设备具有陀螺仪,则线性加速度传感器必须使用陀螺仪和加速度计作为输入。

如果设备没有陀螺仪,则线性加速度传感器必须使用加速度计和磁力计作为输入。

显著运动

底层物理传感器:加速度计(或其他,只要是低功耗的即可)

报告模式:单次

低功耗

仅实现此传感器的唤醒版本。

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

显著运动检测器在检测到显著运动时触发:可能导致用户位置发生变化的运动。

此类显著运动的示例包括

  • 步行或骑自行车
  • 坐在行驶中的汽车、长途汽车或火车中

不会触发显著运动的情况示例

  • 手机放在口袋里,人没有移动
  • 手机放在桌子上,桌子由于附近的交通或洗衣机而稍微晃动

在高层,显著运动检测器用于降低位置确定的功耗。当定位算法检测到设备是静态的时,它们可以切换到低功耗模式,在这种模式下,它们依赖于显著运动来在用户更改位置时唤醒设备。

此传感器必须是低功耗的。它在功耗方面做出了权衡,这可能会导致少量误报。这样做有几个原因

  • 此传感器的目标是节省功耗。
  • 当用户没有移动时触发事件(误报)在功耗方面代价高昂,因此应避免。
  • 当用户移动时未触发事件(漏报)是可以接受的,只要它不是重复进行的。如果用户已经步行了 10 秒钟,则在这 10 秒钟内未触发事件是不可接受的。

每个传感器事件在 sensors_event_t.data[0] 中报告 1

步测器

底层物理传感器:加速度计(+ 可能还有其他,只要是低功耗的即可)

报告模式:特殊(每走一步一个事件)

低功耗

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

步测器在用户每走一步时生成一个事件。

事件 sensors_event_t.timestamp 的时间戳对应于脚着地时,产生加速度的剧烈变化。

与步数计数器相比,步测器应具有更低的延迟(小于两秒)。步测器和步数计数器都检测用户何时在行走、跑步和上楼梯。当用户骑自行车、驾驶或在其他车辆中时,它们不应触发。

此传感器必须是低功耗的。也就是说,如果步测无法在硬件中完成,则不应定义此传感器。特别是,当步测器被激活而加速度计未被激活时,只有步测应触发中断(而不是每个加速度计读数)。

sampling_period_ns 对步测器没有影响。

每个传感器事件在 sensors_event_t.data[0] 中报告 1

步数计数器

底层物理传感器:加速度计(+ 可能还有其他,只要是低功耗的即可)

报告模式: 变化时

低功耗

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

步数计数器报告自上次重启以来用户在激活状态下所走的步数。

测量值在 sensors_event_t.step_counter 中报告为 uint64_t,并且仅在系统重启时重置为零。

事件的时间戳设置为该事件最后一步发生的时间。

有关步测时间的意义,请参阅 步测器传感器类型。

与步测器相比,步数计数器可以具有更高的延迟(最多 10 秒)。由于这种延迟,此传感器具有很高的精度;整天测量后的步数应在实际步数的 10% 以内。步测器和步数计数器都检测用户何时在行走、跑步和上楼梯。当用户骑自行车、驾驶或在其他车辆中时,它们不应触发。

硬件必须确保内部步数计数永不溢出。硬件内部计数器的最小大小应为 16 位。如果即将发生溢出(最多每约 2^16 步),则可以唤醒 SoC,以便驱动程序可以执行计数器维护。

交互中所述,当此传感器运行时,它不应干扰任何其他传感器,特别是加速度计,加速度计很可能正在使用中。

如果特定设备无法支持这些操作模式,则 HAL 不得报告此传感器类型。也就是说,在 HAL 中“模拟”此传感器是不可接受的。

此传感器必须是低功耗的。也就是说,如果步测无法在硬件中完成,则不应定义此传感器。特别是,当步数计数器被激活而加速度计未被激活时,只有步测应触发中断(而不是加速度计数据)。

倾斜检测器

底层物理传感器:加速度计(+ 可能还有其他,只要是低功耗的即可)

报告模式:特殊

低功耗

仅实现此传感器的唤醒版本。

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

倾斜检测器在每次检测到倾斜事件时生成一个事件。

倾斜事件由自激活以来或传感器生成的上一个事件以来 2 秒窗口平均重力方向变化至少 35 度来定义。以下是算法

  • reference_estimated_gravity = 激活后前一秒钟加速度计测量的平均值或生成上一个倾斜事件时估计的重力。
  • current_estimated_gravity = 过去 2 秒加速度计测量的平均值。
  • angle(reference_estimated_gravity, current_estimated_gravity) > 35 degrees 时触发

手机方向没有变化的大加速度不应触发倾斜事件。例如,驾驶汽车时的急转弯或强加速度不应触发倾斜事件,即使平均加速度的角度变化可能超过 35 度。通常,此传感器仅在加速度计的帮助下实现。如果其他传感器不会显着增加功耗,也可以使用它们。这是一种低功耗传感器,应允许 SoC 进入挂起模式。请勿在 HAL 中模拟此传感器。每个传感器事件在 sensors_event_t.data[0] 中报告 1

姿态复合传感器

旋转矢量

底层物理传感器:加速度计、磁力计和陀螺仪

报告模式:连续

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

旋转矢量传感器报告设备相对于东-北-上坐标系的姿态。它通常通过积分加速度计、陀螺仪和磁力计读数获得。东-北-上坐标系定义为直接正交基,其中

  • X 指向东,并且与地面相切。
  • Y 指向北,并且与地面相切。
  • Z 指向天空,并且垂直于地面。

手机的姿态由将东-北-上坐标与手机坐标对齐所需的旋转来表示。也就是说,将旋转应用于世界坐标系 (X,Y,Z) 会将它们与手机坐标 (x,y,z) 对齐。

旋转可以看作是将手机围绕轴 rot_axis 旋转角度 theta,从参考(东-北-上对齐)设备姿态变为当前设备姿态。旋转被编码为单位四元数的四个无单位 x、y、z、w 分量

  • sensors_event_t.data[0] = rot_axis.x*sin(theta/2)
  • sensors_event_t.data[1] = rot_axis.y*sin(theta/2)
  • sensors_event_t.data[2] = rot_axis.z*sin(theta/2)
  • sensors_event_t.data[3] = cos(theta/2)

其中

  • rot_axis 的 x、y 和 z 字段是表示旋转轴的单位长度向量的东-北-上坐标
  • theta 是旋转角度

四元数是单位四元数:它的范数必须为 1。未能确保这一点将导致客户端行为不稳定。

此外,此传感器还报告估计的航向精度

sensors_event_t.data[4] = estimated_accuracy(以弧度为单位)

航向误差必须在 95% 的时间内小于 estimated_accuracy。此传感器必须使用陀螺仪作为主要的姿态变化输入。

此传感器还使用加速度计和磁力计输入来弥补陀螺仪漂移,并且不能仅使用加速度计和磁力计来实现。

游戏旋转矢量

底层物理传感器:加速度计和陀螺仪(无磁力计)

报告模式:连续

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

游戏旋转矢量传感器类似于旋转矢量传感器,但不使用地磁场。因此,Y 轴不指向北方,而是指向其他某个参考方向。允许该参考方向的漂移量级与陀螺仪绕 Z 轴漂移的量级相同。

有关如何设置 sensors_event_t.data[0-3] 的详细信息,请参阅旋转矢量传感器。此传感器不报告估计的航向精度:sensors_event_t.data[4] 是保留的,应设置为 0

在理想情况下,旋转并返回到相同真实世界姿态的手机应报告相同的游戏旋转矢量。

此传感器必须基于陀螺仪和加速度计。除了间接地通过陀螺仪偏置估计外,它不能使用磁力计作为输入。

重力

底层物理传感器:加速度计和(如果存在)陀螺仪(或磁力计,如果陀螺仪不存在)

报告模式:连续

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

重力传感器报告设备坐标中重力的方向和大小。

重力矢量分量以 m/s^2 为单位在 sensors_event_t.acceleration 的 x、y 和 z 字段中报告。

当设备静止时,重力传感器的输出应与加速度计的输出相同。在地球上,量级约为 9.8 m/s^2。

如果设备具有陀螺仪,则重力传感器必须使用陀螺仪和加速度计作为输入。

如果设备没有陀螺仪,则重力传感器必须使用加速度计和磁力计作为输入。

地磁旋转矢量

底层物理传感器:加速度计和磁力计(无陀螺仪)

报告模式:连续

低功耗

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

地磁旋转矢量类似于旋转矢量传感器,但使用磁力计,不使用陀螺仪。

此传感器必须基于磁力计。它不能使用陀螺仪来实现,陀螺仪输入也不能被此传感器使用。

有关如何设置 sensors_event_t.data[0-4] 的详细信息,请参阅旋转矢量传感器。

与旋转矢量传感器一样,航向误差必须在 95% 的时间内小于估计的精度 (sensors_event_t.data[4])。

此传感器必须是低功耗的,因此必须在硬件中实现。

方向(已弃用)

底层物理传感器:加速度计、磁力计和(如果存在)陀螺仪

报告模式:连续

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

注意:这是一种较旧的传感器类型,已在 Android SDK 中弃用。它已被旋转矢量传感器取代,旋转矢量传感器的定义更清晰。在可能的情况下,请使用旋转矢量传感器而不是方向传感器。

方向传感器报告设备的姿态。测量值以度为单位在 sensors_event_t.orientation 的 x、y 和 z 字段中报告

  • sensors_event_t.orientation.x:方位角,磁北方向和 Y 轴之间的角度,绕 Z 轴 (0<=azimuth<360)。0=北,90=东,180=南,270=西。
  • sensors_event_t.orientation.y:俯仰角,绕 X 轴旋转 (-180<=pitch<=180),当 Z 轴向 Y 轴移动时为正值。
  • sensors_event_t.orientation.z:滚转角,绕 Y 轴旋转 (-90<=roll<=90),当 X 轴向 Z 轴移动时为正值。

请注意,由于历史原因,滚转角在顺时针方向为正。(从数学上讲,它在逆时针方向应为正)

Depiction of orientation
   relative to a device

图 3. 相对于设备的姿态

此定义与航空中使用的偏航角、俯仰角和滚转角不同,在航空中,X 轴沿飞机的长边(从尾部到机头)。

方向传感器还通过 sensors_event_t.orientation.status 报告其读数的预期精度。有关此字段可能值的更多信息,请参阅 SensorManager SENSOR_STATUS_* 常量。

未校准的传感器

未校准的传感器提供更原始的结果,可能包括一些偏差,但也包含更少的因校准而应用的校正“跳变”。一些应用可能更喜欢这些未校准的结果,因为它们更平滑且更可靠。例如,如果应用尝试进行自己的传感器融合,则引入校准实际上可能会扭曲结果。

未校准的加速度计

底层物理传感器:加速度计

报告模式: 连续

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

未校准的加速度计传感器报告设备沿三个传感器轴的加速度,没有任何偏置校正(工厂偏置和温度补偿应用于未校准的测量值),以及偏置估计值。所有值均以 SI 单位 (m/s^2) 表示,并在 sensors_event_t.uncalibrated_accelerometer 的字段中报告

  • x_uncalib:沿 X 轴的加速度(无偏置补偿)
  • y_uncalib:沿 Y 轴的加速度(无偏置补偿)
  • z_uncalib:沿 Z 轴的加速度(无偏置补偿)
  • x_bias:沿 X 轴的估计偏置
  • y_bias:沿 Y 轴的估计偏置
  • z_bias:沿 Z 轴的估计偏置

未校准陀螺仪

底层物理传感器:陀螺仪

报告模式:连续

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

未校准的陀螺仪报告传感器轴周围的旋转速率,而不对其应用偏置补偿,以及偏置估计值。所有值均以弧度/秒为单位,并在 sensors_event_t.uncalibrated_gyro 的字段中报告

  • x_uncalib:绕 X 轴的角速度(无漂移补偿)
  • y_uncalib:绕 Y 轴的角速度(无漂移补偿)
  • z_uncalib:绕 Z 轴的角速度(无漂移补偿)
  • x_bias:绕 X 轴的估计漂移
  • y_bias:绕 Y 轴的估计漂移
  • z_bias:绕 Z 轴的估计漂移

从概念上讲,未校准的测量值是校准的测量值和偏置估计值之和:_uncalibrated = _calibrated + _bias

x_biasy_biasz_bias 值预计会在偏置估计值发生更改时立即跳变,并且在其余时间内应保持稳定。

有关所用坐标系的详细信息,请参阅陀螺仪传感器的定义。

工厂校准和温度补偿必须应用于测量值。此外,必须实现陀螺仪漂移估计,以便可以在 x_biasy_biasz_bias 中报告合理的估计值。如果实现无法估计漂移,则不得实现此传感器。

如果此传感器存在,则相应的陀螺仪传感器也必须存在,并且两个传感器必须共享相同的 sensor_t.namesensor_t.vendor 值。

未校准磁场

底层物理传感器:磁力计

报告模式:连续

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

未校准的磁场传感器报告环境磁场以及硬铁校准估计值。所有值均以微特斯拉 (uT) 为单位,并在 sensors_event_t.uncalibrated_magnetic 的字段中报告

  • x_uncalib:沿 X 轴的磁场(无硬铁补偿)
  • y_uncalib:沿 Y 轴的磁场(无硬铁补偿)
  • z_uncalib:沿 Z 轴的磁场(无硬铁补偿)
  • x_bias:沿 X 轴的估计硬铁偏置
  • y_bias:沿 Y 轴的估计硬铁偏置
  • z_bias:沿 Z 轴的估计硬铁偏置

从概念上讲,未校准的测量值是校准的测量值和偏置估计值之和:_uncalibrated = _calibrated + _bias

未校准的磁力计允许更高级别的算法处理不良的硬铁估计。 x_biasy_biasz_bias 值预计会在硬铁估计值发生更改时立即跳变,并且在其余时间内应保持稳定。

软铁校准和温度补偿必须应用于测量值。此外,必须实现硬铁估计,以便可以在 x_biasy_biasz_bias 中报告合理的估计值。如果实现无法估计偏置,则不得实现此传感器。

如果此传感器存在,则相应的磁场传感器必须存在,并且两个传感器必须共享相同的 sensor_t.namesensor_t.vendor 值。

铰链角度

报告模式: 变化时

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

铰链角度传感器测量设备两个组成部分之间的角度,以度为单位。由此传感器类型测量的铰链运动预计会改变用户与设备交互的方式,例如,通过展开或显示显示屏。

交互复合传感器

某些传感器主要用于检测与用户的交互。我们不定义这些传感器必须如何实现,但它们必须是低功耗的,并且设备制造商有责任验证其用户体验方面的质量。

唤醒手势

底层物理传感器:未定义(任何低功耗传感器)

报告模式:单次

低功耗

仅实现此传感器的唤醒版本。

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

唤醒手势传感器支持通过设备特定的动作来唤醒设备。当此传感器触发时,设备的行为如同按下电源按钮一样,开启屏幕。用户可以在设备设置中停用此行为(在此传感器触发时开启屏幕)。设置的更改不会影响传感器的行为:仅影响框架是否在此传感器触发时开启屏幕。要检测的实际手势未指定,可以由设备制造商选择。

此传感器必须是低功耗的,因为它很可能 24/7 全天候激活。

每个传感器事件在 sensors_event_t.data[0] 中报告 1

拿起手势

底层物理传感器:未定义(任何低功耗传感器)

报告模式:单次

低功耗

仅实现此传感器的唤醒版本。

getDefaultSensor(SENSOR_TYPE_PICK_UP_GESTURE) 返回唤醒传感器

拿起手势传感器在设备被拿起时触发,无论设备之前在哪里(桌子、口袋、包)。

每个传感器事件在 sensors_event_t.data[0] 中报告 1

一览手势

底层物理传感器:未定义(任何低功耗传感器)

报告模式:单次

低功耗

仅实现此传感器的唤醒版本。

getDefaultSensor(SENSOR_TYPE_GLANCE_GESTURE) 返回唤醒传感器

一览手势传感器支持短暂开启屏幕,以便用户根据特定动作快速查看屏幕上的内容。当此传感器触发时,设备将短暂开启屏幕,以允许用户快速查看通知或其他内容,同时设备保持锁定在非交互状态(打盹),然后屏幕将再次关闭。用户可以在设备设置中停用此行为(在此传感器触发时短暂开启屏幕)。设置的更改不会影响传感器的行为:仅影响框架是否在此传感器触发时短暂开启屏幕。要检测的实际手势未指定,可以由设备制造商选择。

此传感器必须是低功耗的,因为它很可能 24/7 全天候激活。每个传感器事件在 sensors_event_t.data[0] 中报告 1

有限轴 IMU 传感器

从 Android 13 开始提供,有限轴 IMU 传感器是支持并非所有三个轴(x、y、z)都可用的用例的传感器。Android 中的标准 IMU 类型(例如 SENSOR_TYPE_ACCELEROMETER SENSOR_TYPE_GYROSCOPE)假设所有三个轴都受支持。但是,并非所有外形尺寸和设备都支持 3 轴加速度计和 3 轴陀螺仪。

加速度计有限轴

底层物理传感器:加速度计

报告模式:连续

getDefaultSensor(SENSOR_TYPE_ACCELEROMETER_LIMITED_AXES) 返回非唤醒传感器

加速度计有限轴传感器等效于 TYPE_ACCELEROMETER,但支持一个或两个轴不受支持的情况。

传感器报告的最后三个传感器事件值表示 x、y 和 z 轴的加速度值是否受支持。值 1.0 表示轴受支持,值 0 表示轴不受支持。设备制造商在构建时确定受支持的轴,并且这些值在运行时不会更改。

设备制造商必须将未使用的轴的加速度值设置为 0,而不是具有未定义的值。

陀螺仪有限轴

底层物理传感器:陀螺仪

报告模式: 连续

getDefaultSensor(SENSOR_TYPE_GYROSCOPE_LIMITED_AXES) 返回非唤醒传感器

陀螺仪有限轴传感器等效于 TYPE_GYROSCOPE,但支持一个或两个轴不受支持的情况。

传感器报告的最后三个传感器事件值表示 x、y 和 z 轴的角速度值是否受支持。值 1.0 表示轴受支持,值 0 表示轴不受支持。设备制造商在构建时确定受支持的轴,并且这些值在运行时不会更改。

设备制造商必须将未使用的轴的角速度值设置为 0

加速度计有限轴未校准

底层物理传感器:加速度计

报告模式: 连续

getDefaultSensor(SENSOR_TYPE_ACCELEROMETER_LIMITED_AXES_UNCALIBRATED) 返回非唤醒传感器

加速度计有限轴未校准传感器等效于 TYPE_ACCELEROMETER_UNCALIBRATED,但支持一个或两个轴不受支持的情况。

传感器报告的最后三个传感器事件值表示 x、y 和 z 轴的加速度和偏差值是否受支持。值 1.0 表示轴受支持,值 0 表示轴不受支持。设备制造商在构建时确定受支持的轴,并且这些值在运行时不会更改。

设备制造商必须将未使用的轴的加速度和偏差值设置为 0

陀螺仪有限轴未校准

底层物理传感器:陀螺仪

报告模式: 连续

getDefaultSensor(SENSOR_TYPE_GYROSCOPE_LIMITED_AXES_UNCALIBRATED) 返回非唤醒传感器

陀螺仪有限轴未校准传感器等效于 TYPE_GYROSCOPE_UNCALIBRATED,但支持一个或两个轴不受支持的情况。

传感器报告的最后三个传感器事件值表示 x、y 和 z 轴的角速度和漂移值是否受支持。值 1.0 表示轴受支持,值 0 表示轴不受支持。设备制造商在构建时确定受支持的轴,并且这些值在运行时不会更改。

设备制造商必须将未使用的轴的角速度和漂移值设置为 0

复合有限轴 IMU

底层物理传感器:3 轴加速度计、3 轴陀螺仪、3 轴未校准加速度计和 3 轴未校准陀螺仪传感器的任意组合。

报告模式: 连续

复合有限轴 IMU 传感器等效于有限轴 IMU 传感器,但它不是在 HAL 中受支持,而是将 3 轴传感器数据转换为等效的有限轴变体。这些复合传感器仅为汽车设备启用。

下表显示了从标准 3 轴加速度计到复合有限轴加速度计的转换示例。

SENSOR_TYPE_ACCELEROMETER 的 SensorEvent 值 SENSOR_TYPE_ACCELEROMETER SensorEvent 示例 复合 SENSOR_TYPE_ACCELEROMETER_LIMITED_AXES SensorEvent
values[0]

-0.065

-0.065

values[1]

0.078

0.078

values[2]

9.808

9.808

values[3]

不适用

1.0

values[4]

不适用

1.0

values[5]

不适用

1.0

汽车传感器

支持汽车用例的传感器。

朝向

底层物理传感器:GPS、磁力计、加速度计和陀螺仪的任意组合。

报告模式:连续

getDefaultSensor(SENSOR_TYPE_HEADING) 返回非唤醒传感器

从 Android 13 开始提供,朝向传感器测量设备指向真北方向的角度,单位为度。朝向传感器包括两个 SensorEvent 值。一个用于测量的设备朝向,另一个用于提供的朝向值的精度。

此传感器报告的朝向值必须介于 0.0(含)和 360.0(不含)之间,其中 0 表示北方,90 表示东方,180 表示南方,270 表示西方。

此传感器的精度定义为 68% 置信度。在底层分布为高斯正态分布的情况下,精度为一个标准差。例如,如果朝向传感器返回的朝向值为 60 度,精度值为 10 度,则真实朝向有 68% 的概率介于 50 度和 70 度之间。