Android中的传感器类型和接口名称

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

1. 传感器坐标轴

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

1.1 移动设备坐标轴

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

移动设备的 Sensor API 坐标系

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

1.2 汽车坐标轴

在 Android Automotive 实现中,坐标轴相对于车身坐标系进行定义。 车辆参考坐标系的原点是后轴的中心。车辆参考坐标系的方向设置需满足以下要求:

  • X 轴指向右侧,并位于水平面上,与车辆的对称平面垂直。
  • Y 轴指向前方,并位于水平面上。

汽车设备的 Sensor API 坐标系

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

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

参考坐标系的 Z 轴与重力方向一致,这意味着 X 轴和 Y 轴都是水平的。因此,Y 轴可能并不总是穿过前轴。

2. 基础传感器

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

  • SENSOR_TYPE_ACCELEROMETER
  • SENSOR_TYPE_GYROSCOPE
  • SENSOR_TYPE_MAGNETOMETER

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

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

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

  • 额定偏差范围为 1 度/秒的陀螺仪芯片。
    • 在出厂校准后,通过应用温度补偿和偏差补偿降低 Android 传感器的实际偏差,可能最终确保偏差低于 0.01 度/秒。
    • 在此情况下,即使底层传感器的数据表显示偏差为 1 度/秒,我们仍认为 Android 传感器的偏差低于 0.01 度/秒。
  • 功耗为 100 uW 的气压计。
    • 由于生成的数据需要从芯片传输到 SoC,因此从气压计 Android 传感器收集数据的实际功耗可能会高得多,例如 1,000 uW。
    • 在此情况下,即使在气压计芯片引线上测得的功耗为 100 uW,我们仍认为 Android 传感器的功耗为 1000 uW。
  • 校准后功耗为 100 uW 的磁力计(但校准时的功耗更高)。
    • 其校准程序可能需要激活陀螺仪(消耗 5000 uW),并运行一些算法(额外消耗 900 uW)。
    • 在此情况下,我们认为(磁力计)Android 传感器的最大功耗为 6000 uW。
    • 在这种情况下,测量平均功耗更为实用,这也是通过 HAL 报告的传感器静态特征之一。

2.1 加速度计

报告模式:连续模式

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

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

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

