exponenta event banner

ahrs10filter

Высота и ориентация по показаниям МАРГ и высотомера

Описание

ahrs10filter объект плавит данные датчика MARG и высотомера для оценки высоты и ориентации устройства. Данные MARG (магнитная, угловая скорость, сила тяжести) обычно получают из датчиков магнитометра, гироскопа и акселерометра. Фильтр использует 18-элементный вектор состояния для отслеживания кватерниона ориентации, вертикальной скорости, вертикального положения, смещений датчика MARG и геомагнитного вектора. ahrs10filter объект использует расширенный фильтр Калмана для оценки этих величин.

Создание

Описание

FUSE = ahrs10filter возвращает расширенный объект фильтра Калмана, FUSE, для слияния датчиков показаний MARG и высотомера для оценки высоты и ориентации устройства.

FUSE = ahrs10filter('ReferenceFrame',RF) возвращает расширенный объект фильтра Калмана, который оценивает высоту и ориентацию устройства относительно опорного кадра RF. Укажите RF как 'NED' (Север-Восток-вниз) или 'ENU' (Восток-Север-Вверх). Значение по умолчанию: 'NED'.

пример

FUSE = ahrs10filter(___,Name,Value) задает каждое свойство Name к указанному Value. Неопределенные свойства имеют значения по умолчанию.

Свойства

развернуть все

Частота дискретизации IMU в Гц, заданная как положительный скаляр.

Типы данных: single | double

Мультипликативная дисперсия шума процесса от гироскопа в (рад/с) 2, заданная как положительные действительные конечные числа.

Типы данных: single | double

Мультипликативная дисперсия шума процесса от акселерометра в (m/s2) 2, заданная как положительные действительные конечные числа.

Типы данных: single | double

Мультипликативная дисперсия шума процесса от смещения гироскопа в (рад/с2) 2, заданная как положительные действительные конечные числа.

Типы данных: single | double

Мультипликативная дисперсия шума процесса от смещения акселерометра в (m/s2) 2, заданная как положительные действительные конечные числа.

Типы данных: single | double

Аддитивный технологический шум для геомагнитного вектора в μT2, определяемый как положительные действительные конечные числа.

Типы данных: single | double

Аддитивный технологический шум для смещения магнитометра в μT2, определяемый как положительные действительные конечные числа.

Типы данных: single | double

Вектор состояния расширенного фильтра Калмана. Значения состояния представляют:

ГосударствоЕдиницыИндекс
Ориентация (части кватерниона)Н/Д1:4
Высота над уровнем моря (NED или RUS)m5
Вертикальная скорость (NED или RUS)м/с6
Смещение по дельта-углу (XYZ)рад/с7:9
Смещение дельта-скорости (XYZ)м/с10:12
Вектор геомагнитного поля (NED или RUS)μT13:15
Смещение магнитометра (XYZ)μT16:18

Исходное состояние по умолчанию соответствует объекту в состоянии покоя, расположенному в [0 0 0] в геодезических координатах ЛЛА.

Типы данных: single | double

Ковариация ошибок состояния для фильтра Калмана, заданная как матрица вещественных чисел 18 на 18 элементов.

Типы данных: single | double

Функции объекта

predictОбновление состояний с использованием данных акселерометра и гироскопа для ahrs10filter
fusemagКорректные состояния с использованием данных магнитометра для ahrs10filter
fusealtimeterКорректные состояния с использованием данных высотомера для ahrs10filter
correctКорректные состояния с использованием прямых измерений состояния для ahrs10filter
residualОстатки и остаточные ковариации от прямых измерений состояния для ahrs10filter
residualmagОстатки и остаточная ковариация измерений магнитометра для ahrs10filter
residualaltimeterОстатки и остаточная ковариация измерений высотомера для ahrs10filter
poseТекущая ориентация и оценка положения для ahrs10filter
resetСброс внутренних состояний для ahrs10filter
stateinfoОтображение информации о векторе состояния для ahrs10filter
tuneМелодия ahrs10filter параметры для уменьшения ошибки оценки
copyСоздать копию ahrs10filter

Примеры

свернуть все

Загрузить записанные данные датчика, позу истинности земли, а также ковариацию начального состояния и исходного состояния. Вычислите количество образцов IMU на образец высотомера и количество образцов IMU на образец магнитометра.

load('fuse10exampledata.mat', ...
     'imuFs','accelData','gyroData', ...
     'magnetometerFs','magData', ...
     'altimeterFs','altData', ...
     'expectedHeight','expectedOrient', ...
     'initstate','initcov');

imuSamplesPerAlt = fix(imuFs/altimeterFs);
imuSamplesPerMag = fix(imuFs/magnetometerFs);

Создайте фильтр AHRS, который сплавляет показания MARG и высотомера для оценки высоты и ориентации. Установите частоту отбора проб и измерительные шумы датчиков. Значения определяли по листам данных и экспериментам.

filt = ahrs10filter('IMUSampleRate',imuFs, ...
                    'AccelerometerNoise',0.1, ...
                    'State',initstate, ...
                    'StateCovariance',initcov);

Ralt = 0.24;
Rmag = 0.9;

Предварительно распределить переменные по высоте и ориентации журнала.

numIMUSamples = size(accelData,1);
estHeight = zeros(numIMUSamples,1);
estOrient = zeros(numIMUSamples,1,'quaternion');

Плавкий акселерометр, гироскоп, магнитометр и данные высотомера. Внешняя петля предсказывает фильтр вперед на уровне самой быстрой частоты дискретизации (частота дискретизации IMU).

for ii = 1:numIMUSamples
    
    % Use predict to estimate the filter state based on the accelometer and
    % gyroscope data.
    predict(filt,accelData(ii,:),gyroData(ii,:));
    
    % Magnetometer data is collected at a lower rate than IMU data. Fuse
    % magnetometer data at the lower rate.
    if ~mod(ii,imuSamplesPerMag)
        fusemag(filt,magData(ii,:),Rmag);
    end
    
    % Altimeter data is collected at a lower rate than IMU data. Fuse
    % altimeter data at the lower rate.
    if ~mod(ii, imuSamplesPerAlt)
        fusealtimeter(filt,altData(ii),Ralt);
    end
    
    % Log the current height and orientation estimate.
    [estHeight(ii),estOrient(ii)] = pose(filt);
end

Вычислите среднеквадратичные ошибки между известной истинной высотой и ориентацией и выходными данными фильтра AHRS.

pErr = expectedHeight - estHeight;
qErr = rad2deg(dist(expectedOrient,estOrient));

pRMS = sqrt(mean(pErr.^2));
qRMS = sqrt(mean(qErr.^2));

fprintf('Altitude RMS Error\n');
Altitude RMS Error
fprintf('\t%.2f (meters)\n\n',pRMS);
	0.38 (meters)

Визуализация истинной и расчетной высоты с течением времени.

t = (0:(numIMUSamples-1))/imuFs;
plot(t,expectedHeight);hold on
plot(t,estHeight);hold off
legend('Ground Truth','Estimated Height','location','best')
ylabel('Height (m)')
xlabel('Time (s)')
grid on

Figure contains an axes. The axes contains 2 objects of type line. These objects represent Ground Truth, Estimated Height.


fprintf('Quaternion Distance RMS Error\n');
Quaternion Distance RMS Error
fprintf('\t%.2f (degrees)\n\n',qRMS);
	2.93 (degrees)

Расширенные возможности

Создание кода C/C + +
Создайте код C и C++ с помощью MATLAB ® Coder™

.

См. также

|

Представлен в R2019a