Ориентация от показаний акселерометра, гироскопа и магнитометра
ahrsfilter Система object™ плавит акселерометр, магнитометр и данные датчика гироскопа для оценки ориентации устройства.
Для оценки ориентации устройства:
Создать ahrsfilter и задайте его свойства.
Вызовите объект с аргументами, как если бы это была функция.
Дополнительные сведения о работе системных объектов см. в разделе Что такое системные объекты?.
возвращает косвенный объект System фильтра Калмана, FUSE = ahrsfilterFUSEдля сенсорного слияния данных акселерометра, гироскопа и магнитометра для оценки ориентации устройства и угловой скорости. Фильтр использует 12-элементный вектор состояния для отслеживания ошибки оценки для ориентации, смещения гироскопа, линейного ускорения и магнитного возмущения.
возвращает объект ahrsfilter System, который сплавляет данные акселерометра, гироскопа и магнитометра для оценки ориентации устройства относительно опорного кадра FUSE = ahrsfilter('ReferenceFrame',RF)RF. Определить RF как 'NED' (Север-Восток-вниз) или 'ENU' (Восток-Север-Вверх). Значением по умолчанию является NED.
задает каждое свойство FUSE = ahrsfilter(___,Name,Value)Name к указанному Value. Неопределенные свойства имеют значения по умолчанию.
Если не указано иное, свойства не настраиваются, что означает невозможность изменения их значений после вызова объекта. Объекты блокируются при их вызове, и release функция разблокирует их.
Если свойство настраивается, его значение можно изменить в любое время.
Дополнительные сведения об изменении значений свойств см. в разделе Проектирование системы в MATLAB с использованием системных объектов.
SampleRate - Частота входных выборок данных датчика (Гц)100 (по умолчанию) | положительный скалярЧастота входных выборок данных датчика в Гц, заданная как положительный скаляр.
Настраиваемый: Нет
Типы данных: single | double
DecimationFactor - Коэффициент прореживания1 (по умолчанию) | положительное целое числоКоэффициент прореживания, на который уменьшают скорость входных данных датчика как часть алгоритма слияния, определяемого как положительное целое число.
Количество строк входных данных - accelReadings, gyroReadings, и magReadings - должно быть кратно коэффициенту прореживания.
Типы данных: single | double
AccelerometerNoise - Дисперсия шума сигнала акселерометра ((м/с2) 2)0.00019247 (по умолчанию) | положительный вещественный скалярДисперсия шума сигнала акселерометра в (m/s2) 2, заданная как положительный действительный скаляр.
Настраиваемый: Да
Типы данных: single | double
MagnetometerNoise - Дисперсия шума сигнала магнитометра (μT2)0.1 (по умолчанию) | положительный вещественный скалярДисперсия шума сигнала магнитометра в μT2, заданная как положительный действительный скаляр.
Настраиваемый: Да
Типы данных: single | double
GyroscopeNoise - Дисперсия шума сигнала гироскопа ((рад/с) 2)9.1385e-5 (по умолчанию) | положительный вещественный скалярДисперсия шума сигнала гироскопа в (рад/с) 2, заданная как положительный действительный скаляр.
Настраиваемый: Да
Типы данных: single | double
GyroscopeDriftNoise - Отклонение смещения гироскопа ((рад/с) 2)3.0462e-13 (по умолчанию) | положительный вещественный скалярДисперсия смещения гироскопа в (рад/с) 2, заданная как положительный действительный скаляр.
Настраиваемый: Да
Типы данных: single | double
LinearAccelerationNoise - Дисперсия шума линейного ускорения (м/с2) 20.0096236 (по умолчанию) | положительный вещественный скалярДисперсия шума линейного ускорения в (m/s2) 2, заданная как положительный действительный скаляр. Линейное ускорение моделируется как процесс белого шума с фильтрацией нижних частот.
Настраиваемый: Да
Типы данных: single | double
LinearAccelerationDecayFactor - Коэффициент затухания для дрейфа линейного ускорения0.5 (по умолчанию) | скаляр в диапазоне [0,1)Коэффициент затухания для дрейфа линейного ускорения, заданный как скаляр в диапазоне [0,1). Если линейное ускорение изменяется быстро, установите LinearAcclerationDecayFactor до меньшего значения. Если линейное ускорение изменяется медленно, установите LinearAcclerationDecayFactor к более высокому значению. Дрейф линейного ускорения моделируется как процесс белого шума с фильтрацией нижних частот.
Настраиваемый: Да
Типы данных: single | double
MagneticDisturbanceNoise - Дисперсия шума магнитного возмущения (μT2)0.5 (по умолчанию) | действительный конечный положительный скалярДисперсия шума магнитного возмущения в μT2, заданная как действительный конечный положительный скаляр.
Настраиваемый: Да
Типы данных: single | double
MagneticDisturbanceDecayFactor - Коэффициент затухания при магнитном возмущении0.5 (по умолчанию) | положительный скаляр в диапазоне [0,1]Коэффициент затухания для магнитного возмущения, определяемый как положительный скаляр в диапазоне [0,1]. Магнитное возмущение моделируется как марковский процесс первого порядка.
Настраиваемый: Да
Типы данных: single | double
InitialProcessNoise - Ковариационная матрица для технологического шумаКовариационная матрица для технологического шума, заданная как матрица 12 на 12. Значение по умолчанию:
Columns 1 through 6
0.000006092348396 0 0 0 0 0
0 0.000006092348396 0 0 0 0
0 0 0.000006092348396 0 0 0
0 0 0 0.000076154354947 0 0
0 0 0 0 0.000076154354947 0
0 0 0 0 0 0.000076154354947
0 0 0 0 0 0
0 0 0 0 0 0
0 0 0 0 0 0
0 0 0 0 0 0
0 0 0 0 0 0
0 0 0 0 0 0
Columns 7 through 12
0 0 0 0 0 0
0 0 0 0 0 0
0 0 0 0 0 0
0 0 0 0 0 0
0 0 0 0 0 0
0 0 0 0 0 0
0.009623610000000 0 0 0 0 0
0 0.009623610000000 0 0 0 0
0 0 0.009623610000000 0 0 0
0 0 0 0.600000000000000 0 0
0 0 0 0 0.600000000000000 0
0 0 0 0 0 0.600000000000000Исходная ковариационная матрица процесса учитывает ошибку в модели процесса.
Типы данных: single | double
ExpectedMagneticFieldStrength - Ожидаемая оценка напряженности магнитного поля (мкТ)50 (по умолчанию) | действительный положительный скалярОжидаемая оценка напряженности магнитного поля в мкТ, заданная как реальный положительный скаляр. Ожидаемая напряженность магнитного поля - оценка напряженности магнитного поля Земли в текущем местоположении.
Настраиваемый: Да
Типы данных: single | double
OrientationFormat - Формат ориентации вывода'quaternion' (по умолчанию) | 'Rotation matrix'Формат ориентации вывода, указанный как 'quaternion' или 'Rotation matrix'. Размер выходных данных зависит от размера входных данных, N и формата ориентации выходных данных:
'quaternion' - Вывод является N-by-1 quaternion.
'Rotation matrix' - Вывод является матрицей ротации 3-by-3-by-N.
Типы данных: char | string
[ плавит акселерометр, гироскоп и данные магнитометра для вычисления измерений ориентации и угловой скорости. Алгоритм предполагает, что устройство неподвижно перед первым вызовом.orientation,angularVelocity] = FUSE(accelReadings,gyroReadings,magReadings)
accelReadings - Показания акселерометра в системе координат корпуса датчика (м/с2)Показания акселерометра в системе координат корпуса датчика в м/с2, указанные в виде матрицы N-by-3. N - количество выборок и три столбца accelReadings представляют измерения [x
y z
]. Предполагается, что показания акселерометра соответствуют частоте выборки, указанной свойством SampleRate.
Типы данных: single | double
gyroReadings - Показания гироскопа в системе координат корпуса датчика (рад/с)Показания гироскопа в системе координат корпуса датчика в рад/с, заданные в виде матрицы N-by-3. N - количество выборок и три столбца gyroReadings представляют
измерения [x y z
]. Предполагается, что показания гироскопа соответствуют частоте выборки, заданной свойством SampleRate.
Типы данных: single | double
magReadings - Показания магнитометра в системе координат корпуса датчика (мкТ)Показания магнитометра в системе координат корпуса датчика в мкТ, указанные в виде матрицы N-by-3. N - количество выборок и три столбца magReadings представляют измерения [x
y z
]. Предполагается, что показания магнитометра соответствуют частоте дискретизации, заданной свойством SampleRate.
Типы данных: single | double
orientation - Ориентация, которая поворачивает величины от локальной навигационной системы координат к системе координат корпуса датчикаОриентация, которая может поворачивать величины из локальной навигационной системы координат в систему координат тела, возвращаемую в виде кватернионов или массива. Размер и тип orientation зависит от того, имеет ли свойство OrientationFormat значение 'quaternion' или 'Rotation matrix':
'quaternion' - выходной сигнал представляет собой M-by-1 вектор кватернионов с тем же базовым типом данных, что и входные данные.
'Rotation matrix' - выходной сигнал представляет собой 3-by-3-by-M массив матриц вращения того же типа данных, что и входные данные.
Число входных выборок, N и свойство DecimationFactor определяют М.
Вы можете использовать orientation в rotateframe функция для поворота величин из локальной навигационной системы в систему координат тела датчика.
Типы данных: quaternion | single | double
angularVelocity - Угловая скорость в системе координат корпуса датчика (рад/с) Угловая скорость с смещением гироскопа, удаленным в системе координат корпуса датчика в рад/с, возвращается в виде матрицы M-by-3. Количество входных выборок, N и DecimationFactor свойство определяет М.
Типы данных: single | double
Чтобы использовать функцию объекта, укажите объект System в качестве первого входного аргумента. Например, для освобождения системных ресурсов объекта System с именем obj, используйте следующий синтаксис:
release(obj)
ahrsfiltertune | Мелодия ahrsfilter параметры для уменьшения ошибки оценки |
ahrsfilterЗагрузить rpy_9axis файл, содержащий записанные данные датчика акселерометра, гироскопа и магнитометра от устройства, колеблющегося по тангажу (вокруг оси y), затем по рысканию (вокруг оси z), а затем по крену (вокруг оси x). Файл также содержит частоту дискретизации записи.
load 'rpy_9axis' sensorData Fs accelerometerReadings = sensorData.Acceleration; gyroscopeReadings = sensorData.AngularVelocity; magnetometerReadings = sensorData.MagneticField;
Создание ahrsfilter object™ системы с SampleRate установите на частоту дискретизации данных датчика. Укажите коэффициент прореживания, равный двум, чтобы снизить вычислительную стоимость алгоритма.
decim = 2; fuse = ahrsfilter('SampleRate',Fs,'DecimationFactor',decim);
Передайте показания акселерометра, гироскопа и магнитометра в ahrsfilter объект, fuseдля вывода оценки ориентации корпуса датчика во времени. По умолчанию ориентация выводится как вектор кватернионов.
q = fuse(accelerometerReadings,gyroscopeReadings,magnetometerReadings);
Ориентация определяется угловым смещением, необходимым для поворота родительской системы координат на дочернюю систему координат. Постройте график ориентации в углах Эйлера в градусах по времени.
ahrsfilter правильно оценивает изменение ориентации с течением времени, включая первоначальную ориентацию на юг.
time = (0:decim:size(accelerometerReadings,1)-1)/Fs; plot(time,eulerd(q,'ZYX','frame')) title('Orientation Estimate') legend('z-axis', 'y-axis', 'x-axis') ylabel('Rotation (degrees)')

