Когда использовать акселерометр или гироскоп на Android

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

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

Solutions Collecting From Web of "Когда использовать акселерометр или гироскоп на Android"

Покрытие пользователей:

Большинство устройств имеют как гироскоп, так и акселерометр, но почти у каждого устройства есть акселерометр. Особенно старые устройства и более дешевые не имеют гироскопа. Не забывайте, что, поскольку это приложение для детей, возможно, родители не хотят, чтобы маленькие использовали свой превосходный планшет на 700 $, и, вероятно, будут использовать более дешевые. Более дешевые устройства, как правило, не имеют гироскопов. Итак, +1 для акселерометра.

Пользовательский опыт

Акселерометр измеряет ускорение в трехмерной системе координат. В большинстве случаев (когда пользователь фактически не прыгает или не бросает устройство), большая часть ускорения – это сила тяжести. С помощью силы тяжести очень легко определить наклоны и небольшие движения. Кроме того, у вас есть программный датчик Gravity для устранения странных движений и Linear Acceleration для устранения Gravity. Гироскоп обнаруживает вращение. Он более чувствительный, более точный и создает события быстрее, чем акселерометр, но, похоже, это слишком много для этой утилиты. Если вы хотите сделать 3D-гоночную игру или симулятор полета, это будет победа для гироскопа, но для приложения для детей это слишком много.

Использование батареи

Здесь нет соревнования. Гироскоп использует в 3-30 раз больше батареи (возможно, больше, в зависимости от устройства), в то время как акселерометр очень нежный на батарее. Кроме того, для большинства пользователей акселерометр уже активен (чтобы автоматически поворачивать экран), поэтому здесь нет использования батареи датчика. +1 для акселерометра

программирование

Датчики довольно легко и просто реализовать в приложениях для Android. Поскольку гироскоп обнаруживает скорость вращения, он дает все 0 значений, если устройство остается неподвижным (и, возможно, немного шумом в диапазоне + -0.01rad / s), так что вам нужен только небольшой блок, чтобы убрать очень небольшие движения ( Например, когда значения гироскопа меньше 0,2 рад / с). С помощью акселерометра вам понадобятся дополнительные вычисления для определения ориентации устройства, и какая ось фактически является той, которая требует большего внимания для определения направления движения. Это непросто сделать, но это добавляет несколько дополнительных строк кода и дополнительную отладку для вашей работы. +1 для гироскопа.

Вывод

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

Я думаю, что эти датчики – это те, которые нужно учитывать (я цитирую из книги «Reto Meier, Professional Android 4 Application Development» здесь):

  • Sensor.TYPE_ACCELEROMETER – трехосный акселерометр, который возвращает текущее ускорение вдоль трех осей в м / с2 (метры в секунду в секунду).

  • Sensor.TYPE_GYROSCOPE – трехосный гироскоп, который возвращает скорость вращения устройства вдоль трех осей в радианах в секунду. Вы можете интегрировать скорость вращения с течением времени, чтобы определить текущую ориентацию устройства; Однако, как правило, лучше использовать его в сочетании с другими датчиками (обычно акселерометрами), чтобы обеспечить согласованную и скорректированную ориентацию.

  • Sensor.TYPE_ROTATION_VECTOR- Возвращает ориентацию устройства в виде комбинации угла вокруг оси. Он обычно используется как вход метода getRotationMatrixFromVector из диспетчера датчиков для преобразования возвращенного вектора вращения в матрицу вращения. Датчик вектора вращения обычно реализуется как виртуальный датчик, который может комбинировать и корректировать результаты, полученные от нескольких датчиков, таких как акселерометры и гироскопы, для обеспечения более плавной матрицы вращения.

Конец цитирования … Вы можете найти реализацию датчика по умолчанию для заданного типа с использованием метода getDefaultSensor, например:

 Sensor defaultGyroscope = sensorManager.getDefaultSensor(Sensor.TYPE_GYROSCOPE); 

Если это возвращает значение null, устройство не имеет датчика, чтобы вы не пытались его использовать. Я ожидаю, что большинство устройств имеют эти датчики (скорее всего, акселерометр), поскольку они используются для обнаружения вращения экрана.

Я считаю, что большинство телефонов имеют возможность наклона. У меня 2-летний телефон с чипом, который был 45 $, когда он был новым, и работает на Android 2.1, он наклоняется и меняет перспективу.
У меня также есть планшет, которому три года, и он тоже наклоняется.
Я бы сказал, что вы совершенно уверены, что наклон будет там.

Почти все (или даже все) телефоны будут иметь акселерометр. Но не у всех из них есть гироскоп. Кто-то сделал не исчерпывающий список телефонов с гиросопой здесь: Какие телефоны Android там есть гироскоп?

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

Со временем количество и типы датчиков, доступных в «типичном» устройстве Android, значительно изменились. Но некоторые средства измерения ориентации устройства относятся к более старым возможностям. Похоже, что правильный подход заключается в проверке во время работы для новых датчиков и возвращении к более старым, при этом грациозно обрабатывая случай, когда информация просто недоступна.

В документе разработчика Sensor Overiew есть таблица, показывающая, когда определенные типы датчиков были впервые доступны на уровне API Android. Но обратите внимание, что это просто отражает способность этого уровня API говорить об этом типе данных; Конкретному устройству все еще может быть недостает необходимого оборудования.

Похоже, что акселерометр и гироскоп входят в число самых старых датчиков и, вероятно, присутствуют в большинстве мобильных телефонов.

Сейчас (декабрь 2013 г.) панель разработчика демонстрирует, что все, но около 1,6% устройств Android, обращающихся к Play Store, являются версиями 2.3 или новее (API 10 или новее). Эти данные основаны исключительно на версии 2.2 или более новых устройствах, использующих хранилище, устройства старше 2.2 всего лишь около 1% всех устройств, которые проверяют на любой сервер Google в августе 2013 года. Эта страница содержит информацию о разрешении дисплея устройства, но не По-видимому, охватывают другие функции устройств. Я не мог найти приборную панель, в которой конкретно были указаны датчики, доступные в дикой природе.