Pull to refresh

Comments 20

Направление на магнитный север не требует учета магнитного склонения. Оно нужно для определения направления на истинный север при известном направлении на магнитный.

Ступил. :) Исправлю.

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

Наверное, вы имели в виду двумерный вектор, а не одномерный? Магнитометр в приборе вовсе не всегда будет находиться в плоскости горизонта, поэтому используются все три координаты.

Анизотропия влиять на направление будет. Если бы она не влияла, матрица W осталась бы единичной.

Да, двухмерный конечно, в плоскости )
Ну да, когда магнитометр наклоняется по одной из осей X\Y, одна компонента уменьшается, а вторая нет, соответственно суммарный вектор будет менять направление.
А анизотропия как влияет? Магнитомягкий материал усиливает внешнее магнитное поле, когда оно совпадает с направлением анизотропии, как-то так? Но направление вектора магнитного поля от этого не меняется же?

Одна составляющая вектора меняется сильнее, чем другая - их сумма изменится. Вектор повернется по направлению более легкого намагничивания

Магнитомягкие материалы постоянно добавляют свой вектор магнитного поля, совпадающий с полем Земли+поле магнитотвёрдого материала около них+поле другого магнитомягкого материала около них, причём, эти магнитомягкие материалы находятся где-то сбоку от магнитометра (но вращаются вместе с ним), и поэтому результирующий вектор, действующий на магнитометр получается как сумма всех этих векторов. Вот если бы магнитомягкие материалы находились бы внутри магнитометра, тогда никакого искажения не было бы.

Исходников в открытом доступе нет случайно?

Есть. Только это будет просто экспериментальная программа. Буквально на попробовать. Я такое даже на свой гитхаб класть не хочу. Но все операции с матрицами там есть.

Вот она.

А зачем фильтр Калмана? Можно же просто составить систему уравнений и решить её...

А она может и не решиться. Шумы измерений не позволят.

Кстати, для апостериорной обработки можно решить ту же задачу с помощью МНК. Единственно, точек будет много и решать такую систему довольно затратно. Фильтр же позволяет делать корректировку прямо во время движения объекта.

А она может и не решиться. Шумы измерений не позволят.
можно решить ту же задачу с помощью МНК.

Да, я это и имел ввиду, систему уравнений составить с применением МНК.

Единственно, точек будет много и решать такую систему довольно затратно.

На 100K уравнений за разумное время (минуты) решается. А у вас очень сильно разреженная система будет, так что ещё быстрее.

Фильтр же позволяет делать корректировку прямо во время движения объекта.

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

Обычно, все эти задачи решают микроконтроллеры устройств. У них и быстродействие не очень, да и памяти мало. Причём , решают непрерывно. И ещё фильтр довольно быстро перестроится, если поменяется расположение магнитных объектов вокруг магнитометра (на судне, например, сгрузили грузовой контейнер), а вот МНК так не сможет автоматически. Нужно сбрасывать накопленный массив данных и запускать калибровку заново.

Но, кстати, я интереса ради попробовал определить вектор состояний с помощью МНК. И возникла проблема (та же, что и у фильтра Калмана, из-за чего он обобщённый) - взаимосвязь не линейная. Чтобы получить результат измерений (с которым сравниваем) нужно знать истинное поле (подбираемое) и матрицу анизотропии. И в результате матрицы стандартного МНК не записать. Есть нелинейный МНК, но там просто не будет. И выгоду по сравнению с фильтром вряд ли получится получить.

Для нелинейного МНК есть хорошие реализации, например http://ceres-solver.org/, там производные можно автоматом посчитать.

Вопрос несколько вскользь. В последнее время в платах объеденяющие акселерометр, гироскоп и магнитометр(пришедших на смену снятым с производства 9250 с HMC5883L) не могу нормально опросить магнитометр. Максимум что получается это считать мусорные константы от магнитного поля не зависящие.

Отдельные без акселерометра платы с магнитометром QMC5883L, например, работают без проблем, а магнитометров на новых платах 9000 серии вроде этих https://roboshop.spb.ru/sensors/datchiki-navigacii/mpu9250-module никаким из известных мне способов получить данные коррелирующие с магнитным полем мне не удаётся. Обычно магнитометром там указывают AK8963. Судя по комментариям в различных магазинах эта проблема не только у меня.

Это я что-то не знаю про особенности опроса магнитометров на новых 9000 платах, или действительно массовый брак пошёл?

вроде этих https://roboshop.spb.ru/sensors/datchiki-navigacii/mpu9250-module

Так. Погодите-ка. Я только что такую плату на 9250 вчера получил. И вчера попытался впервые её опросить по SPI. Может, я неправильно опрашиваю магнитометр, но только данных я нифига не получил (принимаются застывшие биты). Я вообще думал, сама 9250 внутри с магнитометром. И он там этот самый аналог AK8963. И я как-то не догадывался, что в 9250 внутри меняют схемотехнику. Отвратительно.

У меня пришла перемаркировання MPU6500. Регистр WHOAMI выдаёт 0x70. Магнитометра там, ожидаемо, нет.

Вместо магнитометра поддельной MPU9250 купил HMC5883L. Очень удивился, что он не отвечает по I2C. Оказывается, даже тут китайцы обманули. Там QMC5883L. У него и адрес другой (0x0D) и протокол обмена тоже другой. :)

Sign up to leave a comment.

Articles