ahrsFilterВ этом примере показана производительность ahrsfilterНа object™ системы воздействуют магнитными помехами.
Груз StationaryIMUReadings, который содержит показания акселерометра, магнитометра и гироскопа от стационарного IMU.
load 'StationaryIMUReadings.mat' accelReadings magReadings gyroReadings SampleRate numSamples = size(accelReadings,1);
ahrsfilter использует напряженность магнитного поля для стабилизации его ориентации против предполагаемого постоянного магнитного поля Земли. Однако существует много естественных и искусственных объектов, которые выводят магнитные поля и могут запутать алгоритм. Для учета наличия переходных магнитных полей можно установить MagneticDisturbanceNoise свойство на ahrsfilter объект.
Создание ahrsfilter объект с коэффициентом прореживания, равным 2, и запишите ожидаемую по умолчанию напряженность магнитного поля.
decim = 2; FUSE = ahrsfilter('SampleRate',SampleRate,'DecimationFactor',decim);
Слейте показания IMU с помощью фильтра системы координат положения и курса (AHRS), а затем визуализируйте ориентацию корпуса датчика во времени. Ориентация колеблется в начале и стабилизируется приблизительно через 60 секунд.
orientation = FUSE(accelReadings,gyroReadings,magReadings); orientationEulerAngles = eulerd(orientation,'ZYX','frame'); time = (0:decim:(numSamples-1))'/SampleRate; figure(1) plot(time,orientationEulerAngles(:,1), ... time,orientationEulerAngles(:,2), ... time,orientationEulerAngles(:,3)) xlabel('Time (s)') ylabel('Rotation (degrees)') legend('z-axis','y-axis','x-axis') title('Filtered IMU Data')

