Получение значений магнитного поля в глобальных координатах

Для приложения Android мне нужно получить измерения магнитного поля по оси глобальной (мировой) системы координат. Вот как я собираюсь (угадать) реализовать это. Пожалуйста, поправьте меня при необходимости. Также обратите внимание, что речь идет об алгоритмической части задачи, а не об Android API для датчиков - у меня есть опыт работы с последними.

Первый шаг - получитьTYPE_MAGNETIC_FIELD данные датчика (M) а такжеTYPE_ACCELEROMETER данные датчика (G). Второй должен использоваться в соответствии с документацией Android, но я не уверен, что это не должно бытьTYPE_GRAVITY вместо (снова какG), потому что акселерометр, кажется, обеспечивает не чистую гравитацию.

Следующий шаг - получить матрицы вращения черезgetRotationMatrix(R, I, G, M), гдеR а такжеI являются матрицей вращения и наклона соответственно.

А теперь перейдем к самой сомнительной части: чтобы перевестиM вектор в мировую систему координат, я полагаю, умножить[R * I] * M.

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

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

Постскриптум

Я пришел к идее добавить некоторую информацию в исходный пост для ясности.

Предположим, что устройство лежит на столе и непрерывно считывает данные со своего магнитного датчика. Каждое измерение содержит 3 значения, представляющих магнитное поле по осям X, Y, Z, которые являются локальной системой координат устройства. Я полагаю, что я могу пренебречь флуктуациями поля окружающей среды (сглаживаются фильтром нижних частот), поэтому эти 3 значения должны оставаться почти одинаковыми все время, пока устройство остается на месте. Если мы вращаем устройство вокруг любой оси, значения меняются, потому что мы меняем локальную систему координат. Но само поле на самом деле не изменилось. Поэтому я хочу перевести локальные измерения полей X, Y, Z в такие X ', Y', Z ', чтобы они сохраняли свои соответствующие значения независимо от поворота устройства, при условии, что устройство не перемещено из своего местоположения (только повернуто).

Я реализовал алгоритм, описанный выше, и получил регулярные и заметные изменения значений X ', Y', Z ', полученные с помощью предложенных преобразований, так что в этом что-то не так.

P.P.S.

Иногда я находил точную копию моего вопроса здесь на SO -Как получить вектор магнитного поля, не зависящий от вращения устройства? - но, к сожалению, ответ содержит мои предложения, и ОП этого вопроса подтверждает, что они не работают.

Ответы на вопрос(2)

Ваш ответ на вопрос