insfilterErrorState

Оценка положения по данным БИНС, GPS и монокулярной визуальной одометрии (MVO)

Описание

The insfilterErrorState реализует комплексирование датчиков данных БИНС, GPS и монокулярной визуальной одометрии (MVO) для оценки положения в опорной системе координат NED (или ENU). Для отслеживания ориентации фильтр использует вектор состояния с 17 элементами quaternion, скорость, положение, смещения датчика БИНС и масштабный коэффициент MVO. The insfilterErrorState объект использует фильтр Калмана состояния ошибки, чтобы оценить эти величины.

Создание

Описание

пример

filter = insfilterErrorState создает insfilterErrorState объект со значениями свойств по умолчанию.

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

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

Свойства

расширить все

Частота дискретизации инерциального измерительного блока (IMU) в Гц, заданная как положительная скалярная величина.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Вектор состояния расширенного фильтра Калмана, заданный как 17-элементный вектор-столбец. Значения состояния представляют:

ГосударствоМодулиИндекс
Ориентация (кватернионные части)Н/Д1:4
Положение (NED или ENU)m5:7
Скорость (NED или ENU)м/с8:10
Смещение гироскопа (XYZ)рад/с11:13
Смещение акселерометра (XYZ)м/с214:16
Шкала визуальной одометрии (XYZ)Н/Д17

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

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

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

Ковариация государстваИндекс строка/столбец
α Вектор Вращения (XYZ)1:3
β Положение (NED или ENU)4:6
β Скорость (NED или ENU)7:9
β Смещение гироскопа (XYZ)10:12
β Смещение акселерометра (XYZ)13:15
β Шкала визуальной одометрии (XYZ)16

Обратите внимание, что поскольку это фильтр Калмана с состоянием ошибки, он отслеживает ошибки в состояниях. .rпредставляет ошибку в соответствующем состоянии.

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

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

predictОбновите состояния, используя данные акселерометра и гироскопа для insfilterErrorState
correctИсправьте состояния, используя прямые измерения состояния для insfilterErrorState
residualНевязки и остаточные ковариации от прямых измерений состояния для insfilterErrorState
fusegpsИсправьте состояния, используя данные GPS для insfilterErrorState
residualgpsНевязки и остаточная ковариация от измерений для insfilterErrorState
fusemvoИсправьте состояния, используя монокулярную визуальную одометрию для insfilterErrorState
residualmvoНевязки и остаточная ковариация из монокулярных измерений визуальной одометрии для insfilterErrorState
poseТекущая ориентация и оценка положения для insfilterErrorState
resetСбросьте внутренние состояния для insfilterErrorState
stateinfoОтобразите информацию о векторе состояния для insfilterErrorState
tuneНастройка insfilterErrorState параметры для уменьшения ошибки расчета
copyСоздание копии insfilterErrorState

Примеры

свернуть все

Загрузка записанных данных наземного транспортного средства по круговой траектории. The .mat файл содержит измерения БИНС и GPS-датчика и ориентацию и положение основной истины.

load('loggedGroundVehicleCircle.mat', ...
    'imuFs','localOrigin', ...
    'initialStateCovariance', ...
    'accelData','gyroData', ...
    'gpsFs','gpsLLA','Rpos','gpsVel','Rvel', ...
    'trueOrient','truePos');

Создайте фильтр INS, чтобы сплавить данные IMU и GPS с помощью фильтра Калмана с ошибкой.

initialState = [compact(trueOrient(1)),truePos(1,:),-6.8e-3,2.5002,0,zeros(1,6),1].';
filt = insfilterErrorState;
filt.IMUSampleRate = imuFs;
filt.ReferenceLocation = localOrigin;
filt.State = initialState;
filt.StateCovariance = initialStateCovariance;

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

numIMUSamples = size(accelData,1);
estOrient = ones(numIMUSamples,1,'quaternion');
estPos = zeros(numIMUSamples,3);

gpsIdx = 1;

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

for idx = 1:numIMUSamples

    % Use predict to estimate the filter state based on the accelData and
    % gyroData arrays.
    predict(filt,accelData(idx,:),gyroData(idx,:));
    
    % GPS data is collected at a lower sample rate than IMU data. Fuse GPS
    % data at the lower rate.
    if mod(idx, imuFs / gpsFs) == 0
        % Correct the filter states based on the GPS data.
        fusegps(filt,gpsLLA(gpsIdx,:),Rpos,gpsVel(gpsIdx,:),Rvel);
        gpsIdx = gpsIdx + 1;
    end
    
    % Log the current pose estimate
    [estPos(idx,:), estOrient(idx,:)] = pose(filt);