Имитация магнитного помех путем добавления переходного сильного магнитного поля к магнитному полю, записанному в magReadings. Визуализируйте заклинивание магнитного поля.
jamStrength = [10,5,2]; startStop = (50*SampleRate):(150*SampleRate); jam = zeros(size(magReadings)); jam(startStop,:) = jamStrength.*ones(numel(startStop),3); magReadings = magReadings + jam; figure(2) plot(time,magReadings(1:decim:end,:)) xlabel('Time (s)') ylabel('Magnetic Field Strength (\mu T)') title('Simulated Magnetic Field with Jamming') legend('z-axis','y-axis','x-axis')

Снова запустите моделирование с помощью magReadings с магнитным заклиниванием. Постройте график результатов и обратите внимание на снижение производительности при оценке ориентации.
reset(FUSE) orientation = FUSE(accelReadings,gyroReadings,magReadings); orientationEulerAngles = eulerd(orientation,'ZYX','frame'); figure(3) plot(time,orientationEulerAngles(:,1), ... time,orientationEulerAngles(:,2), ... time,orientationEulerAngles(:,3)) xlabel('Time (s)') ylabel('Rotation (degrees)') legend('z-axis','y-axis','x-axis') title('Filtered IMU Data with Magnetic Disturbance and Default Properties')

