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

Магнитометры обнаруживают силу магнитного поля вдоль X датчика, Y и осей Z. Точные измерения магнитного поля важны для cочетания датчиков и намерения направиться и ориентация.

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

Идеальные магнитометры

Идеальный магнитометр с тремя осями измеряет силу магнитного поля вдоль ортогонального X, Y и осей Z. Отсутствующий любая магнитная интерференция, показания магнитометра измеряют магнитное поле Земли. Если измерения магнитометра проведены, когда датчик вращается посредством всех возможных ориентаций, измерения должны лечь на сферу. Радиус сферы является силой магнитного поля.

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

N = 500;
rng(1);
acc = zeros(N,3);
av = zeros(N,3);
q = randrot(N,1); % uniformly distributed random rotations
imu = imuSensor('accel-mag');
[~,x] = imu(acc,av,q);
scatter3(x(:,1),x(:,2),x(:,3));
axis equal
title('Ideal Magnetometer Data');

Трудные железные эффекты

Источники шума и производственные дефекты ухудшают измерение магнитометра. Самыми поразительными из них являются трудные железные эффекты. Трудные железные эффекты являются стационарными вмешивающимися магнитными источниками шума. Часто, они прибывают из других металлических объектов на печатной плате с магнитометром. Трудные железные эффекты переключают источник идеальной сферы.

imu.Magnetometer.ConstantBias = [2 10 40];
[~,x] = imu(acc,av,q);
figure;
scatter3(x(:,1),x(:,2),x(:,3));
axis equal
title('Magnetometer Data With a Hard Iron Offset');

Мягкие железные эффекты

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

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

nedmf = imu.MagneticField;
Rsoft = [2.5 0.3 0.5; 0.3 2 .2; 0.5 0.2 3];
soft = rotateframe(conj(q),rotateframe(q,nedmf)*Rsoft);

for ii=1:numel(q)
    imu.MagneticField = soft(ii,:);
    [~,x(ii,:)] = imu(acc(ii,:),av(ii,:),q(ii));
end
figure;
scatter3(x(:,1),x(:,2),x(:,3));
axis equal
title('Magnetometer Data With Hard and Soft Iron Effects');

Метод коррекции

magcal функция может использоваться, чтобы определить калибровочные параметры магнитометра, которые составляют и трудные и мягкие железные эффекты. Некалиброванные данные о магнитометре могут быть смоделированы как лежащий на эллипсоиде уравнением

$$(x - b)R(x-b)^{T} = \beta^2$$

В этом уравнении R 3х3 матрица, b 1 3, вектор, задающий центр эллипсоида, x, 1 3 вектор из некалиброванных измерений магнитометра и$\beta$ является скаляром, указывающим на силу магнитного поля. Вышеупомянутое уравнение является общей формой конического сечения. Для эллипсоида R должен быть положителен определенный. magcal функционируйте использует множество решателей, на основе различных предположений о R. В magcal функция, R может быть принята, чтобы быть единичной матрицей, диагональной матрицей или симметрической матрицей.

magcal функция производит коэффициенты, которые проводят измерения, которые лежат на эллипсоиде смещения и преобразовывают их, чтобы лечь на идеальную сферу, строившую в начале координат. magcal функция возвращает 3х3 действительную матрицу А и 1 3 вектор b. Чтобы откорректировать некалиброванные данные вычисляют

$$m = (x-b)A.$$

Здесь x 1 3, массив некалиброванных измерений магнитометра и m 1 3 массив откорректированных измерений магнитометра, которые лежат на сфере. Матрица А имеет определитель 1 и является матричным квадратным корнем из R. Кроме того, A имеет ту же форму как R: идентичность, диагональ или симметрическая матрица. Поскольку эти виды матриц не могут передать вращение, матрица А не будет вращать данные о магнитометре во время коррекции.

magcal функция также возвращает третий выходной параметр, который является силой магнитного поля$\beta$. Можно использовать силу магнитного поля, чтобы установить ExpectedMagneticFieldStrength свойство ahrsfilter.

Используя magcal Функция

Используйте magcal функция, чтобы определить калибровочные параметры, которые корректируют шумные данные о магнитометре. Создайте шумные данные о магнитометре путем установки NoiseDensity свойство Magnetometer свойство в imuSensor. Используйте вращаемое и расширенное магнитное поле в переменной soft симулировать мягкие железные эффекты.

imu.Magnetometer.NoiseDensity = 0.08;
for ii=1:numel(q)
    imu.MagneticField = soft(ii,:);
    [~,x(ii,:)] = imu(acc(ii,:),av(ii,:),q(ii));
end

Найти A и b параметры, которые лучше всего корректируют некалиброванные данные о магнитометре, просто вызывают функцию как:

[A,b,expMFS]  = magcal(x);
xCorrected = (x-b)*A;

Постройте исходные и исправленные данные. Покажите эллипсоид что лучшие подгонки исходные данные. Покажите сферу, на которой должны лечь исправленные данные.

