Данные Air Gyroscope, похоже, сильно отличаются на iOS и Android

Я создал приложение, которое действительно хорошо использовало расширение Gyrosope Native Extension в Android и работает отлично.

Однако теперь я протестировал iPhone 4 (iOS7) с использованием AIR 4.0, и производительность гироскопа, похоже, совершенно иная, где наклон не делает ничего, кроме вращения телефона.

Кто-нибудь знает, есть ли существенная разница в том, как эти данные работают на iOS и Android?

Мне кажется это http://www.ketzler.de/2011/11/adobe-air-gyroscope-native-extension-with-euler-angles-roll-pitch-yaw-for-ios/ который я собираюсь попробовать использовать.

Будет ли это замена или дополнение к существующему расширению?

1 ответ

Решение

Вы получите намного лучшие результаты от использования нескольких датчиков для расчета положения устройства. Упомянутое вами расширение делает это с помощью встроенных функций в iOS SDK. Используя сочетание доступных датчиков, вы получаете быстрый отклик от гироскопа, но учитываете дрейф, используя акселерометр и магнитометр.

На iOS это использует класс CMAttitude (который использует предоставленная вами ссылка):

https://developer.apple.com/library/ios/documentation/CoreMotion/Reference/CMAttitude_Class/Reference/Reference.html

Использование этого метода на обеих платформах определенно сближает показания, однако есть несколько разных способов сделать это на Android, поскольку у вас есть доступ к гораздо большему количеству информации. Самой большой проблемой на Android, конечно же, является использование всего различного оборудования, поэтому все датчики показывают немного разные диапазоны и значения. Лучший метод, который я нашел, - это использовать датчик TYPE_ROTATION_VECTOR, а затем функцию SensorManager.getOrientation, если вы ищете углы Эйлера. Я также попробовал собственный алгоритм объединения со смешанными результатами.

http://developer.android.com/reference/android/hardware/Sensor.html

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

Я потратил много времени на изучение всего этого для пакета расширений distriqt и собираюсь выпустить новое расширение DeviceMotion, которое сделает все это, если вы заинтересованы в этом.

Другие вопросы по тегам