калибровка HMC5883L
- Войдите на сайт для отправки комментариев
Здравствуйте.
Нужно откалибровать данный датчик. Я испытываю некоторые проблемы. Как я понял можно получить искомые вектор и матрицу (http://www.poprobot.ru/home/magnetometer_calibration) например с помощью программы Magneto 1.2v (https://sites.google.com/site/sailboatinstruments1/home). Для этого необходимо получит файл с точками (для того что бы программа смогла для них построить приближенный эллипсоид, он нужен для матрицы и вектора). Я правильно понимаю что во время получения точек надо его поочередно вращать вокруг каждой из осей? Сильно ли будет влиять на результат если ось при вращении не была хорошо фиксирована (например не много сама вращалась вокруг другой оси вращения, была не перпендикулярна датчику и не проходила через его центр), при вращении вокруг из каждой осей происходили перемещения этой оси и все эти три оси вращения не были взаимноперпендикулярны и еще были повернуты (то есть например, фиксируем ось z для изменения рыска и плоскость Oxy не параллельна земле [стол например])? Вот результат который я получил фиксировав z на "очень" горизонтальном столе:
На трехмерном графике видно что все таки наклон есть.
Еще вопрос по самой программе. Там первый параметр - Norm of Magnetic or Gravitational Field. Я если честно не смог понять что это без статьи выше. Но в статье явная ошибка - если менять этот параметр матрица и вектор меняются. Где узнать величину магнитного поля Земли по карте я тоже не нашел :( . Не могли бы Вы помочь разобраться с тем какие факторы из выше написанных мешают каллибровки и что это за параметр в программе и как мне его примерно для себя узнать?
Нашел еще статью http://www.avislab.com/blog/hmc5883l_ru/. В итоге надо просто его вращать не фиксировав оси для получения эллипсоида (в фаил было записанно 40к точек)
В итоге вектор bias вышел: -79.147013 -148.927157 -18.058312
матрица:
1.880001 0.005352 0.016590
0.005352 1.853704 -0.011914
0.016590 -0.011914 2.070022
За величину магнитного поля Земли я выбрал 1090. Значения действительно сильно меняются от датчика к датчику, если сравнить мои с теми что в статье.
имею встречный вопрос - как его опросить если в наличии кроме него только ардуина нано и кабель юсб? (ну и комп).
(в сериалмонитор)
Колибровал как на этом видео https://www.youtube.com/watch?v=lpLx8sViZEQ
Показывает азимут точно также как обычный компас.
Калибровке мешают включенные электроприборы, особенно трансформаторы.
трансформатор влиял на расстоянии до 2х метров.
Спасибо.
А если без компьютера? В самой дуине?
Или некуда записать в самой дуине такой большой массив данных?
Там не только в памяти там еще в вычислениях дело. Я собрал исходник на С этой программы и полистал описание проги на сайте, из всего этого я понял что там довольно трудоемкий для ардуины алгоритм как по сложности вычислений так и по памяти.
Самое сложное при работе с этим магнитометром не калибровка, а удержание его строго в горизонтальном положении. Если его чуточку наклонить, то вектор направления сразу изменится. Поэтому если хотите сделать из него настоящий компас, то придется подключать еще и гироскоп с акселерометром.
Да как раз так и делаю. В моем заглавном посте статья в ней написанно как применять крен и тангаж.
Мне кажется самое сложное это калибровка, потому что если он установлен например в устройство где есть металл и не большие магниты, то если я ничего не пропустил придется его вращать вместе с этим устройством. :(
Статью читал. Тоже когда-то делал наклононезависимый компас.
На сколько я понял, магниты и железо дают HARD погрешность, то есть сдвигают центр сферы от начала коордитат. Но не нарушают SOFT калибровку. Получается, что можно только пересчитать те три коеффициента, повращав модель во всех направлениях. Новые коефф. считаются как k = - ( min+(max-min)/2 ).
Буквально вчера наигрался с магнитометром. От досады таки бросил его обратно в коробку. Две недели он мне мозг выносил. Отдам людям которые божатся что смогут его укротить вместе с жпсом. Поделюсь заметками:
Для моих целей требовалась точность градусов 5-10. С этом плане у моего экземпляра были ортогональные оси. То есть ошибка производства меня устраивала. После этого можно нормировать оси в самой дуине. Это на тот случай (как у меня - программе Magneto не хватило в компе какого-то-там директикса).
В основном цикле вычисляются максимум и минимум по осям (крутим в руках ММ) и печатаются в сериалпринт. Тут же вычисляется ради интереса середина между ними (сдвиг центра). Кстати у меня максы все похожи до 20% и в плюсах, мины тоже похожи и в минусах, а свдиг около нуля в 20% от размаха. Потом делим на длину размаха и получаем нормированные до единицы показания. Вся операция при ловких руках занимает секунд 20 - значения минов и максов перестают меняться.
Печатаем нормированные значения ХУЗ в сериалплоттер, крутим в руках ММ - радуемся трем бегающим волнам. Не понимаем что дальше с этим делать.
Вращаем его горизонтально на столе - радуемся что зет не меняется при этом, а Х и У меняются. Вычисляем азимут как арктангенс Х на У. Печатаем в плоттер - охреневаем от своей крутости.
Убираем со стола, наклоняем и крутим. Получаем ерунду. Со злости рвем волосья на Ж. Сдаемся.
------------
п.с. и да - дело не в atan. и даже не в atan2. и даже не в Х/У. И даже не в делении на нуль. Нет. Не в этом.
ппс. стереометрия гори в аду вместе с тригонометрией.
Ого, сколько обиды :) Не надо так остро воспринимать неудачи, ведь они - ключ к победе.
А по делу, так все у вас получилось. Я выше писал, что для получения компаса из магнитометра нужен еще гироскоп и акселерометр. Ищите модульки на mpu6050 (или подороже mpu9250, но там уже есть магнитометр внутри), читайте о TilledCompass и все у вас заработает.
Интересно, в проекте от K3NG поддержка цифрового компаса HMC5883L заявлена как работающая, а программа калибровки реализована в самой ардуинке и точность 1 градус и лучше
...Я выше писал, что для получения компаса из магнитометра нужен еще гироскоп и акселерометр...
как бЭ все мое нутро протестует. Насколько мне представляется - одного только магнитометра достаточно. Если укротить тригонометрию. Так-то вроде вся необходимая информация же содержится в трех проекциях... Не?
----------------
я проверял вычислением корня из суммы квадратов проекций - да, длина вектора остается постоянной. Это именно тот самый вектор магнитного поля планеты, постоянный во времени и пространстве. Направленный примерно на север (географический) - хотя и склонение и наклонение его существенны. Хренбы с ними - хотя бы найти натуральное направление, от которого и отсчитывать углы.
Определять гравитационную вертикаль на основании показаний акселерометра, и ее использовать в расчетах магнитометра - речь в эту сторону?
А кто нибудь может поделится провереным скетчем для старта. Ко мне девайс приехал наверно уже год как, и лежит. Пока он ехал, а ехал долго, я к нему потерял интерес ))) Даже кулечек не распакован. А так может за компанию попробую.
Я выше писал, что для получения компаса из магнитометра нужен еще гироскоп и акселерометр. Ищите модульки на mpu6050 (или подороже mpu9250, но там уже есть магнитометр внутри), читайте о TilledCompass и все у вас заработает.
Это очень интересно.
Я как-то больше года назад (как раз только узнал об Ардуино) заказал себе модуль, совмещающий акселерометр, гироскоп, магнитометр и барометр.
Магнитометр на нем не подает признаков жизни. Ну, думаю, все бывает - Китай есть Китай (хотя сам модуль стоит дороже, чем все приборы по отдельности вместе взятые). Заказал еще один такой же у другого продавца. Но сразу по получении проверил. Оказалось - то же дефект.
Написл продавцу. Тот потребовал видео с подтверждением. Я не очень представляю, как видео должно подтверждать неработоспособность прибора, но записал ему видео со своими попытками установить связь между Arduino IDE и компасом. Наверное, его испугал мой английский, но он согласился вернуть более половины стоимости прибора.
Но самое скверное, что каждый производитель I2C периферии считает своим правом впаять в модуль резисторы. Причем в указанном модуле они выбраны практически наименьшего допустимого номинала, так что подключение параллельно модулю какого-нибудь еще прибора проблематично.
Вот и получается, что либо акселерометр с гироскопом, либо компас, а вместе - никак.
Модуль на каком чипе? У меня на mpu9250. Работает прекрасно. Правда, барометр я еще не ковырял - не было необходимости. Но магнитометр с акселерометром пашут, направление показывают. Запара была только в том, что у магнитометра и акселерометра разные системы координат, пришлось подменять оси в коде.
Модуль вот такой: https://ru.aliexpress.com/item/10DOF-MPU6050-HMC5883L-BMP180-Gyroscope-A...
Возможно уже и не нужно, но отправлю ссылку https://github.com/jarzebski/Arduino-HMC5883L/blob/master/HMC5883L_compass_MPU6050/HMC5883L_compass_MPU6050.ino
Тут понятно, что одновременно гироскопы и магнитомер к I2C не подключаются.
Надо обход делать.