Android传感器(sensor)简介
sensor
android的sensor架构如下
系统,有些是hal—>qmi—>ssc,这里不对这部分做说明,关注aosp部分.
背景知识
在进入代码之前,先简单描述一些相关背景知识点
传感器
android传感器框架中包括物理传感器和虚拟传感器两大类
物理传感器
表示物理特性和状态的传感器包括加速度计、陀螺仪、指南针、温度计、气压计、光传感器、心率计等等 虚拟传感器
旋转矢量、重力方向、线性加速度等,这些传感器的数据是依据物理传感器的数据,经过融合算法后计算得出的.(有些计步器是根据加速度计计算获得的,这种计步器也算是虚拟传感器)
这两类传感器单次数据量比较小,目前种类有30多个(sensor.h中查阅),市场中还存在一些其他传感器,如相机中的sensor,指纹传感器,触摸传感器.因其功能复杂且特殊被放在单独模块中处理,并不包含在传感器框架中,物理传感器和虚拟传感器对于应用程序来说,没有什么区别,aosp部分已将这部分做了一致处理..
对于常用的九轴传感器原理,融合算法,对比分析,可以看之前整理的文章9轴传感器
上报方式
不同的传感器的上报方式不同,根据实际情况进行设定,目前支持有四种上报方式
连续模式
传感器持续不断的上报数据,这种上报方式适用于加速度计、陀螺仪这样的传感器,使用它们时,往往需要实时(200hz~1khz)连续的上报. 变化模式
当传感器数据经过一段时间发生变化后,才上报,常见的是心率计和计步器 单次模式
当传感器检测到某种事件时触发,例如红外传感器,在检测到人靠近时,触发上报. 特定上报模式
用于支持特定需求的上报,较少使用.
唤醒传感器和唤醒传感器
所谓的唤醒是指是否能够唤醒soc处理器来处理事件,当soc处于挂起状态时,唤醒传感器可以将soc唤醒处理必要的事件.另外同一个传感器可以同时被定义为唤醒传感器和非唤醒传感器.两者相对独立.
多个应用共同访问同一个传感器
应用a以100hz速率访问传感器x,应用b以200hz速率访问传感器x,最终传感器上报速率以较高的为准,即200hz 多个应用设定了报告延迟时间,又可能会超过所设定的延迟时间 不支持多个应用对同一个传感器设定不同模式(例如:一个设定”高精度”,另一个设定”低功耗”) 应用不能将传感器数据下发(应用只向下发送控制命令,而不下发数据),否则其他应用可能接收到应用下发的错误数据.
融合算法
android平台可以依赖原始的9轴数据(加速度计、陀螺仪、指南针),融合出旋转矢量、重力和线性加速度传感器给应用程序使用,当然如果有能力可以自己实现更好的融合算法.