Проблемы с некалиброванным магнитометром
Я работал с калиброванным магнитометром Android в течение некоторого времени, вводя его в наш алгоритм для значений вектора вращения, чтобы вычислить правильное отклонение / ориентацию с севером. Несмотря на то, что мы не полностью проецируем рыскание на плоскость, параллельную земле, чтобы получить истинное рыскание независимо от высоты тона, мы заметили, что даже после калибровки магнитометра - с использованием калиброванных значений магнитометра и перемещения телефона на рисунке восьмерки и другие движения / ориентации - откалиброванные значения, похоже, в конце концов пытаются перекалибровать.
Имея это в виду, мы решили начать с рассмотрения некалиброванных значений, данных Android в нашем коде JNI. В структуре "ASensorEvent" есть "uncalibrated_magn", который является структурой "AUncalibratedEvent" - все это определено в "android/sensor.h". Я предполагал, что это даст мне некалиброванные значения; однако я ошибся - по крайней мере, на устройствах, на которых я его проверял - и получил предполагаемые калиброванные значения. Так как в "sensor.h" единственными перечислениями для датчиков, которые явно определены, являются...
ASENSOR_TYPE_ACCELEROMETER = 1,
ASENSOR_TYPE_MAGNETIC_FIELD = 2,
ASENSOR_TYPE_GYROSCOPE = 4,
ASENSOR_TYPE_LIGHT = 5,
ASENSOR_TYPE_PROXIMITY = 8
... Я решил напрямую ввести 14, предполагая, что это даст мне некалиброванные значения магнитометра, так как это значения, которые связаны с магнитометром вне JNI http://developer.android.com/reference/android/hardware/Sensor.html Это дало некалиброванные значения магнитометра, которые соответствовали значениям вне JNI.
Итак, в этот момент мы решили построить данные значения и заметили что-то странное.
Здесь вы можете видеть, что ось x- это заданные значения y, а ось y - значения z, заданные некалиброванным магнитометром - однако, оси не имеют значения, так как они видны по всем осям. Внизу слева вы заметите "j" фигуру, повернутую примерно на 150 градусов по часовой стрелке. Эти значения цифры "j" были в начале сбора данных и длились около 20 секунд.
Мы не всегда видели это в нашем сборе данных, но примерно в 50% случаев мы это видели. Я действительно понятия не имею, что это такое. Я имею в виду, что я предполагаю, что это не какое-то странное смещение жесткого железа, так как я представляю, что такое смещение близко к смещению, которое видно для большинства данных, и я предполагаю, что это не были отклоненные значения мягкого железа, потому что среда был одинаковым по крайней мере через 1 секунду до конца сбора данных (длился около 200 с) и иногда был одинаковым на протяжении всего следа.
Я предполагаю, что мы начинаем спекулировать, что мы действительно не получаем некалиброванные / необработанные значения.
Заранее спасибо.
1 ответ
Как написано на http://developer.android.com/guide/topics/sensors/sensors_position.html
"Заводская калибровка и температурная компенсация все еще применяются к магнитному полю". Надеюсь, поможет!