как откалибровать датчик ориентации в андроиде? - PullRequest
16 голосов
/ 04 июля 2010

Я пишу приложение в Google Android 2.1, которое должно знать, в каком направлении (н / ж / с / е) направлено устройство (HTC Hero). Сенсор и его слушатель работают отлично, но значения, которые я получаю от сенсора, абсолютно дрянные. например он говорит мне, что я буду смотреть на север, когда устройство будет ориентировано на ПО или около того ...

Это, кажется, известная проблема с устройствами Android. «Решения», которые я нашел в Интернете, выглядят так:

  • встряхните устройство вокруг
  • двигай устройство как восьмерку
  • нажмите на устройства назад

Считается, что это вызывает перекалибровку датчиков. И: вещь с "перемещением" работает для меня ... но это не очень профессионально, я думаю ...

Итак - как запустить калибровку датчика ориентации из SDK? Мне нужно, чтобы сенсор был правильно откалиброван без каких-либо сложностей, из-за которых пользователи этого приложения выглядели бы как полные идиоты, пока они «вручную» перекалибровали свои телефоны ...

Есть ли способ сделать это "правильно"?

EDIT:

Или: есть ли способ ПРОГРАММНО определить, правильно ли откалибровано устройство или нет? Так сказать, как запасной вариант ... тогда я мог бы предупредить пользователя, что устройство нуждается в "ручной" калибровке.

Ответы [ 2 ]

3 голосов
/ 04 июля 2010

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

С этими микроустройствами всегда есть небольшой перекос, с которым вам придется иметь дело.Если вы также проверите значения для акселерометра, то увидите, что в состоянии покоя они не всегда возвращают 9,8 м / с ^ 2 (или, по крайней мере, последовательно между устройствами).чтобы сбросить компас, нужно сказать пользователю повернуть / повернуть его телефон на восьмерке.

0 голосов
/ 24 июля 2010

Полагаю, вы имеете в виду магнитометр внутри Героя.

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

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

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

Системы, которые работают подобным образом, иногда называют Инерциальные навигационные системы (INS), потому что они могут, учитывая фиксированную точку в пространстве, определятьих последующее относительное положение и ориентация точно без дополнительных внешних данных.Использование фильтра Калмана является обычной практикой для периодической повторной калибровки системы, когда доступна абсолютная позиция (например, полученная с помощью GPS).

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...