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%。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MySQL面试题-锁(答案版)

锁 1、MySQL 有哪些锁&#xff1f; &#xff08;1&#xff09;全局锁 加了全局锁之后&#xff0c;整个数据库就处于只读状态了&#xff0c;这时其他线程执行以下操作&#xff0c;都会被阻塞&#xff1a; 对数据的增删改操作&#xff0c;比如 insert、delete、update等语句&…

【Git】merge时报错:refusing to merge unrelated histories

文章目录 一、问题二、解决办法1、将feature分支的东西追加到master分支中2、将feature里的东西直接覆盖到master分支中 一、问题 今天将feature分支合并到master时报错&#xff1a;refusing to merge unrelated histories&#xff08;拒绝合并无关历史&#xff09; 报错原因&…

IDEA自带 .http 请求工具文档

基础语法 请求格式 基础格式 Method Request-URI HTTP-Version Header-field: Header-valueRequest-Body其中&#xff0c;GET 请求可以省略 Method 不写&#xff1b;HTTP-Version 可以省略不写&#xff0c;默认使用 1.1 版本。 示例&#xff1a; GET https://www.baidu.co…

Linux 文件系列:深入理解文件描述符fd,重定向,自定义shell当中重定向的模拟实现

Linux 文件系列:深入理解文件fd,重定向,自定义shell当中重定向的模拟实现 一.预备知识二.回顾C语言中常见的文件接口跟重定向建立联系1.fopen函数的介绍2.fclose函数的介绍3.代码演示1.以"w"(写)的方式打开2.跟输出重定向的联系3.以 "a"(追加)的方式打开4.…

Nginx正向代理域名的配置

目录 前言 1.打开文件 2. 启用代理 3. 指定代理服务器 4. 保存配置文件并重新加载Nginx。 5. 添加域名解析。 6. 配置客户端。 总结 前言 Nginx是一个高性能、开源的Web服务器软件&#xff0c;不仅可以作为反向代理服务器使用&#xff0c;还可以作为正向代理服务器使用…

Filter过滤器+JWT令牌实现登陆验证

一、背景 我们需要在客户端访问服务器的时候给定用户一定的操作权限&#xff0c;比如没有登陆时就不能进行其他操作。如果他需要进行其他操作&#xff0c;而在这之前他没有登陆过&#xff0c;服务端则需要将该请求拦截下来&#xff0c;这就需要用到过滤器&#xff0c;过滤器可以…

HNU-算法设计与分析-甘晴void学习感悟

前言 算法设计与分析&#xff0c;仅就课程而言&#xff0c;似乎是数据结构与算法分析的延续 教材使用&#xff1a; 课程 关于课程&#xff0c;橙学长讲的非常清晰&#xff0c;我深以为然。 HNUCS-大三课程概览-CSDN博客文章浏览阅读1.3k次&#xff0c;点赞5次&#xff0c;收…

开发Chrome扩展插件

1.首先开发谷歌chrome扩展插件&#xff0c;没有严格的项目结构目录&#xff0c;但是需要保证里面有一个mainfest.json文件 (必不可少的文件)。在这个文件里有三个属性必不可少&#xff1a;name、version、mainfest_version&#xff1b; // 清单文件的版本&#xff0c;这个必须写…

Linux学习之线程

目录 线程概念 1.什么是线程&#xff1f; 2.线程的优缺点 3.线程异常 4.线程用途 线程操作 1.如何给线程传参 2.线程终止 3.获取返回值 4.分离状态 5.退出线程 线程的用户级地址空间&#xff1a; 线程的局部存储 线程的同步与互斥 互斥量mutex 数据不一致的主要过…

Cluade3干货:超越GPT,模型特点分析+使用教程|2024年3月更新

就在刚刚&#xff0c;Claude 发布了最新的大模型 Claude3&#xff0c;并且一次性发布了三个模型&#xff0c;分别是 Claude 3 Haiku&#xff1a;&#xff08;日本俳句 &#xff09;Claude 3 Sonnet&#xff08;英文十四行诗&#xff09;Claude 3 Opus&#xff08;古典乐作品集…