de = HelperDrawEllipsoid;
de.plotCalibrated(A,b,expMFS,x,xCorrected,'Auto');

magcal функционируйте использует множество решателей, чтобы минимизировать остаточную ошибку. Остаточная ошибка является суммой расстояний между калиброванными данными и сферой радиуса expMFS.

$$E = \frac{1}{2 \beta^2}\sqrt{ \frac{\sum ||(x-b)A||^2 - \beta^2}{N} }$$

r = sum(xCorrected.^2,2) - expMFS.^2;
E = sqrt(r.'*r./N)./(2*expMFS.^2);
fprintf('Residual error in corrected data : %.2f\n\n',E);
Residual error in corrected data : 0.01

Можно запустить отдельные решатели, если только некоторые дефекты должны быть откорректированы или достигнуть более простого расчета коррекции.

Расчет только для смещения

Много магнитометров MEMS имеют регистры в датчике, который может использоваться, чтобы компенсировать трудное железное смещение. В действительности (x-b) фрагмент уравнения выше происходит на борту датчика. Когда только твердая железная компенсация смещения необходима, A матрица эффективно становится единичной матрицей. Определить одну только трудную железную коррекцию, magcal функция может быть вызвана этот путь:

[Aeye,beye,expMFSeye] = magcal(x,'eye');
xEyeCorrected = (x-beye)*Aeye;
[ax1,ax2] = de.plotCalibrated(Aeye,beye,expMFSeye,x,xEyeCorrected,'Eye');
view(ax1,[-1 0 0]);
view(ax2,[-1 0 0]);

Трудный железный расчет масштабирования компенсации и оси

Для многих приложений обрабатывая матрицу эллипсоида, когда диагональная матрица достаточна. Геометрически, это означает, что эллипсоид некалиброванных данных о магнитометре аппроксимирован, чтобы выровнять его полуоси с осями системы координат и центральным смещением от источника. Хотя это вряд ли будет фактическими характеристиками эллипсоида, он уменьшает уравнение коррекции до сингла, умножаются, и один вычитают на ось.

[Adiag,bdiag,expMFSdiag] = magcal(x,'diag');
xDiagCorrected = (x-bdiag)*Adiag;
[ax1,ax2] = de.plotCalibrated(Adiag,bdiag,expMFSdiag,x,xDiagCorrected,...
    'Diag');

Полная твердая и мягкая железная компенсация

Обеспечивать magcal функция, чтобы решить для произвольного эллипсоида и произвести плотный, симметричный A матрица, вызовите функцию как:

[A,b] = magcal(x,'sym');

Автоматическая подгонка

'eye'diag, и 'sym' флаги должны использоваться тщательно и смотревшие выходные значения. В некоторых случаях могут быть недостаточные данные для старшего разряда ('diag' или 'sym') соответствуйте и лучший набор параметров коррекции может быть найден с помощью более простого A матрица. 'auto' подходящая опция, которая является значением по умолчанию, обрабатывает эту ситуацию.

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

xidx = x(:,3) > 100;
xpoor = x(xidx,:);
[Apoor,bpoor,mfspoor] = magcal(xpoor,'diag');

Существует недостаточно данных, распространенных по поверхности эллипсоида, чтобы достигнуть хорошей подгонки и соответствующих калибровочных параметров с 'diag' опция. В результате Apoor матрица является комплексной.

disp(Apoor)
   0.0000 + 0.4722i   0.0000 + 0.0000i   0.0000 + 0.0000i
   0.0000 + 0.0000i   0.0000 + 0.5981i   0.0000 + 0.0000i
   0.0000 + 0.0000i   0.0000 + 0.0000i   3.5407 + 0.0000i

Используя 'auto' подходящая опция избегает этой проблемы и находит более простой A матрица, которая действительна, симметрична, и положительная определенный. Вызов magcal с 'auto' строка опции совпадает с вызовом без любой строки опции.

[Abest,bbest,mfsbest] = magcal(xpoor,'auto');
disp(Abest)
     1     0     0
     0     1     0
     0     0     1

Сравнение результатов использования 'auto' монтер и неправильный, высокого уровня более подходящий показ опасности не исследования возвращенного A матрица прежде, чем откорректировать данные.

de.compareBest(Abest,bbest,mfsbest,Apoor,bpoor,mfspoor,xpoor);

Вызов magcal функция с 'auto' отметьте, который является значением по умолчанию, попробует все возможности 'eye'diag и 'sym' поиск A и b то, которое минимизирует остаточную ошибку, сохраняет A действительный, и гарантирует, что R положителен определенный и симметричный.

Заключение

magcal функция может дать калибровочные параметры, чтобы откорректировать трудные и мягкие железные смещения в магнитометре. Вызывание функции без строки опции, или эквивалентно 'auto' строка опции, производит лучшую подгонку и покрывает большинство случаев.