Магнитометры обнаруживают силу магнитного поля вдоль 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'
, производит лучшую подгонку и покрывает большинство случаев.