Я должен создать компас для своего приложения.
От чтения документации кажется, что существует два разумных способа сделать это:
Любые предложения для решения этой проблемы будут значительно цениться.
Похоже, mob1lejunkie уже понял это, но на всякий случай позвольте мне упомянуть, что проблема здесь в магнитном склонении (разница между магнитным севером и истинным севером ). Вы можете попробовать онлайн-модель от NOAA , чтобы понять, в чем разница в вашей части мира.
Android включает модель под названием Geom MagneticField , которую можно использовать для вычисления приблизительного склонения с учетом широты, долготы и высоты. Итак, что, как я считаю, вам нужно сделать для вычисления истинного севера, это считать значение азимута из Sensor.TYPE_ORIENTATION и затем добавить к этому Geom MagneticField.getDeclination ().
Это обратная сторона компактных деталей, сделанных для телефонов. IMU за $5000, который мы используем сейчас, имеет погрешность +/- 2 градуса, и в этом диапазоне он, похоже, тоже сходит с ума.
Попробуйте отойти от помех, металлических поверхностей и посмотрите, улучшится ли ситуация. Если нет, не хотелось бы сообщать плохие новости, но это аппаратура.
Вы видели это?
http://developer.android.com/reference/android/hardware/SensorManager.html