Компас дает мне сумасшедшие данные, нужна ли калибровка или неисправность датчика?

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

SensorManager.getRotationMatrixFromVector(
            mRotationMatrix , event.values);

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

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

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

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

Ответ 1

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

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

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

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

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

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

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

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

Ответ 2

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

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

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

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

Ответ 3

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

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

Ответ 4

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

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

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

Ответ 5

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

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

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

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

Ответ 6

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

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

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

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

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