я использовал информацию и код из this answer (переписывания кода Javascript) в моей простой демо PhoneGap Buld приложения, пересчитывать вес (G
) для реального ускорения (m/s2
) с 1 второй частоте.PhoneGap/Android акселерометр показывает странные значения
Это фактический код (важная часть):
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)
м/с2, и эти значения не должны меняться (по мере того, как телефон неподвижен). Я прав?
Однако, на самом деле я вижу, что мои реальные значения:
- 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 м/с2?
Я слышал, что ускорители на борту мобильных устройств больше похожи на игрушку, чем на реальное измерительное устройство, и что они производят много шума или дрожания до возвращаемых значений. Но, ради Бога, это полный мусор, который использует эту функцию совершенно бессмысленно.
Я протестировал этот код на телефоне Google Nexus (первый выпуск), с Android 4.2.2. Приложение с Phonegap 2.9.0.
EDIT: Я проверил мое мобильное приложение с 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?