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