Android sensor 學習--sensor介紹

下面介紹下 Android 中包含的 sensor 及 sensor 的類型含義

Android平臺支持的傳感器類型

TYPE_ACCELEROMETER
TYPE_ACCELEROMETER_UNCALIBRATED
TYPE_AMBIENT_TEMPERATURE
TYPE_DEVICE_PRIVATE_BASE
TYPE_GAME_ROTATION_VECTOR
TYPE_GEOMAGNETIC_ROTATION_VECTOR
TYPE_GRAVITY
TYPE_GYROSCOPE
TYPE_GYROSCOPE_UNCALIBRATED
TYPE_HEART_BEAT
TYPE_HEART_RATE
TYPE_LIGHT
TYPE_LINEAR_ACCELERATION
TYPE_LOW_LATENCY_OFFBODY_DETECT
TYPE_MAGNETIC_FIELD
TYPE_MAGNETIC_FIELD_UNCALIBRATED
TYPE_MOTION_DETECT
TYPE_ORIENTATION
TYPE_POSE_6DOF
TYPE_PRESSURE
TYPE_PROXIMITY
TYPE_RELATIVE_HUMIDITY
TYPE_ROTATION_VECTOR
TYPE_SIGNIFICANT_MOTION
TYPE_STATIONARY_DETECT
TYPE_STEP_COUNTER
TYPE_STEP_DETECTOR
TYPE_TEMPERATURE (TYPE_AMBIENT_TEMPERATURE)

下面按照自己理解將sensor分爲三大類進行介紹

手機中常用的傳感器
1.加速度(g-sensor)
TYPE_ACCELEROMETER : 指每個方向(3軸)的加速度值(包括地球重力9.8)
加速度 = 重力 + 線性加速度

2.陀螺儀
TYPE_GYROSCOPE:指每個方向(3軸)的角速度值
Pitch(前後傾斜): 繞y軸轉動的角速度(x軸在轉,前後)
Roll(左右傾斜): 繞x軸轉動的角速度(y軸在轉,左右)
Yaw(左右搖擺):繞z軸轉動的角速度
6軸陀螺儀是指三軸加速器(三軸加速器就是感應XYZ(立體空間三個方向,前後左右上下)軸向上的加速)和三軸陀螺儀合在一起的稱呼

3.計步器
TYPE_STEP_COUNTER:計步器
TYPE_STEP_DETECTOR:行走檢測,走動時值爲1,不走動時值爲0

4.光距離
TYPE_LIGHT:環境光傳感器
TYPE_PROXIMITY:距離傳感器

5.地磁
TYPE_MAGNETIC_FIELD:地磁傳感器
x代表東西方向地磁分量,正負差別;y代表南北方向地磁分量,正負差別;z代表天方向地磁分量,手機面正反

虛擬傳感器
這一類是有根據其他的sensor 數據,根據算法合成的sensor;一般是通過 庫文件提供;如果vendor 商沒有提供,則可以使用google提供的(需要滿足一定條件)

1.重力加速度
TYPE_GRAVITY:指每個方向(3軸)的重力加速度值(9.8)
三個方向重力值,地球上就是9.8 附近變動

2.指南針(方向傳感器)
TYPE_ORIENTATION:指南針(方向傳感器)
azimuth:方位,返回水平時磁北極和Y軸的夾角,範圍爲0°至360°。
0°=北,90°=東,180°=南,270°=西。
pitch:手機x軸和水平面的夾角(繞y軸轉動),範圍爲-180°至180°。
roll:手機y軸和水平面的夾角(繞x軸轉動),由於歷史原因,範圍爲-90°至90°。

3.線性加速度
TYPE_LINEAR_ACCELERATION:指每個方向(3軸)的加速度值(不包含重力加速度)
三個方向純加速度值

4.旋轉矢量(RV-sensor)
TYPE_ROTATION_VECTOR
旋轉矢量傳感器融合了陀螺儀,加速度計和磁力計產生的原始數據,以產生四元數;主要用於 AR等場景中
三軸的分量與對應角度的的計算值
xsin(theta/2)
y
sin(theta/2)
z*sin(theta/2)
sin(theta/2)是RV的數量級