Магнитные помехи были неверно интерпретированы фильтром AHRS, и ориентация корпуса датчика была неверно оценена. Вы можете компенсировать заклинивание, увеличив MagneticDisturbanceNoise собственность. Увеличение MagneticDisturbanceNoise свойство увеличивает предполагаемый диапазон шума для магнитного возмущения, и весь сигнал магнитометра взвешивается меньше в лежащем в основе алгоритме слияния ahrsfilter.
Установите MagneticDisturbanceNoise кому 200 и запустите моделирование еще раз.
Результат оценки ориентации ahrsfilter является более точным и менее подверженным воздействию магнитного переходного процесса. Однако, поскольку сигнал магнитометра взвешивается меньше в лежащем в основе алгоритме слияния, алгоритму может потребоваться больше времени для повторной стабилизации.
reset(FUSE) FUSE.MagneticDisturbanceNoise = 20; orientation = FUSE(accelReadings,gyroReadings,magReadings); orientationEulerAngles = eulerd(orientation,'ZYX','frame'); figure(4) plot(time,orientationEulerAngles(:,1), ... time,orientationEulerAngles(:,2), ... time,orientationEulerAngles(:,3)) xlabel('Time (s)') ylabel('Rotation (degrees)') legend('z-axis','y-axis','x-axis') title('Filtered IMU Data with Magnetic Disturbance and Modified Properties')

В этом примере используется ahrsfilter Система object™ плавить 9-осевые данные IMU от корпуса датчика, который встряхивается. Постройте график расстояния кватерниона между объектом и его конечным положением покоя для визуализации производительности и того, как быстро фильтр сходится в правильное положение покоя. Затем выполните настройку параметров ahrsfilter чтобы фильтр быстрее сходился в положение покоя «земля-истина».
Груз IMUReadingsShaken в текущую рабочую область. Эти данные записывали из IMU, который встряхивали, затем укладывали в положение покоя. Визуализация ускорения, магнитного поля и угловой скорости, регистрируемых датчиками.
load 'IMUReadingsShaken' accelReadings gyroReadings magReadings SampleRate numSamples = size(accelReadings,1); time = (0:(numSamples-1))'/SampleRate; figure(1) subplot(3,1,1) plot(time,accelReadings) title('Accelerometer Reading') ylabel('Acceleration (m/s^2)') subplot(3,1,2) plot(time,magReadings) title('Magnetometer Reading') ylabel('Magnetic Field (\muT)') subplot(3,1,3) plot(time,gyroReadings) title('Gyroscope Reading') ylabel('Angular Velocity (rad/s)') xlabel('Time (s)')

