2013-07-16 2 views
0

я использовал информацию и код из 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?

ответ

0

Исправлена ​​ошибка. Я прочитал много вопросов о программировании iOS в ObjectiveC, когда я занимался акселерометром. И я пропустил PhoneGap API documentation, который говорит, что значения, передаваемые уже пересчитаны:

значение ускорение включает влияние силы тяжести (9,81 м/с^2).

После устранения расчета двойной гравитации все кажется прекрасным.

Я ставлю значение +/- 0.3 м/с2 для x и y оси и вокруг 10.3 - 10.4 м/с2 для z оси, когда телефон лежит на моем столе. Но я предполагаю, что это вариации и упомянутый шум, который исходит из довольно дешевого чипа акселерометра, используемого в мобильных устройствах.

Смежные вопросы