exponenta event banner

insfilterAsync

Оценка позы по асинхронным данным MARG и GPS

Описание

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

Создание

Описание

пример

filter = insfilterAsync создает insfilterAsync объект плавки асинхронных данных MARG и GPS со значениями свойств по умолчанию.

filter = insfilterAsync('ReferenceFrame',RF) позволяет указать опорную рамку, RF, из filter. Определить RF как 'NED' (Север-Восток-вниз) или 'ENU' (Восток-Север-Вверх). Значение по умолчанию: 'NED'.

filter = insfilterAsync(___,Name,Value) также позволяет задать свойства созданного filter с использованием одной или нескольких пар имя-значение. Заключите каждое имя свойства в отдельные кавычки.

Свойства

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

Опорное местоположение, определяемое как вектор трехэлементного ряда в геодезических координатах (широта, долгота и высота). Высота - высота над эталонной эллипсоидной моделью, WGS84. Ссылочные единицы местоположения - [градусы метра].

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

Дисперсия шума аддитивного кватернионного процесса, заданная как скалярный или четырехэлементный вектор частей кватерниона.

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

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

  • Если AngularVelocityNoise - вектор строки, элементы соответствуют шуму в осях x, y и z локальной навигационной системы координат соответственно.

  • Если AngularVelocityNoise является скаляром, один элемент применяется к каждой оси.

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

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

  • Если PositionNoise - вектор строки, элементы соответствуют шуму в осях x, y и z локальной навигационной системы координат соответственно.

  • Если PositionNoise является скаляром, один элемент применяется к каждой оси.

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

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

  • Если VelocityNoise - вектор строки, элементы соответствуют шуму в осях x, y и z локальной навигационной системы координат соответственно.

  • Если VelocityNoise является скаляром, один элемент применяется к каждой оси.

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

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

  • Если AccelerationNoise - вектор строки, элементы соответствуют шуму в осях x, y и z локальной навигационной системы координат соответственно.

  • Если AccelerationNoise является скаляром, один элемент применяется к каждой оси.

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

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

  • Если GyroscopeBiasNoise - вектор строки, элементы соответствуют шуму в осях x, y и z гироскопа соответственно.

  • Если GyroscopeBiasNoise является скаляром, один элемент применяется к каждой оси.

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

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

  • Если AccelerometerBiasNoise - вектор строки, элементы соответствуют шуму в осях x, y и z акселерометра соответственно.

  • Если AccelerometerBiasNoise является скаляром, один элемент применяется к каждой оси.

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

  • Если GeomagneticVectorNoise - вектор строки, элементы соответствуют шуму в осях x, y и z локальной навигационной системы координат соответственно.

  • Если GeomagneticVectorNoise является скаляром, один элемент применяется к каждой оси.

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

  • Если MagnetometerBiasNoise - вектор строки, элементы соответствуют шуму в осях x, y и z магнитометра соответственно.

  • Если MagnetometerBiasNoise является скаляром, один элемент применяется к каждой оси.

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

ГосударствоЕдиницыИндекс
Ориентация (части кватерниона)Н/Д1:4
Угловая скорость (XYZ)рад/с5:7
Положение (NED или RUS)m8:10
Скорость (NED или RUS)м/с11:13
Ускорение (NED или RUS)м/с214:16
Смещение акселерометра (XYZ)м/с217:19
Смещение гироскопа (XYZ)рад/с20:22
Вектор геомагнитного поля (NED или RUS)μT23:25
Смещение магнитометра (XYZ)μT26:28

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

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

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

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

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

predictОбновление состояний на основе модели движения для insfilterAsync
fuseaccelКорректные состояния с использованием данных акселерометра для insfilterAsync
fusegyroКорректные состояния с использованием данных гироскопа для insfilterAsync
fusemagКорректные состояния с использованием данных магнитометра для insfilterAsync
fusegpsКорректные состояния с использованием данных GPS для insfilterAsync
correctКорректные состояния с использованием прямых измерений состояния для insfilterAsync
residualОстатки и остаточные ковариации от прямых измерений состояния для insfilterAsync
residualaccelОстатки и остаточная ковариация от измерений акселерометра для insfilterAsync
residualgpsОстатки и остаточная ковариация измерений GPS для insfilterAsync
residualmagОстатки и остаточная ковариация измерений магнитометра для insfilterAsync
residualgyroОстатки и остаточная ковариация от измерений гироскопа для insfilterAsync
poseТекущее положение, ориентация и оценка скорости для insfilterAsync
resetСброс внутренних состояний для insfilterAsync
stateinfoОтображение информации о векторе состояния для insfilterAsync
copyСоздать копию insfilterAsync
tuneМелодия insfilterAsync параметры для уменьшения ошибки оценки
tunernoiseШумовая структура термоядерного фильтра

Примеры

свернуть все

Загрузить записанные данные датчика и позу истинности земли.

load('uavshort.mat','refloc','initstate','imuFs', ...
    'accel','gyro','mag','lla','gpsvel', ...
    'trueOrient','truePos')

Создайте фильтр INS для слияния асинхронных данных MARG и GPS для оценки позы.

filt = insfilterAsync;
filt.ReferenceLocation = refloc;
filt.State = [initstate(1:4);0;0;0;initstate(5:10);0;0;0;initstate(11:end)];

Определите шумы измерения датчика. Шумы определяли по листам данных и экспериментам.

Rmag  = 80;
Rvel  = 0.0464;
Racc  = 800;
Rgyro = 1e-4;
Rpos  = 34;

Предварительно распределить переменные для положения и ориентации. Выделение переменной для индексирования в данные GPS.

N = size(accel,1);
p = zeros(N,3);
q = zeros(N,1,'quaternion');

gpsIdx = 1;

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

for ii = 1:N
    
    % Predict the filter forward one time step
    predict(filt,1./imuFs);
    
    % Fuse accelerometer and gyroscope readings
    fuseaccel(filt,accel(ii,:),Racc);
    fusegyro(filt,gyro(ii,:),Rgyro);
    
    % Fuse magnetometer at 1/2 the IMU rate
    if ~mod(ii, fix(imuFs/2))
        fusemag(filt,mag(ii,:),Rmag);
    end
    
    % Fuse GPS once per second
    if ~mod(ii,imuFs)
        fusegps(filt,lla(gpsIdx,:),Rpos,gpsvel(gpsIdx,:),Rvel);
        gpsIdx = gpsIdx + 1;
    end
    
    % Log the current pose estimate
    [p(ii,:),q(ii)] = pose(filt);
    
end

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

posErr = truePos - p;
qErr = rad2deg(dist(trueOrient,q));

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

fprintf('Position RMS Error\n');
Position RMS Error
fprintf('\tX: %.2f, Y: %.2f, Z: %.2f (meters)\n\n',pRMS(1),pRMS(2),pRMS(3));
	X: 0.55, Y: 0.71, Z: 0.74 (meters)
fprintf('Quaternion Distance RMS Error\n');
Quaternion Distance RMS Error
fprintf('\t%.2f (degrees)\n\n', qRMS);
	4.72 (degrees)

Визуализация истинного положения и расчетного положения.

plot3(truePos(:,1),truePos(:,2),truePos(:,3),'LineWidth',2)
hold on
plot3(p(:,1),p(:,2),p(:,3),'r:','LineWidth',2)
grid on
xlabel('N (m)')
ylabel('E (m)')
zlabel('D (m)')

Figure contains an axes. The axes contains 2 objects of type line.

Алгоритмы

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

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

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

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