Android中的“重力”和“加速度”传感器有啥区别?

Posted

技术标签:

【中文标题】Android中的“重力”和“加速度”传感器有啥区别?【英文标题】:What is the difference between "gravity" and "acceleration" sensors in Android?Android中的“重力”和“加速度”传感器有什么区别? 【发布时间】:2012-05-13 20:48:39 【问题描述】:

android 中的重力传感器和加速度传感器有什么区别?从我的角度来看,两种情况下的物理价值是相同的。

哪一项测量作用在设备内部单位质量上的力?

添加

问题是:这些传感器测量的是什么物理量?根据equivalence principle 的说法,加速度和重力是无法区分的,测量两者的唯一方法是使用通常(但 3d)的弹簧平衡。

【问题讨论】:

【参考方案1】:

加速度传感器会返回施加在设备上的所有力的总和,而重力传感器仅返回重力的影响。如果您想从加速度中排除重力,您可以使用高通滤波器或只是从加速度传感器值中减去重力传感器值 - 不确定哪种方法可以提供更好的精度。

另一种方法可能是使用 Sensor.TYPE_LINEAR_ACCELERATION,它准确地给出(加速度 - 重力),但是您应该检查它是否在设备上可用。我发现了一些设备,它们的 ACCELERATION 传感器工作,但 GRAVITY 或 LINEAR_ACCELERATION 传感器没有响应。

【讨论】:

所以你的意思是重力传感器只是通过低通滤波器的加速度传感器? 很可能,因为 GRAVITY 从 API 版本 9 开始可用,而且我认为我的手机在升级后没有任何硬件变化 =) 好吧,我刚刚测试过,我的旧手机没有返回任何 GRAVITY 更新,尽管它运行代码没有任何抱怨。也许 GRAVITY 是一个单独的传感器,但如果您打算支持 Android 2.1,那么 ACCELERATION 传感器上的高通滤波器可能是您最好的选择。 顺便说一句,你为什么不使用 Sensor.TYPE_LINEAR_ACCELERATION 呢?它给出了准确的(加速度 - 重力),一定很容易使用。 不错的答案。仅供参考,TYPE_LINEAR_ACCELERATION 和 TYPE_GRAVITY 是使用卡尔曼滤波器从加速度计、磁力计和陀螺仪数据计算得出的,请参阅源代码 github.com/android/platform_frameworks_base/tree/ics-mr1/…【参考方案2】:

此链接可能会有所帮助:http://www.sensorplatforms.com/which-sensors-in-android-gets-direct-input-what-are-virtual-sensors

以下摘录总结了您问题的答案:

“列表...包括物理传感器和具有从物理传感器派生的值的传感器类型,有时这些被称为虚拟传感器...虚拟传感器类型(重力、线性加速度和旋转矢量)提供通过以下方式派生的值智能地结合来自物理传感器的结果......旋转矢量是加速度计、磁力计,有时还包括陀螺仪的组合,用于确定 Android 设备相对于地球框架坐标的三维角度。设备的旋转矢量,加速度计数据可以分为重力和线加速度。"

这个链接https://***.com/a/8238389/604964 还说重力值是使用巴特沃斯滤波器计算的。

【讨论】:

以上是关于Android中的“重力”和“加速度”传感器有啥区别?的主要内容,如果未能解决你的问题,请参考以下文章

android开发笔记之高级主题—传感器的简单介绍

资产监测设备中三轴重力加速度解析

如何在android的驱动程序中对加速度传感器的数据进行方向和坐标的转

如何用陀螺仪测加速度

关于安卓手机三轴加速度传感器的一些问题。

加速度传感器是怎么检测震动的