5.遊戲旋轉矢量傳感器
TYPE_GAME_ROTATION_VECTOR
它只融合了加速度計和陀螺儀數據,產生四元數;和上面還是有很大區別;如果沒有濾波算法(如用卡爾曼濾波)等,可能會出現手機靜止出現場景切換
由於沒有地磁,Y軸不指向北,而是指向其他參考。允許該參考值與陀螺儀圍繞Z軸漂移相同的數量級漂移。
由於遊戲旋轉矢量傳感器不使用磁場,因此相對旋轉更準確,而不受磁場變化的影響。如果你不關心北方的位置,那麼在遊戲中使用這個傳感器,由於它依賴於磁場,正常的旋轉矢量並不適合你的需求。

6.地磁旋轉矢量傳感器
TYPE_GEOMAGNETIC_ROTATION_VECTOR
它只融合了加速度計和地磁數據,但它使用磁力,而不是一個陀螺儀的。該傳感器的精度低於正常的旋轉矢量傳感器,但功耗降低;針對MTK平臺和高通平臺不同
v[0]:xsin(theta/2)
v[1]:y
sin(theta/2)
v[2]:z*sin(theta/2)
MTK平臺:v[3]:x軸補償值;v[4]:y軸補償值 (Android 9.0後,之前只有三個值)
高通平臺:v[3]:0-9.8;v[4]:0-3.1415926

7.未校準加速度
TYPE_ACCELEROMETER_UNCALIBRATED
v[0]:x軸加速度(沒有校準補償); v[1]:y軸加速度(沒有校準補償);v[2]:z軸加速度(沒有校準補償);v[3]:x軸校準補償值v[4]:y軸校準補償值;v[5]:z軸校準補償值

8.未校準陀螺儀
TYPE_GYROSCOPE_UNCALIBRATED
v[0]:圍繞X軸的旋轉角速度(沒有漂移補償),v[1]:圍繞Y軸的旋轉角速度(沒有漂移補償),v[2]:圍繞Z軸的旋轉角速度(沒有漂移補償),v[3]:圍繞X軸的漂移估值(不會變化),v[4]:圍繞Y軸的漂移估值(不會變化),v[5]:圍繞Z軸的漂移估值(不會變化)

9.未校準的地磁
TYPE_MAGNETIC_FIELD_UNCALIBRATED
v[0]:代表東西方向地磁分量,正負差別(沒有漂移補償);v[1]:代表南北方向地磁分量,正負差別(沒有漂移補償);v[2]:代表天方向地磁分量,手機面正反(沒有漂移補償);v[3]:圍繞X軸的漂移估值(不會變化);v[4]:圍繞Y軸的漂移估值(不會變化);v[5]:圍繞Z軸的漂移估值(不會變化)

其他的傳感器

TYPE_DEVICE_PRIVATE_BASE:設備私有傳感器(就相當於附加的)
TYPE_HEART_BEAT:檢測心跳
TYPE_HEART_RATE:檢測心率
TYPE_LOW_LATENCY_OFFBODY_DETECT
TYPE_MOTION_DETECT:運動檢測傳感器
TYPE_POSE_6DOF:具有6個自由度的姿勢傳感器

氣壓傳感器(BAROMETER):MTK Android 8.0 在sensors.cpp
TYPE_PRESSURE:檢測周圍空氣氣壓值
單位是hPa(百帕斯卡)

相對溼度傳感器
TYPE_RELATIVE_HUMIDITY
檢測周圍空氣相對溼度
TYPE_SIGNIFICANT_MOTION: 重要運動觸發傳感器
TYPE_STATIONARY_DETECT:靜止狀態傳感器

環境溫度傳感器
TYPE_TEMPERATURE (被TYPE_AMBIENT_TEMPERATURE替代)
檢測周圍環境的溫度

TYPE_PEDOMETER:步程計,主要是記錄走了多遠(meter),當然走多遠一般是根據走的步數*每步的距離;

MTK 中 虛擬陀螺儀:加速度計和磁力計結合的方法來可以模擬出陀螺儀,用加速度和磁力計就已經可以求出手機姿態;但是大部分應用中,求出旋轉姿態是不夠的,我們需要的是穩定並且能夠快速響應的姿態,這個時候陀螺儀就派上用場了

SENSOR_STRING_TYPE_PICK_UP_GESTURE 拾起設備時觸發,無論面前是什麼(桌子、口袋、手提袋)。
SENSOR_STRING_TYPE_GLANCE_GESTURE 支持短暫打開屏幕,以便用戶根據特定動作瀏覽屏幕上的內容。
SENSOR_STRING_TYPE_WAKE_GESTURE 支持根據設備特定的動作喚醒設備。
SENSOR_STRING_TYPE_TILT_DETECTOR 每次檢測到傾斜事件後均生成事件。
STRING_TYPE_IN_POCKET 檢測手機在口袋裏面

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章