静态时序分析:SDC约束命令set_case_analysis详解

相关阅读 静态时序分析https://blog.csdn.net/weixin_45791458/category_12567571.html?spm1001.2014.3001.5482 目录 指定值 指定端口/引脚列表 简单使用 set_case_analysis命令用于对电路进行特定模式的设定&#xff0c;例如对于一个工作在正常模式下的芯片&#xff0c;…

基于机器学习的曲面拟合方法

随着科技的不断发展&#xff0c;机器学习成为了最近最热门的技术之一&#xff0c;也被广泛应用于各个领域。其中&#xff0c;基于机器学习的曲面拟合方法也备受研究者们的关注。曲面拟合是三维模型处理中的重要技术&#xff0c;其目的是用一组数据点拟合出平滑的曲面&#xff0…

Python数据处理实战(4)-上万行log数据提取并作图进阶版

系列文章&#xff1a; 0、基本常用功能及其操作 1&#xff0c;20G文件&#xff0c;分类&#xff0c;放入不同文件&#xff0c;每个单独处理 2&#xff0c;数据的归类并处理 3&#xff0c;txt文件指定的数据处理并可视化作图 4&#xff0c;上万行log数据提取并作图进阶版&a…

STM32(16)使用串口向电脑发送数据

发送字节 发送数组 发送字符和字符串 字符&#xff1a; 字符串&#xff1a; 字符串在电脑中以字符数组的形式存储

访问修饰符、Object(方法,使用、equals)、查看equals底层、final--学习JavaEE的day15

day15 一、访问修饰符 含义&#xff1a; 修饰类、方法、属性&#xff0c;定义使用的范围 理解&#xff1a;给类、方法、属性定义访问权限的关键字 注意&#xff1a; ​ 1.修饰类只能使用public和默认的访问权限 ​ 2.修饰方法和属性可以使用所有的访问权限 访问修饰符本类本包…

干货 | MSC细胞培养 “秘籍”

MSC培养细节&#xff0c;这里有您想知道的~ MSC&#xff1a;间充质干细胞&#xff0c;是一群贴壁生长、形态类似于成纤维细胞的多能成体干细胞&#xff0c;存在于脐带、骨髓和脂肪组织等多种组织中&#xff0c;并且可以分化成多种不同的组 实验数据分享 1、样本&#xff1a;冻…

【比较mybatis、lazy、sqltoy、mybatis-flex、easy-query操作数据】操作批量新增、分页查询(三)

orm框架使用性能比较 比较mybatis、lazy、sqltoy、mybatis-flex、easy-query操作数据 环境&#xff1a; idea jdk17 spring boot 3.0.7 mysql 8.0测试条件常规对象 orm 框架是否支持xml是否支持 Lambda对比版本mybatis☑️☑️3.5.4sqltoy☑️☑️5.2.98lazy✖️☑️1.2.4…

JavaScript极速入门(2)

JQuery W3C标准给我们提供了一系列函数,让我们可以操作: 网页内容 网页结构 网页样式 但是原生的JavaScript提供的API操作DOM元素时,代码比较繁琐,冗长.我们学习使用JQuery来操作页面对象. JQuery是一个快速,简洁且功能丰富的JavaScript框架,于2006年发布.它封装JavaScript常…

乐优商城(八)商品详情

1. 搭建商品详情微服务 当用户搜索到商品后&#xff0c;如果想要了解商品的更多信息&#xff0c;就需要进入商品详情页。 由于商品详情浏览量比较大&#xff0c;所以我们会创建一个微服务&#xff0c;用来展示商品详情。我们的商品详情页会采用 Thymeleaf 模板引擎渲染后&…

【三维重建】相移法+格雷码

本篇文章介绍一种稠密点云的获取方式——条纹结构光三维重建算法。 在学习此算法前&#xff0c;我们需要对基于视觉的三维重建算法有一定了解。 需要了解什么是相机模型、相机标定以及三角化的相关知识。 【三维重建】摄像机几何-CSDN博客 【三维重建】摄像机标定&#xff…