0

我在我的简单演示 PhoneGap Buld 应用程序中使用了此答案中的信息和代码(将代码重写为 Javascript),以 1 秒的频率将重力( G)重新计算为实际加速度( )。m/s2

这是实际代码(重要部分):

function onAccelerationSuccess(acceleration)
{
    var g = 9.80665;

    acceleration.x = (acceleration.x * g).toFixed(2) + ' m/s\u00b2';
    acceleration.y = (acceleration.y * g).toFixed(2) + ' m/s\u00b2';
    acceleration.z = ((acceleration.z + 1) * g).toFixed(2) + ' m/s\u00b2';
    ...
}

watchID = navigator.accelerometer.watchAcceleration(onAccelerationSuccess, onAccelerationError, {frequency: 1000});

提到的答案和许多许多消息来源声称,当我的手机正面朝上放在桌子上时,我应该分别获得、和轴的(0, 0, -1)G值。假设地球的自然加速度(我对吗?xyzg = 9.80665(0, 0, 9.81)

但是,实际上我看到的是,我的真正价值观是:

  • X 轴:-1.87, -1.50, -2.25,
  • Y 轴:2.26, 1.88, 1.51, 0.76,
  • Z 轴:101.87, 101.49, 102.25, 102.62, 103.37.

这些值是不断变化的,但仅在提到的这些值之间,并且并非每个轴每秒都会更改值。有时,某个轴的值会保持 2-3 秒。

怎么了?如果电话静止在我的桌子上,它如何改变它的加速度?没有向任何方向移动的任何设备如何具有像 100 m/s2 这样的巨大加速度?

我听说板载移动设备上的加速器更像是玩具,而不是真正的测量设备,而且它们会对返回值产生大量噪音或抖动。但是,看在上帝的份上,这完全是垃圾,完全没有使用这个功能。

我在使用 Android 4.2.2 的 Google Nexus(第一版)手机上测试了这段代码。带有 Phonegap 2.9.0 的应用程序。

编辑:我已经用 Ripple Emulator 测试了我的移动应用程序,我得到了完全有效的值:

Acceleration in the X axis is 0.00 m/s².
Acceleration in the Y axis is 0.00 m/s².
Acceleration in the Z axis is 9.81 m/s².

我的 Nexus 上的加速度计/指南针/陀螺仪有问题吗?

4

1 回答 1

0

没有错误。当我处理加速度计时,我已经阅读了许多关于 ObjectiveC 中 iOS 原生编程的 SO 问题。我错过了PhoneGap API 文档,它说,传递的值已经重新计算:

加速度值包括重力影响 (9.81 m/s^2)。

删除双重重力计算后,一切似乎都很好。

当电话放在我的桌子上时,我赌轴和周围的值 +/- 0.3m/s2 -轴的m/s2 。但我认为,这些是变化和提到的噪音,来自移动设备中使用的相当便宜的加速度计芯片。xy10.310.4z

于 2013-07-19T08:14:04.020 回答