Создание ahrsfilter а затем сплавить данные IMU для определения ориентации. Ориентация возвращается как вектор кватернионов; преобразовать кватернионы в углы Эйлера в градусах. Визуализация ориентации корпуса датчика с течением времени путем построения графика углов Эйлера, необходимых на каждом шаге времени для поворота глобальной системы координат в соответствии с системой координат корпуса датчика.
fuse = ahrsfilter('SampleRate',SampleRate); orientation = fuse(accelReadings,gyroReadings,magReadings); orientationEulerAngles = eulerd(orientation,'ZYX','frame'); figure(2) plot(time,orientationEulerAngles(:,1), ... time,orientationEulerAngles(:,2), ... time,orientationEulerAngles(:,3)) xlabel('Time (s)') ylabel('Rotation (degrees)') title('Orientation over Time') legend('Rotation around z-axis', ... 'Rotation around y-axis', ... 'Rotation around x-axis')

В записи IMU тряска прекращается приблизительно через шесть секунд. Определите ориентацию покоя, чтобы вы могли охарактеризовать, как быстро ahrsfilter сходится.
Чтобы определить ориентацию покоя, рассчитайте средние значения магнитного поля и ускорения за последние четыре секунды, а затем используйте ecompass функция предохранения данных.
Визуализация расстояния кватерниона от положения покоя с течением времени.
restingOrientation = ecompass(mean(accelReadings(6*SampleRate:end,:)), ... mean(magReadings(6*SampleRate:end,:))); figure(3) plot(time,rad2deg(dist(restingOrientation,orientation))) hold on xlabel('Time (s)') ylabel('Quaternion Distance (degrees)')

Изменение значения по умолчанию ahrsfilter свойства, чтобы фильтр быстрее сходился к силе тяжести. Увеличить GyroscopeDriftNoise кому 1e-2 и уменьшить LinearAccelerationNoise кому 1e-4. Это инструктирует ahrsfilter алгоритм для меньшего взвешивания данных гироскопа и больше данных акселерометра. Потому что accelerometer данные обеспечивают стабилизирующий и последовательный вектор гравитации, результирующая ориентация сходится быстрее.
Сбросьте фильтр, слейте данные и постройте график результатов.
fuse.LinearAccelerationNoise = 1e-4; fuse.GyroscopeDriftNoise = 1e-2; reset(fuse) orientation = fuse(accelReadings,gyroReadings,magReadings); figure(3) plot(time,rad2deg(dist(restingOrientation,orientation))) legend('Default AHRS Filter','Tuned AHRS Filter')

Примечание.Следующий алгоритм применяется только к опорному кадру NED.
ahrsfilter использует девятиосную структуру фильтра Калмана, описанную в [1]. Алгоритм пытается отследить ошибки ориентации, смещения гироскопа, линейного ускорения и магнитного возмущения для вывода конечной ориентации и угловой скорости. Вместо непосредственного отслеживания ориентации косвенный фильтр Калмана моделирует процесс ошибок x с рекурсивным обновлением:
− 1dk − 1] + wk
где xk - вектор 12 на 1, состоящий из:
startk -- вектор ошибки ориентации 3 на 1, в градусах, в момент времени k
bk -- вектор смещения нулевой угловой скорости гироскопа 3 на 1, в град/с, в момент времени k
ak -- вектор ошибки ускорения 3 на 1, измеренный в кадре датчика, в g, в момент времени k
dk -- вектор ошибки магнитного возмущения 3 на 1, измеренный в кадре датчика, в мкТ, в момент времени k
и где wk является вектором аддитивного шума 12 на 1, а Fk является моделью перехода состояния.
Поскольку xk определяется как процесс ошибки, априорная оценка всегда равна нулю, и поэтому модель перехода состояния Fk равна нулю. Это понимание приводит к следующему уменьшению стандартных уравнений Калмана:
Стандартные уравнения Калмана:
Sk) − 1xk + = xk − + Kkykpk
Уравнения Калмана, используемые в этом алгоритме:
+ = KkykPk + = Pk − − KkHkPk −
где:
xk − -- прогнозируемая (априорная) оценка состояния; процесс ошибки
Pk − -- предсказанная (априорная) оценка ковариации
yk -- инновации
Sk - инновационная ковариация
Kk -- Kalman gain
xk + -- обновленная (a posteriori) оценка состояния
Pk + -- обновленная (a posteriori) оценка ковариации
k представляет итерацию, верхний индекс + представляет апостериорную оценку, а верхний индекс − представляет априорную оценку.
На рисунке и последующих шагах описывается итерация на основе одного кадра в алгоритме.

