Intereting Posts
GetOutputMediaFile (int) не определено для типа new Camera.PictureCallback () {} ошибка, запутывающая меня Настройка фонового изображения webview на графический ресурс в Android Android: невозможно загрузить из магазина воспроизведения Ionic Framework: Android-эмулятор не может получить доступ к службам на главной машине Как сделать эффект поворота страницы в Android? Как добавить SearchWidget в ActionBar? Можно ли создавать темы для Android-андроида Несколько соединений Bluetooth Разница между «default gradle wrapper» и «local gradle distribution» в проекте студии Android Как я могу создать тег HTML INPUT, чтобы он поддерживал CSS, когда был сфокусирован на Android 2.2+? Как создать AppBarLayout, который перекрывает содержимое координатораLayout Android: установите альфа на кнопку при нажатии. Предпочтительно только xml Есть простой способ конвертировать приложение Android в IPad, IPhone Android L – нет однорангового сертификата Как получить ссылку attr в коде?

Javascript 'deviceorientation' event – какие датчики он измеряет?

Если у меня есть простая веб-страница и сценарий, который выглядит так:

<body> <div id="alpha">a</div> <div id="beta">b</div> <div id="gamma">g</div> </body> <script> window.addEventListener('deviceorientation', function(event) { var alpha = event.alpha; var beta = event.beta; var gamma = event.gamma; document.getElementById("alpha").innerHTML = alpha; document.getElementById("beta").innerHTML = beta; document.getElementById("gamma").innerHTML = gamma; }, false); </script> 

Я могу открыть его в мобильном Firefox для Android, и он выведет 3 номера, которые выглядят следующим образом:

 89.256125 3.109375 0.28125 

Где, когда я поворачиваю устройство, цифры меняются в зависимости от оси вращения. Я заметил, что значения для «alpha» действительно шумные – они отскакивают без остановок, даже если телефон находится в состоянии покоя на моем столе, в то время как остальные два остаются устойчивыми. Я понимаю, что альфа – это мой заголовок. Мне любопытно, получается ли это получить «альфа» от компаса (который имеет проблемы с шумом), а два других – от гироскопа?

Еще одна проблема – когда я меняю поле, почему-то заголовок тоже меняется, даже если я фактически не изменю заголовок. Мне просто интересно, почему это так и как это можно исправить?

Кроме того, поскольку гироскоп измеряет угловую скорость, я предполагаю, что этот прослушиватель событий интегрирует его автоматически – алгоритм интеграции так же хорош, как любой? Использует ли он акселерометр для коррекции дрейфа?

В этом видеоролике google tech, с 15:00 до 19:00, спикер говорит об исправлении дрейфа, присущего гироскопу, с помощью ускорителя, а также для калибровки ориентации по отношению к гравитации: http://www.youtube .com / watch? V = C7JQ7Rpwn2k Как бы я это сделал?

Спасибо за любые идеи, которые могут быть у каждого.

Solutions Collecting From Web of "Javascript 'deviceorientation' event – какие датчики он измеряет?"

Ориентация устройства достигается путем слияния датчиков. Строго говоря, ни один из датчиков не измеряет его. Ориентация является результатом сглаживания данных акселерометра, гироскопа и магнитометра интеллектуальным способом.

Я заметил, что значения для «alpha» действительно шумные – они отскакивают без остановок, даже если телефон находится в состоянии покоя на моем столе, в то время как остальные два остаются устойчивыми.

Это общая проблема с углами Эйлера , старайтесь избегать их, если сможете.

Кстати, Sensor Fusion на устройствах Android: революция в обработке видео, которую вы связываете, объясняет это в 38:25.

Кроме того, поскольку гироскоп измеряет угловую скорость, я предполагаю, что этот прослушиватель событий интегрирует его автоматически – алгоритм интеграции так же хорош, как любой? Использует ли он акселерометр для коррекции дрейфа?

Да, дрифт гироскопа корректируется с помощью акселерометра (и магнитометра, если есть). Это называется слиянием датчиков.

В этом видеоролике google tech, с 15:00 до 19:00, спикер говорит об исправлении дрейфа, присущего гироскопу, с помощью ускорителя, а также для калибровки ориентации по отношению к гравитации: http://www.youtube .com / watch? V = C7JQ7Rpwn2k Как бы я это сделал?

Если у вас есть ориентация, то кто-то уже сделал все это для вас. Вам не нужно ничего делать.

Все значения ориентации тоже очень шумны для меня. Shakily рука, углы Эйлера, магнитные помехи, ошибка производства, … Кто знает?

Я сделал небольшое экспоненциальное сглаживание . То есть я заменил флуктуирующее событие. Сглаженное значение, которое удобно назвать альфа :

alpha = event.alpha + s *(alpha - event.alpha), with 0 <= s <= 1;

Другими словами, каждый раз, когда принимается новое наблюдение, сглаженное значение обновляется с коррекцией, пропорциональной ошибке.

  • Если s = 0, то сглаженное будет точно наблюдаемым значением, и сглаживание не будет.
  • Если s = 1, альфа остается постоянной, что действительно является слишком эффективным сглаживанием.
  • В противном случае альфа находится где-то между наблюдаемым и сглаженным значением. Фактически, это (взвешенное) среднее значение между последним наблюдением и историей. Отсюда следует изменение значений с некоторым эффектом демпфирования.
  • Если s мало, то процесс близок к последнему наблюдению и быстро адаптируется к последним изменениям (а также к случайным колебаниям). Затухание мало.
  • Если s около 1, процесс более вязкий . Он лениво реагирует на случайные колебания (а также на изменение центральной тенденции). Затухание велико.
  • Не пытайтесь выйти за пределы диапазона 0..1, так как это приводит к возникновению отрицательной обратной связи, и вскоре альфа начинает расходиться с большими и большими колебаниями.

  • Я использовал s = 0,25, после тестирования, что не было существенной разницы для s между 0,1 и 0,3.

Важно: при использовании этого метода не забудьте инициализировать альфу, вне функции addEventListener:

var alpha = guestimate (= here 0);

Обратите внимание, что это простое адаптивное сглаживание работает во многих других случаях, и это действительно простое программирование.

Используйте направленную косинусную матрицу или фильтр калмана. Вы можете использовать акселерометр для построения графика или гироскопа или их комбинации. Дрейф может быть рассчитан с небольшим количеством машинного обучения. Я думаю, что motion fusion является частью пакета калибровки инструментов Texas. Я могу ошибаться. Но его не трудно проверить. Умножьте 3 вращательные матрицы, будьте великими .. http://www.itu.dk/stud/speciale/segmentering/Matlab6p5/help/toolbox/aeroblks/euleranglestodirectioncosinematrix.html