insfilterAsync

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

Описание

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

predictОбновляйте состояния на основе модели движения для insfilterAsync
fuseaccelИсправьте состояния, используя данные акселерометра для insfilterAsync
fusegyroИсправьте состояния, используя данные гироскопа для insfilterAsync
fusemagИсправьте состояния, используя данные магнитометра для insfilterAsync
fusegpsИсправьте состояния, используя данные GPS для insfilterAsync
correctИсправьте состояния, используя прямые измерения состояния для insfilterAsync
residualНевязки и остаточные ковариации от прямых измерений состояния для insfilterAsync
residualaccelНевязки и остаточная ковариация от измерений акселерометра для insfilterAsync
residualgpsНевязки и остаточная ковариация от измерений для 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. Внешний контур предсказывает фильтр вперед на один временной шаг и запирает данные акселерометра и гироскопа со скоростью дискретизации БИНС.

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

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

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++ с помощью Coder™ MATLAB ®

.
Введенный в R2019a