下面介绍下 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 检测手机在口袋里面

更多相关文章

  1. Android加速度传感器
  2. Android传感器介绍
  3. Android传感器(第一篇)
  4. 《Android传感器高级编程》
  5. android 传感器
  6. Android传感器开发
  7. Android下调用传感器
  8. Android硬件之传感器
  9. Android Sensor传感器系统架构初探

随机推荐

  1. AndroidStudio中AVD虚拟机设备空间不足调
  2. Android布局文件
  3. Android自定义View 一
  4. PHP新手入门1——表单
  5. 在Ubuntu上为Android增加硬件抽象层(HAL)模
  6. Android(安卓)UI系列-----LinearLayout的
  7. android 控制POS机图文打印(二)
  8. Android开发笔记(八十五)手机数据库Realm
  9. Android开发学习笔记(十)实现一个简易的开
  10. Android使用Intent启动其他非系统应用程