Перед первой итерацией accelReadings, gyroReadings, и magReadings входы секционированы в DecimationFactor-на-3 кадра. Для каждого блока алгоритм использует самые текущие показания акселерометра и магнитометра, соответствующие фрагменту показаний гироскопа.
Пройдите по алгоритму для пояснения каждого этапа подробного обзора.

Алгоритм моделирует ускорение и угловое изменение как линейные процессы.

Ориентацию для текущего кадра прогнозируют путем первой оценки углового изменения по сравнению с предыдущим кадром:
gyroOffset1 × 3) fs
где N - коэффициент прореживания, заданный свойством DecimationFactor, а fs - частота дискретизации, заданная свойством SampleRate.
Угловое изменение преобразуется в кватернионы с помощью rotvec
quaternion строительный синтаксис:
rotvec')
Предыдущая оценка ориентации обновляется путем ее поворота на ΔQ:
∏n=1NΔQn)
Во время первой итерации оценка ориентации, q −, инициализируется ecompass.
Вектор гравитации интерпретируется как третий столбец кватерниона, q −, в матричной форме вращения:
(:, 3)) T
Объяснение того, почему третий столбец rPrior можно интерпретировать как вектор гравитации, см. в [1].
Вторую оценку вектора гравитации производят путем вычитания оценки затухшего линейного ускорения предыдущей итерации из показаний акселерометра:
Магнитный вектор Земли оценивается вращением оценки магнитного вектора из предыдущей итерации на априорную оценку ориентации, в матричной форме вращения:
mT)) T

Модель ошибок объединяет два отличия:
Разность между оценкой гравитации по показаниям акселерометра и оценкой гравитации по показаниям гироскопа: gAccel
Разность между оценкой магнитного вектора по показаниям гироскопа и оценкой магнитного вектора по магнитометру: magReadings
Магнитометр правильно оценивает погрешность в оценке магнитного вектора и обнаруживает магнитные помехи.

Вычисляют погрешность магнитного возмущения матричным умножением коэффициента усиления Калмана, связанного с магнитным вектором, на сигнал ошибки:
(z1 × 6) T) T
Коэффициент Калмана K - коэффициент Калмана, вычисленный в текущей итерации.
Магнитное заклинивание определяют путем проверки, что мощность обнаруженного магнитного возмущения меньше или равна четырехкратной мощности ожидаемой напряженности магнитного поля:
2
ExpectedDepectedStartStrength является свойством ahrsfilter.
Уравнения Калмана используют оценку гравитации, полученную из показаний гироскопа, g, оценку магнитного вектора, полученную из показаний гироскопа, mGyro, и наблюдение процесса ошибки, z, для обновления матриц усиления Калмана и промежуточной ковариации. Коэффициент усиления Калмана применяется к сигналу ошибки z для вывода апостериорной оценки ошибки x +.

