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

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

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

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

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

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

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

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

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

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

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

P.P.S.

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

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

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