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

Я пишу некоторые программы по датчикам Android, где меня смущают показания датчика магнитометра.

Магнитометр сообщает о магнитной силе по трем осям телефона. И я заметил, что в том же месте, если направление телефона меняется, магнитные показания резко меняются. Однако, насколько я понимаю, магнитное поле Земли в определенном месте должно быть относительно стабильным, независимо от жеста размещения телефона.

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

Я сослался на исходные коды Android, особенно на функцию getOrientation () и функцию getRotationMatrix (). Я надеялся получить некоторую помощь от их реализации кода. Но я не очень хорошо понял. Может ли кто-нибудь объяснить принцип алгоритма этих функций?

Ссылка на код функций: http://www.netmite.com/android/mydroid/cupcake/frameworks/base/core/java/android/hardware/SensorManager.java

Спасибо! Я очень озабочен решением этого вопроса.


person Nielg Woo    schedule 25.11.2012    source источник


Ответы (1)


Это невозможно, так как устройство не знает своей ориентации в мировом пространстве.

Конечно, об ориентации можно угадать по входному сигналу датчика, и это то, что делают getOrientation () и getRotationMatrix (). Однако в долгосрочном масштабе только измерение ускорения (под действием силы тяжести) и магнитного поля дает необходимую информацию. Данные гироскопа можно использовать для уточнения оценки за более короткие периоды, но getOrientation не гарантирует их использование, и, возможно, этот датчик даже не существует на конкретном устройстве. Это означает, что при обратном преобразовании с использованием getOrientation будут использоваться те же самые данные, которые вы хотите исправить, что сделает их бесполезными.

person Marius    schedule 14.04.2013