【问题标题】:PhoneGap / Android accelerometer showing strange valuesPhoneGap / Android加速度计显示奇怪的值
【发布时间】:2013-07-16 13:15:30
【问题描述】:

我在我的简单演示 PhoneGap Buld 应用程序中使用了来自 this answer(将代码重写为 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});

提到的答案和许多很多消息来源声称,当我的手机正面朝上放在桌子上时,我应该分别得到 xyz 轴的 (0, 0, -1) G 值。假设地球的自然加速度(g = 9.80665),我应该看到(0, 0, 9.81) m/s2 的实际加速度值,这些值不应该改变(因为手机静止不动)。我说的对吗?

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

  • X轴:-1.87-1.50-2.25
  • Y轴:2.261.881.510.76
  • Z轴:101.87101.49102.25102.62103.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 上的加速度计/指南针/陀螺仪有问题吗?

【问题讨论】:

    标签: android cordova accelerometer phonegap-build


    【解决方案1】:

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

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

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

    我在xy 轴和10.3-10.4 m/s2 附近为z 轴下注值+/-@m/s2,当手机放在我的桌子。但我认为,这些是变化和提到的噪音,来自移动设备中使用的相当便宜的加速度计芯片。

    【讨论】:

      猜你喜欢
      • 2017-07-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多