本節介紹傳感器軸、基礎傳感器和復合傳感器(活動、姿態、未校準和交互)。
傳感器軸
來自許多傳感器的傳感器事件值在相對於設備是靜態的特定幀中表示。
移動設備軸
傳感器 API 僅與屏幕的自然方向相關(當設備的屏幕方向發生變化時,軸不會交換。
![移動設備傳感器 API 坐標系](https://developer.android.google.cn/images/axis_device.png?authuser=19&hl=zh-tw)
圖 1. Sensor API 使用的坐標系(相對於移動設備)
汽車軸
在 Android Automotive 實現中,軸是相對於車身框架定義的。車輛參考系的原點是後軸的中心。車輛參考系的方向是這樣的:
- X 軸指向右側,位於與車輛對稱平面垂直的水平面上。
- Y 軸指向前方並且在水平面上。
![汽車設備傳感器API坐標系](https://source.android.google.cn/static/devices/sensors/images/axis_auto.png?authuser=19&hl=zh-tw)
圖 2. Sensor API 使用的坐標系(相對於汽車設備)
車輛參考係是右手坐標系。因此,Z 軸指向上方。
參考系的 Z 軸與重力對齊,這意味著 X 軸和 Y 軸都是水平的。因此,Y 軸可能並不總是通過前軸。
基礎傳感器
基本傳感器類型以其代表的物理傳感器命名。這些傳感器中繼來自單個物理傳感器的數據(與從其他傳感器生成數據的複合傳感器相反)。基本傳感器類型的示例包括:
-
SENSOR_TYPE_ACCELEROMETER
-
SENSOR_TYPE_GYROSCOPE
-
SENSOR_TYPE_MAGNETOMETER
但是,基本傳感器不等於也不應與其底層物理傳感器混淆。來自基礎傳感器的數據不是物理傳感器的原始輸出,因為應用了校正(例如偏置補償和溫度補償)。
例如,在以下用例中,基本傳感器的特性可能與其底層物理傳感器的特性不同:
- 陀螺儀芯片額定偏置範圍為 1 度/秒。
- 經過工廠校準、溫度補償和偏置補償後,Android 傳感器的實際偏置會降低,可能會達到偏置保證低於 0.01 度/秒的程度。
- 在這種情況下,我們說 Android 傳感器的偏差低於 0.01 度/秒,儘管底層傳感器的數據表說 1 度/秒。
- 功耗為 100 uW 的氣壓計。
- 由於生成的數據需要從芯片傳輸到 SoC,因此從氣壓計 Android 傳感器收集數據的實際功耗可能要高得多,例如 1000 uW。
- 在這種情況下,我們說 Android 傳感器的功耗為 1000 uW,即使在氣壓計芯片引線處測量的功耗為 100 uW。
- 校準時消耗100uW的磁力計,但校準時消耗更多。
- 它的校準程序可能需要激活陀螺儀,消耗 5000 uW,並運行一些算法,再消耗 900 uW。
- 在這種情況下,我們說(磁力計)Android 傳感器的最大功耗為 6000 uW。
- 在這種情況下,平均功耗是更有用的度量,它是通過 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.bpm
或heart_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)
返回非喚醒傳感器
線性加速度傳感器報告傳感器框架中設備的線性加速度,不包括重力。
輸出在概念上是:加速度計的輸出減去重力傳感器的輸出。在sensors_event_t.acceleration
的 x、y 和 z 字段中以 m/s^2 報告。
當設備靜止時,所有軸上的讀數應接近 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)
返回非喚醒傳感器
重力傳感器報告設備坐標中重力的方向和大小。
在sensors_event_t.acceleration
的 x、y 和 z 字段中以 m/s^2 報告重力矢量分量。
當設備處於靜止狀態時,重力傳感器的輸出應與加速度計的輸出相同。在地球上,震級約為 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 軸移動時為正值。
請注意,由於歷史原因,滾動角在順時針方向上為正。 (從數學上講,逆時針方向應該是正數):
![相對於設備的方向描述](https://source.android.google.cn/static/devices/sensors/images/axis_positive_roll.png?authuser=19&hl=zh-tw)
圖 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_bias
、 y_bias
和z_bias
值預計會在偏差估計值發生變化時立即跳躍,並且它們應該在其餘時間保持穩定。
有關使用的坐標系的詳細信息,請參見陀螺儀傳感器的定義。
必須對測量應用工廠校準和溫度補償。此外,必須實施陀螺儀漂移估計,以便可以在x_bias
、 y_bias
和z_bias
中報告合理的估計。如果實施無法估計漂移,則不得實施此傳感器。
如果存在此傳感器,則相應的陀螺儀傳感器也必須存在,並且兩個傳感器必須共享相同的sensor_t.name
和sensor_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_bias
、 y_bias
和z_bias
值預計會在硬鐵估計值發生變化時立即跳躍,並且它們應該在其餘時間保持穩定。
測量時必須應用軟鐵校準和溫度補償。此外,必須實施硬鐵估計,以便可以在x_bias
、 y_bias
和z_bias
中報告合理的估計。如果實施無法估計偏差,則不得實施此傳感器。
如果存在此傳感器,則必須存在相應的磁場傳感器,並且兩個傳感器必須共享相同的sensor_t.name
和sensor_t.vendor
值。
鉸鏈角度
報告模式:變化
getDefaultSensor(SENSOR_TYPE_HINGE_ANGLE)
返回喚醒傳感器
鉸鏈角度傳感器測量設備兩個組成部分之間的角度(以度為單位)。通過這種傳感器類型測量的鉸鏈的移動預計會改變用戶與設備交互的方式,例如,通過展開或顯示顯示器。
交互複合傳感器
一些傳感器主要用於檢測與用戶的交互。我們沒有定義這些傳感器必須如何實現,但它們必須是低功耗的,並且設備製造商有責任在用戶體驗方面驗證其質量。
起床手勢
Underlying physical sensors: Undefined (anything low power)
Reporting-mode: One-shot
Low-power
Implement only the wake-up version of this sensor.
getDefaultSensor(SENSOR_TYPE_WAKE_GESTURE)
returns a wake-up sensor
A wake up gesture sensor enables waking up the device based on a device specific motion. When this sensor triggers, the device behaves as if the power button was pressed, turning the screen on. This behavior (turning on the screen when this sensor triggers) might be deactivated by the user in the device settings. Changes in settings don't impact the behavior of the sensor: only whether the framework turns the screen on when it triggers. The actual gesture to be detected isn't specified, and can be chosen by the manufacturer of the device.
This sensor must be low power, as it's likely to be activated 24/7.
Each sensor event reports 1
in sensors_event_t.data[0]
.
Pick up gesture
Underlying physical sensors: Undefined (anything low power)
Reporting-mode: One-shot
Low-power
Implement only the wake-up version of this sensor.
getDefaultSensor(SENSOR_TYPE_PICK_UP_GESTURE)
returns a wake-up sensor
A pick-up gesture sensor triggers when the device is picked up regardless of wherever it was before (desk, pocket, bag).
Each sensor event reports 1
in sensors_event_t.data[0]
.
Glance gesture
Underlying physical sensors: Undefined (anything low power)
Reporting-mode: One-shot
Low-power
Implement only the wake-up version of this sensor.
getDefaultSensor(SENSOR_TYPE_GLANCE_GESTURE)
returns a wake-up sensor
A glance gesture sensor enables briefly turning the screen on to enable the user to glance content on screen based on a specific motion. When this sensor triggers, the device will turn the screen on momentarily to allow the user to glance notifications or other content while the device remains locked in a non-interactive state (dozing), then the screen will turn off again. This behavior (briefly turning on the screen when this sensor triggers) might be deactivated by the user in the device settings. Changes in settings do not impact the behavior of the sensor: only whether the framework briefly turns the screen on when it triggers. The actual gesture to be detected isn't specified, and can be chosen by the manufacturer of the device.
This sensor must be low power, as it's likely to be activated 24/7. Each sensor event reports 1
in sensors_event_t.data[0]
.