示例如下:

  • 自由落体时,(x, y, z) 的范数应接近于 0。
  • 当设备平放在桌子上并从其左侧向右推动时,x 轴加速度值为正。
  • 当设备平放在桌子上时,z 轴上的加速度值为 +9.81,相当于设备的加速度 (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_* 常量。

2.2  环境温度传感器

报告模式:变化时触发模式

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

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

2.3 磁场传感器

报告模式:连续模式

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_* 常量。

读数根据以下参数校准:

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

2.4 陀螺仪

报告模式:连续模式

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

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

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

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

读数根据以下参数校准:

  • 温度补偿
  • 出厂(或在线)尺度补偿
  • 在线偏差校准(以去除偏移)

陀螺仪还通过 sensors_event_t.gyro.status 报告其读数的准确性。如需详细了解此字段的可能值,请参阅 SensorManager 的 SENSOR_STATUS_* 常量。

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

2.5 心率传感器

报告模式:变化时触发模式

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.bpm 或 heart_rate.status 自上次事件后已发生变化时才会触发事件。事件生成速度不会大于每隔 sampling_period 一次。

sensor_t.requiredPermission 始终为 SENSOR_PERMISSION_BODY_SENSORS

2.6 光线

报告模式:变化时触发模式

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

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

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

2.7 近程传感器

报告模式:变化时触发模式

通常定义为唤醒传感器

getDefaultSensor(SENSOR_TYPE_PROXIMITY) 返回唤醒传感器

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

在 Android 4.4 或更早版本中,近程传感器一直是唤醒传感器,也就是说,此类传感器在检测到近程距离发生变化时会唤醒 SoC。对于 Android 4.4 之后的版本,我们建议您首先实现该传感器的唤醒版本,因为该版本在打电话时用于开启和关闭屏幕。

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

2.8 压力

报告模式:连续模式

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

压力传感器(也称为气压计)可报告大气压力,以百帕斯卡 (hPa) 为单位。

使用以下参数校准读数:

  • 温度补偿
  • 出厂偏差校准
  • 出厂尺度校准

气压计通常用于估算高度变化。 如需估算绝对高度,必须将海平面压力(随天气变化)作为参照点。

2.9 相对湿度传感器

报告模式:变化时触发模式

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

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

3 复合传感器类型

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

  • 步测器和大幅度动作传感器,通常基于加速度计,但是也可基于其他传感器(如果功耗和精度可接受的话)。
  • 游戏旋转矢量传感器,基于加速度计和陀螺仪。
  • 未校准陀螺仪,类似于陀螺仪基础传感器,但是单独报告偏差校准(而非在测量结果中校正)。

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

下表列出了可用的复合传感器类型。每种复合传感器都依赖于来自一个或多个物理传感器的数据。请避免选择使用其他底层物理传感器来估算结果,因为这样带来的用户体验较差。

注意:当且仅当设备没有配备陀螺仪时,您才可以在不使用陀螺仪的情况下,实现旋转矢量传感器、线性加速度传感器和重力传感器。

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

游戏旋转矢量传感器

姿势类

加速度计、陀螺仪,不得使用磁力计

连续模式

地磁旋转矢量传感器 

低功耗传感器

姿势类

加速度计、磁力计,不得使用陀螺仪

连续模式

快览手势传感器 

低功耗传感器

互动

未定义

单次模式

重力传感器

姿势类

加速度计、陀螺仪

连续模式

未校准陀螺仪传感器

未校准类

陀螺仪

连续模式

线性加速器

动作传感器

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

连续模式

未校准磁场传感器

未校准类

磁力计

连续模式

方向传感器(已废弃)

姿势类

加速度计、磁力计、陀螺仪(如有)

连续模式

拿起手势传感器 

低功耗传感器

互动

未定义

单次模式

旋转矢量传感器

姿势类

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

连续模式

大幅度动作传感器 

低功耗传感器

动作传感器

加速度计(或其他功耗极低的传感器)

单次模式

计步器 

低功耗传感器

动作传感器

加速度计

变化模式

步测器 

低功耗传感器

动作传感器

加速度计

特殊模式

倾斜检测器 

低功耗传感器

动作传感器

加速度计

特殊模式

唤醒手势传感器 

低功耗传感器

互动

未定义

单次模式

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

4. 动作复合传感器

4.1 线性加速器

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

报告模式:连续模式

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

线性加速度传感器可报告传感器框架内设备的线性加速度(不包括重力加速度)。

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

当设备不动时,所有轴上的读数应接近 0。

如果设备配备陀螺仪,则线性加速度传感器必须将陀螺仪和加速度计作为输入源。

如果设备未配备陀螺仪,则线性加速度传感器必须将加速度计和磁力计作为输入源。

4.2 大幅度动作传感器

底层物理传感器:加速度计(或其他低功耗的传感器)

报告模式:单次模式

低功耗

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

getDefaultSensor(SENSOR_TYPE_SIGNIFICANT_MOTION) 返回唤醒传感器

当检测到大幅度动作时,会触发大幅度动作传感器;大幅度动作是指可能导致用户位置发生变化的动作。

此类大幅度动作示例如下:

  • 步行或骑自行车
  • 乘坐在正在行驶的汽车、巴士或火车内

不会触发大幅度动作传感器的情况示例如下:

  • 手机放在口袋里,人不动
  • 手机放在桌子上,而桌子由于附近的交通情况或洗衣机运转而轻微振动

从更高层面来看,大幅度动作传感器可用于降低位置测定的功耗。当定位算法检测到设备静止时,可将设备切换到低功耗模式,在该模式下,这些算法依赖用户改变位置时发生的大幅度动作来唤醒设备。

该传感器必须具备低功耗特性。这样可以节省功耗,但可能会导致少量漏报情况。这样做是出于以下几个原因:

  • 该传感器的目标是节省电量。
  • 用户不动时触发事件(误报)会消耗大量电量,因此应尽量加以避免。
  • 在用户移动时不触发事件(漏报)是可以接受的,只要不频繁出现这种情况即可。如果用户已经行走 10 秒钟,但这 10 秒内一直未触发事件,则是不可接受的。

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

4.3 步测器

底层物理传感器:加速度计(可能还有其他低功耗计量器)

报告模式:特殊模式(一步触发一个事件)

低功耗

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

用户每走一步,步测器就触发一个事件。

sensors_event_t.timestamp 事件的时间戳对应脚部触地的时刻,此时会产生较大的加速度变化。

与计步器相比,步测器的延迟较低(小于两秒)。步测器和计步器都可以在用户步行、奔跑和走楼梯时进行感测。当用户骑自行车、驾车或乘坐其他交通工具时,不应触发感测。

该传感器必须具备低功耗特性。也就是说,如果在硬件中无法完成步数感测,则不应定义此传感器。尤其是,当启用步测器但未启用加速度计时,只有步数(而非每次加速度计读取)会触发中断。

sampling_period_ns 对步测器没有影响。

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

4.4 计步器

底层物理传感器:加速度计(可能还有其他低功耗计量器)

报告模式:变化时触发模式

低功耗

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

计步器报告自激活后上一次重新启动以来用户行走的步数。

测量结果在 sensors_event_t.step_counter 中以 uint64_t 报告,并仅在系统重新启动时重置为零。

事件的时间戳设置为该事件最后一次迈步的时间。

请参阅步测器传感器类型,了解一步所对应的时间的意义。

与步测器相比,计步器可能具有更高的延迟(最多 10 秒)。也正因这种延迟,该传感器具备较高的准确性;完成一整天的测量后,步数应在实际步数的 10% 偏差范围内。步测器和计步器都可以在用户步行、奔跑和走楼梯时进行感测。当用户骑自行车、驾车或乘坐其他交通工具时,不应触发感测。

硬件必须确保内部步数始终不会溢出。硬件内部计数器的大小下限应为 16 位。在即将发生溢出时(最多约每 2^16 步一次),可以唤醒 SoC,以便驱动程序可进行计数器维护。

正如互动传感器中所述,当该传感器工作时,不得干扰任何其他传感器,特别是很可能正在使用中的加速度计。

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

该传感器必须具备低功耗特性。也就是说,如果在硬件中无法完成步数感测,则不应定义此传感器。尤其是,当启用计步器但未启用加速度计时,只有步数(而非加速度计数据)会触发中断。

4.5 倾斜检测器

底层物理传感器:加速度计(可能还有其他低功耗计量器)

报告模式:特殊模式

低功耗

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

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

5. 姿势复合传感器

5.1 旋转矢量传感器

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

报告模式:连续模式

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

旋转矢量传感器可报告设备相对于东北天坐标系的方向。通常通过集成加速度计、陀螺仪和磁力计的读数获得该值。东北天坐标系是指完全正交基,其中:

  • X 轴指向东,与地面相切。
  • Y 轴指向北,与地面相切。
  • Z 轴指向上,与地面垂直。

手机方向表示为东北天坐标系与手机坐标系对齐所需的旋转幅度。也就是说,对世界坐标系 (X,Y,Z) 应用这一幅度的旋转将使该坐标系与手机坐标系 (x,y,z) 对齐。

该旋转可看作围绕轴 rot_axis 将手机旋转 θ 角度,从参照(与东北天对齐)设备方向转到当前设备方向。该旋转被编码为一个单位四元数的四个无量纲 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。该传感器必须使用陀螺仪作为主要方向变化输入源。

该传感器还使用加速度计和磁力计输入源来弥补陀螺仪偏移,但不能仅使用加速度计和磁力计来实现该传感器。

5.2 游戏旋转矢量传感器

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

报告模式:连续模式

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

游戏旋转矢量传感器类似于旋转矢量传感器,但不使用地磁场。因此,Y 轴不指向北,而是指向其他参照坐标。该参考坐标可以偏移与陀螺仪沿 Z 轴偏移时的幅度相同数量级的幅度。

请参阅旋转矢量传感器,详细了解如何设置 sensors_event_t.data[0-3]。此传感器不报告估算的首向精度:保留 sensors_event_t.data[4],并且应将其设置为 0

理想情况下,经过旋转并返回到与现实世界方向同向的手机应该报告相同的游戏旋转矢量。

该传感器必须基于陀螺仪和加速度计。不能使用磁力计作为输入源,也不可通过估算陀螺仪偏差间接作为输入源。

5.3 重力传感器

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

报告模式:连续模式

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

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

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

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

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

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

5.4 地磁旋转矢量传感器

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

报告模式:连续模式

低功耗

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

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

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

请参阅旋转矢量传感器,详细了解如何设置 sensors_event_t.data[0-4]

与旋转矢量传感器类似,在 95% 的时间里,首向误差必须小于估算精度 (sensors_event_t.data[4])。

该传感器必须具备低功耗特性,因此必须在硬件中实现。

5.5 方向传感器(已废弃)

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

报告模式:连续模式

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 轴移动时为正值。

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

相对于设备的方向描述

图 3. 相对于设备的方向

该定义与航空中使用的偏航、俯仰和滚动不同,其中 X 轴沿飞机长边(机尾到机头)延伸。

方向传感器还通过 sensors_event_t.orientation.status 报告其预测的读数精度。如需详细了解此字段的可能值,请参阅 SensorManager 的 SENSOR_STATUS_* 常量。

6. 未校准传感器

未校准传感器可提供更多的原始结果,可能包括一些偏差,还包含校准后更正结果中的少数“激增”值。一些应用可能更倾向于使用这些未校准结果,因为此类结果更流畅、可靠。例如,如果应用试图自己进行传感器融合,则引入校准可能会使结果失真。

6.1 未校准加速度计

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

报告模式:连续模式

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

未校准加速度计传感器可在没有偏差校正的情况下报告设备沿三个传感器坐标轴的加速度(出厂设置偏差和温度补偿应用于未校准的测量结果)以及偏差估值。所有值均采用国际单位制单位 (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 轴的估算偏差

6.2 未校准陀螺仪传感器

底层物理传感器:陀螺仪

报告模式:连续模式

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_bias 和 z_bias 值就会激增,而在其余时间则应保持不变。

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

必须将出厂校准和温度补偿应用于测量结果。此外,必须实现陀螺仪偏移估算,以便在 x_biasy_bias 和 z_bias 中报告合理的估算值。如果该实现无法估算偏移,则不得实现该传感器。

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

6.3 未校准磁场传感器

底层物理传感器:磁力计

报告模式:连续模式

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_bias 和 z_bias 值就会激增,而在其余时间则应保持不变。

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

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

6.4 合页角度传感器

报告模式:变化时触发模式

getDefaultSensor(SENSOR_TYPE_HINGE_ANGLE) 返回唤醒传感器

合页角度传感器用于测量设备两个独立部分之间的角度(以度为单位)。通过这种传感器类型测量的合页的移动预计会改变用户与设备的交互方式,例如通过展开或显示显示屏。

7. 互动复合传感器

一些传感器主要用于检测与用户的互动。我们没有定义这些传感器的实现方式,但它们必须具备低功耗特性,并且设备制造商有责任验证它们在用户体验方面的质量。

7.1 唤醒手势传感器

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

报告模式:单次模式

低功耗

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

getDefaultSensor(SENSOR_TYPE_WAKE_GESTURE) 返回唤醒传感器

唤醒手势传感器可以使用特定设备动作来唤醒设备。当该传感器被触发时,设备会开启屏幕,就如同按下电源按钮一样。用户可在设备设置中禁用这种设备行为(当该传感器被触发时开启屏幕)。更改设置不会影响该传感器的行为:仅改变当该传感器被触发时,框架是否会开启屏幕。未指定待感测的实际手势,可由设备制造商进行选择。

该传感器必须具备低功耗特性,因为它可能会全天候启用。

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

7.2 拿起手势传感器

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

报告模式:单次模式

低功耗

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

getDefaultSensor(SENSOR_TYPE_PICK_UP_GESTURE) 返回唤醒传感器

拿起手势传感器仅在拿起设备时被触发,并且不考虑设备在拿起前的所在位置(桌面、口袋里或袋子里)。

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

7.3 快览手势传感器

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

报告模式:单次模式

低功耗

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

getDefaultSensor(SENSOR_TYPE_GLANCE_GESTURE) 返回唤醒传感器

快览手势传感器可短暂开启屏幕,方便用户使用特定动作浏览屏幕内容。当该传感器被触发时,设备将短暂开启屏幕,让用户可以在设备处于锁定且非互动状态(低电耗模式)时浏览通知或其他内容,然后屏幕将再次关闭。用户可在设备设置中禁用这种行为(当该传感器被触发时,短暂开启屏幕)。更改设置不会影响传感器的行为:仅改变当该传感器被触发时,Android 框架是否短暂开启屏幕。未指定待感测的实际手势,可由设备制造商进行选择。

该传感器必须具备低功耗特性,因为它可能会全天候启用。每个传感器事件在 sensors_event_t.data[0] 中报告 1

8. 有限轴 IMU 传感器

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

8.1 加速度计有限轴

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

报告模式:连续模式

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

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

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

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

8.2 陀螺仪有限轴

底层物理传感器:陀螺仪

报告模式:连续模式

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

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

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

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

8.3 未校准加速度计有限轴

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

报告模式:连续模式

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

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

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

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

8.4 未校准陀螺仪有限轴

底层物理传感器:陀螺仪

报告模式:连续模式

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

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

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

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

8.5 复合有限轴 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

9. 汽车传感器

用于支持汽车用例的传感器。

首向

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

报告模式:连续模式

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

首向传感器从 Android 13 开始提供,能够以角度为单位测量设备相对于正北指向的方向。首向传感器包含两个 SensorEvent 值。 一个值代表所测量的设备首向,另一个值代表所提供的首向值的准确度。

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

此传感器的准确度以 68% 的置信度定义。如果潜在分布情况是高斯正态分布,则准确度为标准偏差。例如,如果首向传感器返回的首向值为 60 度,且准确度值为 10 度,则真实首向介于 50 度和 70 度之间的概率为 68%。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/432835.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

leetcode:88. 合并两个有序数组

原题地址&#xff1a;https://leetcode.cn/problems/merge-sorted-array/description/ 题目描述 给你两个按 非递减顺序 排列的整数数组 nums1 和 nums2&#xff0c;另有两个整数 m 和 n &#xff0c;分别表示 nums1 和 nums2 中的元素数目。 请你 合并 nums2 到 nums1 中&a…

VSCode安装

前言 Visual Studio Code 是一个轻量级功能强大的源代码编辑器&#xff0c;支持语法高亮、代码自动补全&#xff08;又称 IntelliSense&#xff09;、代码重构、查看定义功能&#xff0c;并且内置了命令行工具和 Git 版本控制系统。适用于 Windows、macOS 和 Linux。它内置了对…

网络原理初识(1)

目录 一、网络发展史 1、独立模式 2、网络互联 3、局域网LAN 局域网组建的方式 1、基于网线直连 2、基于集线器组建 3、基于交换机组建 4、基于交换机和路由器组建 4、广域网WAN 二、网络通信基础 1、IP地址 2、端口号 3、认识协议 4、五元组 一、网络发展史 1、独立模式 …

rabbitmq3

指定通过通道将消息发送给哪个消息队列 同一个通道可以向不同的队列发送消息的&#xff0c;如果你绑定的队列和发布消息的队列不一致也是可以的&#xff0c;这个才是真正的发布消息去具体的某一个队列&#xff1a; 如果队列没有持久化&#xff0c;就不会把这个消息队列保存在磁…

对象得定义与使用(动力节点老杜)

对象思想 1.什么是面向过程&#xff0c;什么是面向对象&#xff1f; 换而言之&#xff0c;面向对象思想实际就是将整体分成一个个独立的单元&#xff0c;每个单元都有自己得任务和属性&#xff0c;所有单元结合在一起完成一个整体。如果某个单元出现了问题还可以及时处理&…

微软研究深度报告:Sora文转视频AI模型全景剖析及未来展望

论文由微软研究团队撰写&#xff0c;这篇论文深入探讨了Sora的发展背景、核心技术、新兴应用场景、现有的局限性以及未来的发展机会&#xff0c;基于公开资料和团队自行进行的逆向工程分析。文中详尽且逻辑清晰&#xff0c;建议细读全文以获得深入了解。 原文&#xff1a;Sora…

nginx生成自签名SSL证书

备注&#xff1a;nginx自生成的ssl证书在浏览器访问时会提示此证书不受信用 1.安装nginx nginx必须有"--with-http_ssl_module"模块 查看nginx安装的模块&#xff1a; [rootmaster1 key]# nginx -V nginx version: nginx/1.24.0 built by gcc 4.8.5 20150623 (Red …

Python图像处理之光斑分析

文章目录 质心目标截取光斑半径 python图像处理教程&#xff1a;初步&#x1f4f7;插值变换&#x1f4f7;形态学处理&#x1f4f7;滤波 光斑是工程中经常出现的图像数据&#xff0c;其特点是目标明确&#xff0c;分布清晰。对光斑图像的分析&#xff0c;主要包括质心定位、目标…

【Android】反编译与预防被反编译

近期在开发一款软件时&#xff0c;遇上了加密、解密数据方面的一些技术问题无法攻克&#xff0c;于是抱着试试看的态度使用 jadx-gui 工具进行反编译一下。哎&#xff0c;居然还成功了&#xff0c;更骚的是&#xff0c;这一款App没有对应用进行混淆、加密、加固&#xff0c;没多…

【学习笔记】卫星基础知识

一、什么是卫星以及它如何工作&#xff1f; 通信卫星是一种人造卫星&#xff0c;通过使用转发器在源和接收器之间中继和放大无线电电信信号。卫星的工作原理是接收从地球发送的无线电信号并将无线电信号重新发送回地球。卫星使用从大型太阳能电池阵列收集的太阳能&#xff0c;…

2.Rust变量

变量的声明 let关键字 在Rust中变量必须要先声明才能使用&#xff0c;let关键字用于声明变量并将一个值绑定到该变量上。如下: fn main() {let var_name:i32 123123;println!("{}",var_name) //println! 是一个宏&#xff08;macros&#xff09;&#xff0c;可以…

Java 简单模拟银行存取钱

模拟银行存取钱 一、实验任务 在银行办理业务时&#xff0c;通常银行会开多个窗口&#xff0c;客户排队等候&#xff0c;窗口办理完业务&#xff0c;会呼叫下一个用户办理业务。本实验要求编写一个程序模拟银行存取钱业务办理。假如有两个用户在存取钱&#xff0c;两个用户分别…

记事本怎么导入Excel文件 记事本数据导入Excel方法

在日常生活中&#xff0c;记事本软件已经成为了我不可或缺的助手&#xff0c;帮助我记录着点点滴滴&#xff0c;释放了大脑的负担。然而&#xff0c;随着时间的推移&#xff0c;记事本里的内容越来越多&#xff0c;如何高效地整理这些数据成为了一个新的问题。特别是当我需要将…

创建Net8WebApi自动创建OpenApi集成swagger

问题&#xff1a;用Net8创建WebAPI时勾选启动OpenAPI&#xff0c;项目自动集成了Swagger&#xff0c;但是接口注释没有展示&#xff1f; 解决&#xff1a; 1.需要生成Api项目的XML文件。操作如下&#xff1a; 2.生成XML文件后&#xff0c;还需要在启动类Program.cs里面配置Sw…

位运算(位运算的技巧、二进制中1的个数、区间或、异或森林)

一、移位操作符 1.1 左移操作符 << 作用&#xff1a;二进制数向左边移动&#xff0c;右边补0. #include<stdio.h> int main() {int a 10;int b a << 1;//将a的二进制向左移动一位printf("a%d\nb%d", a, b);return 0; } 左移操作符相当于对…

语文教学方法有哪些,产生了什么效果

你是否曾想过&#xff0c;一位普通的语文老师如何化身为智慧的引导者&#xff0c;点燃学生心中的求知之火&#xff1f;让我们一起探寻那些神奇的语文教学方法&#xff0c;以及它们带来的深远影响。 不仅让知识变得容易理解&#xff0c;更在无形中培养了学生的各项能力。通过谈话…

华中某科技大学校园网疑似dns劫持的解决方法

问题 在校园网ping xxx.ddns.net&#xff0c;域名解析失败 使用热点ping xxx.ddns.net&#xff0c;可以ping通 尝试设置windows dns首选dns为114.114.114.114&#xff0c;重新ping&#xff0c;仍然域名解析失败 猜测【校园网可能劫持dns请求】 解决方法 使用加密的dns请求…

制作照片数字人,让图片开口说话

一、软件安装 全部按照默认程序安装 最后安装完成后把所有按钮取消勾选&#xff0c;选择【Finish】&#xff0c;在弹出的界面中选择【否】。 然后点击管理员运行&#xff0c;直接全部默认&#xff0c;不更改位置。 二、制作数字人 根据自己的电脑位数&#xff0c;选择打开 选…

修改一个教材上的网站源码使它能在www服务器子目录上正常运行

修改一个教材上的网站源码&#xff0c;使它能在www服务器子目录上正常运行。 该网站源码是教材《PHPMySQL网站开发项目式教程》上带的网站源码。该源码是用 php html 写的。该源码包含对mysql数据库进行操作的php代码。以前该网站源码只能在www服务器的根目录上正常运行&…

【Docker】技术架构演变

【Docker】技术架构演变 目录 【Docker】技术架构演变架构中的概念架构演进单机架构相关软件 应用数据分离架构应用服务集群架构相关软件 读写分离/主从分离架构相关软件 引入缓存——冷热分离架构相关软件 垂直分库&#xff08;分布式数据库架构&#xff09;相关软件 业务拆分…