资讯详情

Android动态传感器的介绍及其应用

Android 内置传感器用于测量运动、屏幕方向和各种环境条件。这些传感器可以提供高度准确的原始数据来监测设备的三维移动或定位,或者监测设备周围环境的变化。比如 游戏使用重力传感器推断出倾斜、摇晃、旋转或挥动等复杂的用户手势和动作;温度传感器和湿度传感器报告温度传感器和湿度传感器;旅游应用程序可以使用地磁场传感器和加速度计来报告指南针的方向。总结来讲,Android平台支持三类传感器:

  • 动态传感器

这种传感器测量三个轴向上的加速力和旋转力。该类别包括加速度计、重力传感器、陀螺仪和旋转矢量传感器。

这种传感器测量各种环境参数,如环境温度、压力、照明和湿度。该类别包括气压计、光度计和温度计

这类传感器测量设备的物理位置。这个类别中包含屏幕方向传感器和磁力计。

Android 平台支持的常见传感器类型说明如下表所示:

对于大多数传感器,当设备处于默认屏幕方向时,坐标系将与设备屏幕相比定义(见图 1)。X 轴向向右水平延伸,Y 轴垂直向上延伸,Z 轴垂直于屏幕向外延伸。在这个坐标系中,屏幕后面的坐标将是负的 Z 值。此坐标系用于以下传感器:

  • 加速传感器

  • 重力传感器

  • 陀螺仪

  • 线性加速度传感器

  • 地磁场传感器

本文重点介绍动态传感器。Android 该平台提供了各种监控设备的运动,如基于硬件的加速度计传感器、陀螺仪传感器和基于软件集成的重力传感器、线性加速度传感器和旋转矢量传感器。

运动传感器对监控设备运动(如倾斜、摇晃、旋转或摆动)非常有用。移动通常是用户直接输入的反映(例如,用户在游戏中驾驶汽车或控制球),但也可能反映设备的物理环境(例如,在驾驶时与人一起移动)。在第一种情况下,监控是相对于设备参考系或应用参考系的运动;在第二种情况下,监控是相对于世界参考系的运动。运动传感器本身通常不用于监控设备的位置,但可以与其他传感器(如地磁场传感器)一起使用,以确定设备相对于世界参考系统的位置。

将加速度传感器测量到设备的加速度,包括重力,单位为米/秒2。以下代码显示了如何获得默认加速传感器的例子:

在概念上,通过使用以下关系来测量加速度传感器对传感器本身的力 (Fs) 确定施加到设备的加速度 (Ad):

然而,重力总是叠加在加速度计的输出上:

因此,当设备位于桌子上(不加速)时,加速度计的读数为 g = 9.81 m/s2。同样,当设备自由落体时 9.81 m/s2当加速度快速加速到地面时,加速度计的读数为 g = 0 m/s2。因此,为了测量设备的实际加速度,重力必须从加速度计数据中去除。这可以通过使用高通滤波器来实现。相反,您可以使用低通滤波器来隔离重力。以下示例显示了如何执行此操作:

简单的过滤器常数用于上述代码示例 (alpha) 创建低通滤波器。这个过滤器的常数来自一个时间常数 (t),常数大致表示过滤器添加到传感器事件的延迟时间和传感器事件的传输率 (dt)。使用代码示例 0.8 的 alpha 演示值。如果您使用这种过滤方法,您可能需要选择其他方法 alpha 值。但一般来说,低通滤波器会导致数据滞后,影响实时响应场景(如旋转屏幕应用)。通常,过滤重力的方法是使用陀螺仪进行集成kalman 本文不展开滤波。

围绕设备测量陀螺仪 x、y 和 z 轴的旋转速率(弧度/秒)。以下代码展示如何获取默认陀螺仪的实例:

如果陀螺仪的方法符合右手法则,如果观察者从 x、y 或 z 当设备看起来逆时针旋转时,观察者将报告轴上的正旋转位置。

标准陀螺仪可提供原始旋转数据,而无需对噪声和漂移(偏差)进行任何过滤或校正。事实上,陀螺仪的噪声和漂移会导致需要补偿的误差。通常,漂移(偏差)和噪声可以通过监测其他传感器(如重力传感器或加速度计)来确定。在实际工程中,设备出厂后,陀螺仪也会动态校准。常用的方法是用加速度计检测设备是否静止。如果静止,陀螺仪的零漂将被扣除。但这种校准方法有不及时的局限性,可以尝试用加速度计融合姿态,运动时零漂计算。

陀螺仪的输出可随时间积分计算设备角度随时间变化的旋转矢量,如:

重力传感器通常是软件集成的sensor。提供指示重力方向和尺寸的三维矢量。该传感器通常用于确定空间中设备的相对屏幕方向。以下代码显示了如何获得默认重力传感器的例子:

用于加速度传感器的单位和单位 (m/s2) 坐标系与加速传感器使用的坐标系相同。当设备处于静,重力传感器的输出应与加速度计相同。

线性加速度计通常是软件集成的sensor。线性加速传感器提供了一个三维矢量,表示沿各设备轴的加速度(不包括重力)。以下代码显示了如何获得默认线性加速传感器的例子:

从概念上讲,该传感器满足以下关系:

linear acceleration = acceleration - acceleration due to gravity

这种传感器通常用于在不受重力影响的情况下获取加速数据。例如,该传感器可用于检查汽车的行驶速度、手势检测和惯性导航系统。

线性加速度传感器总是有偏移,需要删除。最简单的方法是在应用程序中构建校准步骤。在校准过程中,用户可以将设备放在桌子上,然后读取所有三个轴的偏移。然后,您可以从加速传感器的直接读数中减去偏移,以获得实际的线性加速度。

传感器的坐标系与加速度传感器的坐标系相同 (m/s2) 也相同。

旋转矢量将设备的屏幕方向表示为角度和轴的组合,其中设备围绕轴(x、y 或 z)旋转了 θ 度。该传感器输出的结果是一个单位四元数,也叫做旋转矢量。即 Q = [cos(θ/2), x*sin(θ/2), y*sin(θ/2), z*sin(θ/2)]。没有单位旋转矢量元素。x、y 和 z 轴的定义方法与加速传感器相同。该坐标系具有以下特点:

  • X 定义为矢量积 Y x Z。当前设备位置与地面相切,大约向东。

  • <>Y 在设备当前位置与地面相切,并指向地磁北极。

  • Z 指向天空并与地平面垂直。

以下代码展示如何获取默认旋转矢量传感器的实例:

旋转矢量传感器和重力传感器是运动检测和监控的最常用传感器。旋转矢量传感器极具通用性,可用于各种与运动有关的任务,例如检测手势,监控角度变化,以及监控相对屏幕方向变化。例如,旋转矢量传感器是开发游戏、增强现实应用(AR)、二维或三维指南针,或者相机稳定应用的理想选择。在大多数情况下,使用这些传感器比使用加速度计和地磁场传感器或方向传感器更好。

Linux 内核黑科技 | 技术文章 | 精选教程

标签: android设备传感器相关

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台