end

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

pErr = truePos - estPos;
qErr = rad2deg(dist(estOrient,trueOrient));

pRMS = sqrt(mean(pErr.^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.40, Y: 0.24, Z: 0.05 (meters)
fprintf('Quaternion Distance RMS Error\n');
Quaternion Distance RMS Error
fprintf('\t%.2f (degrees)\n\n',qRMS);
	0.30 (degrees)

Визуализируйте истинное положение и предполагаемое положение.

plot(truePos(:,1),truePos(:,2),estPos(:,1),estPos(:,2),'r:','LineWidth',2)
grid on
axis square
xlabel('N (m)')
ylabel('E (m)')
legend('Ground Truth','Estimation')

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

Алгоритмы

Примечание: Следующий алгоритм применяется только к опорной системе координат NED.

insfilterErrorState использует 17-осевое состояние ошибки структуры фильтра Калмана, чтобы оценить положение в опорной системе координат NED. Состояние определяется как:

x=[q0q1q2q3positionNpositionEpositionDvNvEvDgyrobiasXgyrobiasYgyrobiasZaccelbiasXaccelbiasYaccelbiasZscaleFactor]

где

  • q 0, q 1, q 2, q 3 -- Части ориентационного кватерниона. Кватернион ориентации представляет поворот системы координат от текущей ориентации платформы к локальной системе координат NED.

  • position N, position E, position D -- Положение платформы в локальной системе координат NED.

  • gyrobias X, gyrobias Y gyrobias Z -- Смещение в считывании гироскопа.

  • accelbias X, accelbias Y accelbias Z -- Смещение в показаниях акселерометра.

  • scaleFactor - Масштабный коэффициент оценки положения.

Учитывая обычную формулировку функции перехода состояния,

xk|k1=f(x^k1|k1)

прогнозируемая оценка состояния:

xk|k1=[q0+Δtq1(gyrobiasX/2gyroX/2)+Δtq2(gyrobiasY/2gyroY/2)+Δtq3(gyrobiasZ/2gyroZ/2)q1Δtq0(gyrobiasX/2gyroX/2)+Δtq3(gyrobiasY/2gyroY/2)Δtq2(gyrobiasZ/2gyroZ/2)q2Δtq3(gyrobiasX/2gyroX/2)Δtq0(gyrobiasY/2gyroY/2)+Δtq1(gyrobiasZ/2gyroZ/2)q3+Δtq2(gyrobiasX/2gyroX/2)Δtq1(gyrobiasY/2gyroY/2)Δtq0(gyrobiasZ/2gyroZ/2)positionN+ΔtvNpositionE+ΔtvEpositionD+ΔtvDvNΔt{q0(q0(accelbiasXaccelX)q3(accelbiasYaccelY)+q2(accelbiasZaccelZ))+gN+q2(q1(accelbiasYaccelY)q2(accelbiasXaccelX)+q0(accelbiasZaccelZ))+q1(q1(accelbiasXaccelX)+q2(accelbiasYaccelY)+q3(accelbiasZaccelZ))q3(q3(accelbiasXaccelX)+q0(accelbiasYaccelY)q1(accelbiasZaccelZ))}vEΔt{q0(q3(accelbiasXaccelX)+q0(accelbiasYaccelY)q1(accelbiasZaccelZ))+gEq1(q1(accelbiasYaccelY)q2(accelbiasXaccelX)+q0(accelbiasZaccelZ))+q2(q1(accelbiasXaccelX)+q2(accelbiasYaccelY)+q3(accelbiasZaccelZ))+q3(q0(accelbiasXaccelX)q3(accelbiasYaccelY)+q2(accelbiasZaccelZ))}vDΔt{q0(q1(accelbiasYaccelY)q2(accelbiasXaccelX)+q0(accelbiasZaccelZ))+gD+q1(q3(accelbiasXaccelX)+q0(accelbiasYaccelY)q1(accelbiasZaccelZ))q2(q0(accelbiasXaccelX)q3(accelbiasYaccelY)+q2(accelbiasZaccelZ))q3(q1(accelbiasXaccelX)+q2(accelbiasYaccelY)+q3(accelbiasZaccelZ))}gyrobiasXgyrobiasYgyrobiasZaccelbiasXaccelbiasYaccelbiasZscaleFactor]

где

  • И t -- шаг расчета БИНС.

  • g N, g E, g D - Вектор постоянной гравитации в системе координат.

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

Генерация кода C/C + +
Сгенерируйте код C и C++ с помощью Coder™ MATLAB ®

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