安卓中的“重力”和“加速度”传感器有什么区别?

22
Android中重力传感器和加速度传感器有什么区别?在我看来,两种情况下物理值是相同的。哪一个测量设备内单位质量所受的力?补充:问题是:这些传感器测量的是什么物理量?根据等效原理,加速度和重力是无法区分的,唯一的测量方法是使用通常的(但是三维的)弹簧秤。
2个回答

12

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

另一种方法是使用Sensor.TYPE_LINEAR_ACCELERATION,该方法正好给出了(加速度-重力)的值,但您需要检查设备是否支持此方法。我发现一些设备只有ACCELERATION传感器工作正常,而GRAVITY或LINEAR_ACCELERATION传感器没有响应。


2
很有可能,因为GRAVITY从API版本9开始可用,而且我认为当我升级手机时没有进行任何硬件更改 =) - lenik
自API 9以来,也提供了LINEAR_ACCELERATION:该字段需要API级别9(当前最低级别为8):android.hardware.Sensor#TYPE_LINEAR_ACCELERATION。 - fersarr
似乎使用过滤器会产生很多潜在的错误,特别是如果我想尝试双重积分加速度以生成位置。在我的情况下,静止时,我的计算声称我的设备在仅几分钟后就以超光速行驶! - Michael
2
不错的回答。顺便提一下,TYPE_LINEAR_ACCELERATION和TYPE_GRAVITY是通过使用卡尔曼滤波器从加速度计、磁力计和陀螺仪数据计算得出的,请参见源代码https://github.com/android/platform_frameworks_base/tree/ics-mr1/services/sensorservice。 - dcoz
@lenik,你的意思是getDefaultSensor返回了一个非空的传感器用于TYPE_GRAVITY,并且registerListener返回了true,但是onSensorChanged从未被调用? - Sam
显示剩余3条评论

3

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

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

“列表包括物理传感器和从物理传感器派生的传感器类型,有时称为虚拟传感器...虚拟传感器类型(重力、线性加速度和旋转向量)提供通过智能地组合物理传感器结果导出的数值...旋转向量是由加速度计、磁力计和有时的陀螺仪组合而成,以确定 Android 设备相对于地球坐标系沿着哪个三维角度摆放。通过了解设备的旋转向量,可以将加速度计数据分离为重力和线性加速度。”

这个链接https://dev59.com/Hl3Ua4cB1Zd3GeqP8gfw#8238389 还说,重力值是使用 Butterworth 滤波器计算出来的。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接