Компас дает мне сумасшедшие данные, необходима калибровка или неисправен датчик? - PullRequest
12 голосов
/ 27 февраля 2012

Я работаю с данными датчика Android. Мое приложение использует

SensorManager.getRotationMatrixFromVector(
            mRotationMatrix , event.values);

и он работал хорошо до сегодняшнего утра, когда матрица вращения начала посылать много данных о шуме (за секунду измените N на W).

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

Я проверил свое приложение на другом планшете, и оно работает хорошо.

Кто-то знает, почему это происходит? Проблема с датчиком? Нужна ли калибровка?

Ответы [ 6 ]

21 голосов
/ 06 марта 2012

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

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

Попробуйте: Установите Состояние GPS , затем отключите всю фильтрацию(настройки ... GPS и датчики ... сенсорная фильтрация ... без фильтрации).Выполните калибровку (рисунок из 8 волнистых элементов), а затем переместите телефон вокруг стола ... возле мониторов, кабелей и т. Д. Вы увидите, что это сходит с ума.Информация абсолютно ненадежна.В прошлом я обнаружил, что перемещение телефона на несколько дюймов вправо полностью изменило его показания.То же самое происходит с реальным компасом.Строго говоря, «проблем» нет.Компас устройства присваивает себе самое сильное магнитное поле.Даже магнитное содержимое близлежащих камней может мешать компасу.

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

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

Дополнительно: Ответ от @resus также важен при калибровке.Поверните телефон несколько раз по каждой оси.Выглядит глупо, но все же правильно его калибрует.

Дополнительно 2: Возможно / практично ли использовать компас, имеющий вашего GPS?Требуется, чтобы устройство двигалось (скорость ходьбы должна быть хорошей), но вам не нужно беспокоиться о каких-либо помехах.Он должен давать точные показания, если ваш сигнал GPS хороший.

Дополнительно 3: Еще одна мысль мне пришла в голову .. Вы можете попробовать применить фильтр низких частот к датчику.Это означает, что внезапные изменения в показаниях датчика отфильтровываются ... посмотрите на этот ответ .И если это не помогает, есть множество алгоритмов в Интернете, из которых вы можете выбрать.

7 голосов
/ 27 февраля 2012

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

Пока ваше приложение работает (т. Е. Используется компас), вы должны иметь возможность пометить его цифрой 8, чтобы автоматически откалибровать компас. Вам также следует убедиться, что вы не стоите рядом с большими металлическими глыбами и т. Д., Которые могут помешать чтению.

Вы можете переопределить метод onAccuracyChanged() для SensorEventListener, чтобы вывести сообщение пользователю, когда компас требует перекалибровки (возможно, когда точность падает до SENSOR_STATUS_ACCURACY_LOW).

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

5 голосов
/ 29 февраля 2012

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

Как сказано в посте выше, чтобы выполнить калибровку, помахайте своим устройством цифрой 8. Я просто хочу добавить, что вы должны сделать это для КАЖДОЙ оси. Это должно исправить вашу проблему.

4 голосов
/ 06 марта 2012

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

Где вы обычно держите планшет? Может быть, это было рядом с большими серверами или магнитами? Вы должны проверить компас на всякий случай, обратитесь к технической поддержке Android.

Надеюсь, это поможет.

2 голосов
/ 29 сентября 2016

В настоящее время мне посчастливилось разработать робота с HMC-5983 и MPU-6050, который можно откалибровать, используя его библиотеки с Arduino.

Этот код совместим / переносим с другим uController, но для смартфонов это не так просто, я думаю, что смещения, необходимые для калибровки компаса, гироскопа и акселерометра, находятся внутри некоторых внутренних компонентов Android, недоступных в SDK.

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

Итак, удачи! Что также верно, так это то, что в обоих устройствах (смартфоне и моем роботе) их необходимо переместить, чтобы они хорошо работали, как я показал вам в видео с последним ответом, также полезным для роботов.

Удачи и веселья с этими вещами, очень сильны.

2 голосов
/ 31 августа 2016

Я думаю, что вопрос в том, можно ли выполнить калибровку без отправки каких-либо данных на компас. Потому что не все говорят, что компас откалиброван, как показано в этом видео: https://support.google.com/maps/answer/6145351?hl=en и, очевидно, вы не можете сделать ничего, кроме как посоветовать пользователю калибруйте перед использованием программы или когда вы получаете слишком много изменений. Например, влево и вправо на 90 градусов примерно за 25 мс.

В любом случае, я думаю, что хорошо бы дать приложению несколько секунд, прежде чем начать сбор данных, потому что оно дает некоторые нестабильные значения (слишком высокие и низкие за короткое время без движения) в момент загрузки приложения. Просто дайте обработчику onSensorChanged() закодировать с условным условием и запустите поток в обработчике onCreate(), который установит boolean в true через несколько секунд. Затем вы начинаете захватывать данные на обработчике onSensorChanged().

Также эта ветка может помочь определить точность датчика, а затем вы можете всплыть: Можно ли программно обнаружить в Android, что компас еще не откалиброван?

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

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