Как правильно калибровать Магнитометр

Признаком неверной калибровки магнитометра является то, что после сборки, прошивки и калибровки в калибраторе трекер ведёт себя странно, например:

  • после завершения поворота обзор постепенно смещается по Yaw по направлению к одной точке (“пружина по Yaw" )

  • при подъёме или опускании головы только по Pitch, обзор немного смещается по Yaw в одном случае налево, в другом случае направо. Но такой же эффект может быть при неудачной центровке в режиме [ Center YPR ], поэтому для верхнего датчика Head лучше выбрать режим центровки [ Center Y,P ] или даже [ Center Yaw ].

О калибровке магнитометра я уже говорил здесь: Калибровка Магнитометра [Calibr Magn] , но, судя по всему, нужно рассказать ещё подробнее.

Сначала я расскажу о типичных ошибках при калибровке магнитометра.


Ошибки при калибровке магнитометра.

Проделаем простой опыт в калибраторе, в режиме [ Calibr Magn ]. Возьмём датчик трекера в руки и без вращений просто переместим его по очереди к клавиатуре, к монитору, к колонкам, к голове. Видим, что красный шарик при этом смещается, что равнозначно ухудшению калибровки. Это связано с неоднородностью магнитного поля Земли в разных точках комнаты. Отсюда следует вывод - калибровать магнитометр и проверять калибровку нужно в той точке комнаты, где будет находиться голова во время игры.

Второй опыт. Возьмём в руки наушники с окончательно закреплённым на их оголовье датчиком трекера. Теперь будем раздвигать и снова соединять вместе чашки наушников, стараясь не сдвигать и не поворачивать датчик. Видим, что красный шарик при этом смещается. Калибровка опять ухудшается. Это связано с тем, что магниты, которые находятся в чашках наушников, перемещаются относительно магнитометра и изменяют проходящее через датчик суммарное магнитное поле. Отсюда вывод - при калибровке магнитометра чашки наушников должны быть раздвинуты на ширину головы.


Классический способ калибровки магнитометра

С учётом вышесказанного, теперь должно быть понятно, как правильно калибровать магнитометр:

  • Датчик должен быть уже окончательно закреплён на наушниках, а между чашками наушников нужно вставить неметаллическую вставку по ширине головы (футбольную камеру или коробку подходящего размера, по ширине головы), чтобы магнитное поле от наушников на датчик трекера было таким же, как когда наушники на голове.

  • Во время калибровки датчик должен быть в той точке пространства, где будет голова во время игры. Для этого нужно встать за спинку кресла и вращать датчик в руках, над спинкой кресла.


Проверка качества калибровки магнитометра:

  • Сразу после калибровки, в режиме [ Calibr Magn ], значение Rmax/Rmin в нижней части экрана должно быть не больше 1,2.

  • Наденьте наушники на голову и сядьте в кресло так, чтобы голова находилась там, где она будет во время игры. При любом повороте головы значение |Mag ex| ( или |Mag st| ) в левой части экрана должно быть в диапазоне 0,95...1,05.

  • Теперь нужно переключиться в режим [Test Row]. При повороте головы влево или вправо стрелка датчика на экране не должна "пружинить" по Yaw. При повороте головы вверх или вниз стрелка датчика на экране не должна поворачиваться по Yaw влево или вправо (если не была выполнена центровка в режиме [ Center YPR ] ).

Если поведение трекера устраивает, нужно тут же, чтобы не забыть, записать калибровку в Ардуино кнопками [ Arduino... ], [ Write Arduino... ], [ OK ], и ещё раз проверить работу в режиме [ OpenTrack ].

Вывод:

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

Тогда может быть, чтобы сделать калибровку магнитометра менее трудоёмкой, калибровать магнитометр прямо на голове? К сожалению, до версии [20191019] только примерно одна из шести калибровок таким способом (прямо на голове) оказывалась удачной, чаще в результате коэффициент Rmax/Rmin получался равным NAN, что есть переполнение.

Это происходило из-за того, что не получается “нарисовать” поворотами головы полный трёхосевой эллипсоид, получается только небольшой его сегмент. Из-за этого в алгоритме аппроксимации эллипсоида происходил сбой (часто получалась матрица, не имеющая собственных значений "eigenvalues" и собственных векторов "eigenvectors", по которой невозможно рассчитать матрицу трансформации эллипсоида в сферу).

Но не всё потеряно! Если покопаться в исходниках первоисточника Razor AHRS v1.4.2 , то найдём там интересный файл ellipsoid_fit.m

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

В версии калибратора [20191019] используются все эти способы и ещё несколько их модификаций, всего 9 вариантов аппроксимации. После завершения измерений, калибратором проверяются все 9 алгоритмов и выбирается тот вариант, который даёт лучший результат, то есть минимальное значение Rmax/Rmin. Получить в результате калибровки значение Rmax/Rmin: NAN стало почти невероятным.

Теперь, в версии [20191019], калибровка магнитометра “на голове” не только возможна, но и предпочтительна.


Калибровка магнитометра на голове

В версии [20191019] порядок калибровки магнитометра следующий:

  • Перед калибровкой датчик с магнитометром должен быть окончательно закреплён на оголовье наушников.

  • Перед калибровкой нужно надеть наушники и сесть в кресло перед компьютером так, чтобы голова находилась в той точке пространства, где она будет находиться во время игры.

  • В калибраторе нужно переключиться в режим [ Calibr Magn ] и нажать кнопку [ Start ].

  • Процесс калибровки начался, теперь нужно покачивать и поворачивать голову по всем трём осям, как будто вы разминаете шею, не забывая поворачивать голову влево и вправо. Спешить и выворачивать шею не нужно, достаточно тех углов, на которые будет поворачиваться голова во время игры (Всё же крутить головой и изгибать шею подряд целых 200 секунд совсем не просто, поэтому, если уже новых точек практически не появляется, можно остановить калибровку кнопкой [ Stop ] ).

  • Теперь запишите результаты измерений в файл *.fltM кнопкой [ OK ].


Калибратор перебрал все варианты калибровки и выбрал лучший вариант по минимальному коэффициенту Rmax/Rmin. У меня на экране после калибровки получилось вот что:

Видно, что у меня не хватило терпения на 200 секунд, я нажал [ Stop ] на 41-й секунде, получив 2047 точек, затем фильтр [[v] Filter all ] отбросил лишние точки, и осталось всего 957 точек. Несмотря на то, что на экране вместо эллипсоида из сиреневых точек получился только небольшой сегмент эллипсоида, калибровка оказалась, как обычно, удачной. Коэффициент Rmax/Rmin получился равным 1,093. Величина вектора магнитометра |Mag st| при любом положении датчика находится в диапазоне 0,95...1,05.

Также в этой версии калибратора виден сиреневый полупрозрачный эллипсоид, который был рассчитан калибратором по измеренным точкам (если установлена галка [[v] Input] ). Видим, что сиреневые точки лежат на поверхности полупрозрачного эллипсоида. Сиреневый вектор показывает центр этого эллипсоида.

Теперь нужно записать результаты калибровки в Ардуино: [ Arduino... ], [Write Arduino... ], [ OK ].

В заключение я переключился в режим [ OpenTrack ] и проверил, что “пружина по Yaw” отсутствует. Датчик при проверке должен находиться на голове, то есть там же, где и во время калибровки.

Итак, “пружина по Yaw” ликвидирована.

На этом калибровка магнитометра завершена.


Калибровка сенсоров