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

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

В порядке быть полезными для заголовка и вычисления ориентации, типичные недорогие магнитометры 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 может использоваться, чтобы определить калибровочные параметры магнитометра, которые составляют и трудные и мягкие железные эффекты. Некалиброванные данные о магнитометре могут быть смоделированы как лежащий на эллипсоиде с уравнением

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

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

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

Функция magcal также возвращает третий выходной параметр, который является силой магнитного поля. Можно использовать силу магнитного поля, чтобы установить свойство 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.

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.6221i   0.0000 + 0.0000i   0.0000 + 0.0000i
   0.0000 + 0.0000i   0.0000 + 0.7334i   0.0000 + 0.0000i
   0.0000 + 0.0000i   0.0000 + 0.0000i   2.1919 + 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', производит лучшую подгонку и покрывает большинство случаев.