Модель наблюдения отображает наблюдаемые состояния 1 на 3, g и mGyro, в истинное состояние 6 на 12, Н.
Модель наблюдения строится следующим образом:
где gx, gy и gz - x-, y- и z-элементы вектора гравитации, оцененные по априорной ориентации соответственно. mx, my и mz - x-, y- и z-элементы магнитного вектора, оцененные по априорной ориентации соответственно. δ - константа, определяемая свойствами SampleRate и DecimationFactor: DecimationFactor/SampleRate.
Инновационная ковариация представляет собой матрицу 6 на 6, используемую для отслеживания изменчивости измерений. Инновационную ковариационную матрицу рассчитывают как:
H6x12) T
где
H - матрица модели наблюдения
P − - предсказанная (априорная) оценка ковариации модели наблюдения, вычисленная в предыдущей итерации
R - ковариация шума модели наблюдения, вычисленная как:
где
Гиросвязь Шум)
и
)
Дисперсию шума модели наблюдения определяют следующие свойства:
Ковариация оценки ошибок представляет собой матрицу 12 на 12, используемую для отслеживания изменчивости состояния.
Ковариационная матрица оценки ошибок обновляется следующим образом:
где K - коэффициент усиления Калмана, H - матрица измерения, а P − - ковариация оценки ошибок, вычисленная во время предыдущей итерации.
Ковариация оценки ошибок представляет собой матрицу 12 на 12, используемую для отслеживания изменчивости состояния. Априорная оценка ошибки ковариации, P −, устанавливается на ковариацию шума процесса, Q, определенную во время предыдущей итерации. Q вычисляется как функция ковариации оценки апостериорной ошибки P +. При вычислении Q предполагается, что члены взаимной корреляции ничтожны по сравнению с членами автокорреляции и установлены в нуль:
+ γ000000000000σ2P + (131) + γ000000000000σ2P + (144) + γ]
где
P + - обновленная (a posteriori) ковариация оценки ошибки
β -- Гироскопический шум
start-- Гироссовый шум
start-- Линейная поддержка DecayFactor
start-- Линейный уровень шума
γ -- Шум возмущения
Деривация терминов матрицы ошибок процесса приведена в разделе 10.1 [1].
Матрица усиления Калмана - это матрица 12 на 6, используемая для взвешивания нововведения. В этом алгоритме нововведение интерпретируется как процесс ошибки, z.
Матрица усиления Калмана построена как:
((S6 × 6) T) − 1
где
P − -- предсказанная ковариация ошибки
H -- модель наблюдения
S -- инновационная ковариация
Заднюю оценку погрешности определяют объединением матрицы усиления Калмана с погрешностью в оценках вектора гравитации и магнитного вектора:
(z1 × 6) T
Если в итерации тока обнаружено магнитное заклинивание, сигнал ошибки магнитного вектора игнорируется, и оценка задней ошибки вычисляется как:
3) (zg) T

Оценка ориентации обновляется путем умножения предыдущей оценки на ошибку:
(λ +)
Оценка линейного ускорения обновляется путем затухания оценки линейного ускорения из предыдущей итерации и вычитания ошибки:
где
start-- Линейный коэффициент DecayFactor
Оценка смещения гироскопа обновлена, вычтя ошибку смещения гироскопа из смещения гироскопа от предыдущего повторения:
1 − a +
Для оценки угловой скорости, кадр gyroReadings усредняют и вычитают смещение гироскопа, вычисленное в предыдущей итерации:
где N - коэффициент прореживания, заданный DecimationFactor собственность.
Оценка смещения гироскопа инициализируется в нули для первой итерации.
Если магнитное заклинивание не было обнаружено в итерации тока, оценка магнитного вектора, m, обновляется с использованием апостериорной ошибки магнитного возмущения и апостериорной ориентации.
Погрешность магнитного возмущения преобразуется в навигационный кадр:
mError1 × 3) T) T
Погрешность магнитного возмущения в навигационном кадре вычитают из предыдущей оценки магнитного вектора и затем интерпретируют как наклон:
mErrorNED
Мк1)
Наклон преобразуется в ограниченную оценку магнитного вектора для следующей итерации:
(наклон))
ExpectedDepectedStartStrength является свойством ahrsfilter.
[1] Слияние датчиков с открытым исходным кодом. https://github.com/memsindustrygroup/Open-Source-Sensor-Fusion/tree/master/docs
[2] Роетенберг, Д., Х.Ж. Луинге, К.Т.М. Батен и П.Х. Велтинк. «Компенсация магнитных возмущений улучшает инерционное и магнитное восприятие ориентации сегмента человеческого тела». Сделки IEEE по нейронным системам и инженерии реабилитации. Том 13. Выпуск 3, 2005, стр. 395-405.
Примечания и ограничения по использованию:
См. Системные объекты в создании кода MATLAB (кодер MATLAB).
ecompass | gpsSensor | imufilter | imuSensor | quaternion
Имеется измененная версия этого примера. Открыть этот пример с помощью изменений?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.