本節介紹感測器軸、基礎感測器和複合感測器(活動、姿態、未校準和互動)。
感測器軸
來自許多感測器的感測器事件值以相對於設備靜態的特定幀表示。
行動裝置軸
感測器 API 僅與螢幕的自然方向相關(當裝置的螢幕方向變更時,軸不會交換。
汽車軸
在 Android Automotive 實作中,軸是相對於車身框架定義的。車輛參考系的原點是後軸的中心。車輛參考系的定向使得:
- X 軸指向右側且位於水平面上,垂直於車輛對稱面。
- Y 軸指向前方且位於水平面上。
車輛參考係是右手座標系。因此,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,儘管氣壓計晶片引線處測得的功耗為 100uW。
- 磁力計在校準時消耗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_*
常數。
環境溫度
報告模式: On-change
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_*
常數。
陀螺儀無法基於磁力計和加速度計進行仿真,因為這會導致其局部一致性和反應能力降低。它必須基於普通的陀螺儀晶片。
心率
報告模式: On-change
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
。
光
報告模式: On-change
getDefaultSensor(SENSOR_TYPE_LIGHT)
傳回一個非喚醒感應器
光感測器報告當前照度(以 SI 勒克斯為單位)。
測量結果報告在sensors_event_t.light
中。
接近
報告模式: On-change
通常定義為喚醒感測器
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)。
讀數使用校準
- 溫度補償
- 工廠偏置校準
- 工廠規模校準
氣壓計通常用於估計海拔變化。要估計絕對海拔,必須使用海平面氣壓(隨天氣而變化)作為參考。
相對濕度
報告模式: On-change
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
。
計步器
底層實體感測器:加速度計(+可能還有其他感測器,只要耗電量低)
報告模式: On-change
低電量
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
:roll,繞Y軸旋轉(-90<=roll<=90
),當X軸向Z軸移動時為正值。
請注意,由於歷史原因,順時針方向滾動角為正。 (從數學上講,逆時針方向應該為正):
此定義與航空中使用的偏航、俯仰和滾轉不同,其中 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
值。
鉸鏈角度
報告模式: On-change
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)
傳回喚醒感應器
一眼手勢感應器可以簡要地打開螢幕,使用戶可以根據特定的運動在螢幕上瀏覽內容。當此感應器觸發時,裝置將暫時開啟螢幕,以便使用者在裝置保持在非互動狀態(打zing)時瀏覽通知或其他內容,然後螢幕將再次關閉。使用者可能會在裝置設定中停用此行為(在此感應器觸發器觸發器時短暫開啟畫面)。設定的變更不會影響感測器的行為:僅框架是否在觸發框架時簡要開啟螢幕。未指定要偵測到的實際手勢,可以由設備的製造商選擇。
此感測器必須具有低功率,因為它可能會24/7啟動。每個感測器事件在sensors_event_t.data[0]
中報告1
。
有限的軸IMU感測器
有限的軸IMU感測器可從Android 13中獲得,它是支援用例的感測器,在這些情況下,並非所有三個軸(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的感覺v劑值 | 範例Sensor_type_accelerometer sensorevent | 複合感測器_TYPE_ACCELERMONE_LIMITED_AXESSENSOREVENT |
---|---|---|
值[0] | -0.065 | -0.065 |
值[1] | 0.078 | 0.078 |
值[2] | 9.808 | 9.808 |
值[3] | 不適用 | 1.0 |
值[4] | 不適用 | 1.0 |
值[5] | 不適用 | 1.0 |
汽車感測器
支援汽車用例的傳感器。
標題
基礎物理感測器:GPS,磁力計,加速度計和陀螺儀的任何組合。
報告模式:連續
getDefaultSensor(SENSOR_TYPE_HEADING)
傳回一個非醒目感測器
可從Android 13取得,標題感測器可測量該設備指向相對於True North的方向。標題感測器包括兩個SensorEvent
值。一個用於測量的設備標題,另一個用於提供的標題值的準確性。
此感測器報告的標題值必須在0.0
(包含)和360.0
(獨家)之間,其中0
指示北, 90
East, 180
South和270
West。
此感測器的精度定義為68%的置信度。在基礎分佈是高斯正常的情況下,精度是一個標準差。例如,如果標題感測器傳回60度的標題值和10度的準確度值,則真正標題為50度至70度的機率68%。