我在我的简单演示 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值。假设地球的自然加速度(我对吗?x
y
z
g = 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 上的加速度计/指南针/陀螺仪有问题吗?