Как преобразовать необработанные данные XYZ магнитометра в заголовок?

Я использую встроенное устройство с простым 3-осевым магнитометром. У меня есть в настоящее время отображение значений X Y Z в микро-Тесла, но как мне преобразовать их в заголовок компаса? Я пытался найти его в Google, но все, что я нахожу, кажется чрезвычайно сложным / плохо объясненным.

Если возможно, я хотел бы знать, как сделать это как с компенсацией наклона, так и без компенсации наклона.

Значения, которые я сейчас получаю на плоской поверхности для X, Y, Z, составляют 70,0,8 и 34,1 соответственно, если это как-то помогает.

P.S Если это поможет, вот фрагмент кода, который я использую для магнитометра:

mSensor.enable();

while(true){
wait(1);
mSensor.getAxis(mData);
lcd.cls();
lcd.locate(0,3);
lcd.printf("X=%4.1f micro-Tesla\n\rY=%4.1f micro-Tesla\n\rZ=%4.1f micro-Tesla", mData.x, mData.y, mData.z);

1

Решение

Без компенсации наклона это не так уж сложно:

angle = atan2(Y, X);

Это фактически то же самое, что преобразование вектора в декартовых координатах [X, Y] в вектор в полярных координатах [длина, угол], без необходимости длины.

Для версии с компенсацией наклона необходимо сначала спроецировать трехмерный вектор [X, Y, Z] на плоскость [X2, Y2], а затем использовать ту же формулу, что и раньше. Но для этого вам понадобится акселерометр, чтобы узнать величину наклона.

4

Другие решения

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

Затем вы можете использовать показания X, Y и Z, чтобы вычислить местоположение «севера» относительно того, куда вы указываете (имея в виду, что «север» изменяется на 30 градусов в зависимости от того, где вы находитесь на земле (называется склонение — см. http://www.magnetic-declination.com/) и что он не горизонтален относительно земли (смутно, называется «наклон») — см. https://physics.stackexchange.com/questions/283761/if-you-hold-a-compass-needle-vertical-does-it-point-down-or-up-differently-on-wh/283782 )

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

Плохая новость — не существует простого способа сделать то, что вы хотите точно, и определенно нет того, который будет работать без тригматики на всех 3 показаниях (вы не можете просто использовать X и / или Y в одиночку).

Хорошая новость — вам, вероятно, не нужно знать фактический «заголовок» — большинству приложений нужно только какое-то локальное относительное направление по сравнению с тем, что вы уже знаете.

Остерегайтесь того, что сильные магниты (например, магниты во всех современных двигателях) могут серьезно испортить показания с большого расстояния (даже 10 или более футов) — возьмите приложение из своего телефонного магазина, в котором отображаются показания магнитометра телефона, и поверните магнит, увидеть это легко!

0