insfilterNonholonomic

Оцените положение с неголономными ограничениями

Описание

insfilterNonholonomic возразите cочетанию датчиков реализаций инерциального измерительного блока (IMU) и данных о GPS, чтобы оценить положение в NED (или ENU) система координат. Данные IMU выведены из данных об акселерометре и гироскопа. Фильтр использует вектор состояния с 16 элементами, чтобы отследить кватернион ориентации, скорость, положение и смещения датчика IMU. insfilterNonholonomic возразите использует расширенный Фильтр Калмана, чтобы оценить эти количества.

Создание

Описание

пример

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

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

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

Свойства

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

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

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

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

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

Фактор децимации для кинематической ограничительной коррекции в виде положительного целочисленного скаляра.

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

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

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

  • Если GyroscopeNoise задан как скаляр, один элемент применяется к x, y и осям z гироскопа.

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

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

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

  • Если GyroscopeBiasNoise задан как скаляр, один элемент применяется к x, y и осям z гироскопа.

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

Фактор затухания для гироскопа смещает в виде скаляра в области значений [0,1]. Фактор затухания 0 гироскоп моделей смещает как процесс белого шума. Фактор затухания 1 моделирует смещение гироскопа как случайный процесс обхода.

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

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

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

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

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

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

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

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

Фактор затухания для акселерометра смещает в виде скаляра в области значений [0,1]. Фактор затухания 0 акселерометр моделей смещает как процесс белого шума. Фактор затухания 1 моделирует смещение акселерометра как случайный процесс обхода.

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

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

СостояниеМодулиИндекс
Ориентация (части кватерниона)N/A1:4
Смещение гироскопа (XYZ)рад/с5:7
Положение (NED или ENU)m8:10
Скорость (NED или ENU)m/s11:13
Смещение акселерометра (XYZ)m/s214:16

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

Ошибочная ковариация состояния для расширенного Фильтра Калмана в виде 16 16 матрицами элемента или вещественные числа.

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

Скоростной ограничительный шум в (m/s)2В виде неотрицательного скаляра.

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

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

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

Примеры

свернуть все

В этом примере показано, как оценить положение наземного транспортного средства от регистрируемого IMU и измерений датчика GPS и ориентации основной истины и положения.

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

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

Инициализируйте insfilterNonholonomic объект.

filt = insfilterNonholonomic;
filt.IMUSampleRate = imuFs;
filt.ReferenceLocation = localOrigin;
filt.State = initialState;
filt.StateCovariance = initialStateCovariance;
    
imuSamplesPerGPS = imuFs/gpsFs;

Данные логов для итогового метрического расчета. Используйте predict возразите функции, чтобы оценить состояние фильтра на основе данных о гироскопе и акселерометра. Затем откорректируйте состояние фильтра согласно данным о GPS.

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

for idx = 1:numIMUSamples
    predict(filt,accelData(idx,:),gyroData(idx,:));       %Predict filter state
    
    if (mod(idx,imuSamplesPerGPS) == 0)                   %Correct filter state
        fusegps(filt,gpsLLA(gpsIdx,:),Rpos,gpsVel(gpsIdx,:),Rvel);
        gpsIdx = gpsIdx + 1;
    end
    
    [estPos(idx,:),estOrient(idx,:)] = pose(filt);        %Log estimated pose
end

Вычислите и отобразите ошибки RMS.

posd = estPos - truePos;
quatd = rad2deg(dist(estOrient,trueOrient));
msep = sqrt(mean(posd.^2));

fprintf('Position RMS Error\n\tX: %.2f, Y: %.2f, Z: %.2f (meters)\n\n',msep(1),msep(2),msep(3));   
Position RMS Error
	X: 0.15, Y: 0.11, Z: 0.01 (meters)
    
fprintf('Quaternion Distance RMS Error\n\t%.2f (degrees)\n\n',sqrt(mean(quatd.^2)));
Quaternion Distance RMS Error
	0.26 (degrees)

Алгоритмы

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

insfilterNonholonomic использует структуру Фильтра Калмана состояния ошибки с 16 осями, чтобы оценить положение в системе координат NED. Состояние задано как:

x=[q0q1q2q3gyrobiasXgyrobiasYgyrobiasZpositionNpositionEpositionDvNvEvDaccelbiasXaccelbiasYaccelbiasZ]

где

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

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

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

  • ν N, ν E, ν D – Скорость платформы в локальной системе координат NED.

  • accelbias X, accelbias Y, accelbias Z – Сместите в чтении акселерометра.

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

xk|k−1=f(x^k−1|k−1)

предсказанная оценка состояния:

xk|k−1=[q0+Δt∗q1(gyrobiasX/2−gyroX/2)+Δt∗q2∗(gyrobiasY/2−gyroY/2)+Δt∗q3∗(gyrobiasZ/2−gyroZ/2)q1−Δt∗q0(gyrobiasX/2−gyroX/2)+Δt∗q3∗(gyrobiasY/2−gyroY/2)−Δt∗q2∗(gyrobiasZ/2−gyroZ/2)q2−Δt∗q3(gyrobiasX/2−gyroX/2)−Δt∗q0∗(gyrobiasY/2−gyroY/2)+Δt∗q1∗(gyrobiasZ/2−gyroZ/2)q3+Δt∗q2(gyrobiasX/2−gyroX/2)−Δt∗q1∗(gyrobiasY/2−gyroY/2)−Δt∗q0∗(gyrobiasZ/2−gyroZ/2)−gryobiasX∗(Δt∗λgyro−1)−gryobiasY∗(Δt∗λgyro−1)−gryobiasZ∗(Δt∗λgyro−1)positionN+Δt∗vNpositionE+Δt∗vEpositionD+Δt∗vDvN+Δt∗{q0∗(q0∗(accelbiasX−accelX)−q3∗(accelbiasY−accelY)+q2∗(accelbiasZ−accelZ))−gN+q2∗(q1∗(accelbiasY−accelY)−q2∗(accelbiasX−accelX)+q0∗(accelbiasZ−accelZ))+q1∗(q1∗(accelbiasX−accelX)+q2∗(accelbiasY−accelY)+q3∗(accelbiasZ−accelZ))−q3∗(q3∗(accelbiasX−accelX)+q0∗(accelbiasY−accelY)−q1∗(accelbiasZ−accelZ))}vE+Δt∗{q0∗(q3∗(accelbiasX−accelX)+q0∗(accelbiasY−accelY)−q1∗(accelbiasZ−accelZ))−gE−q1∗(q1∗(accelbiasY−accelY)−q2∗(accelbiasX−accelX)+q0∗(accelbiasZ−accelZ))+q2∗(q1∗(accelbiasX−accelX)+q2∗(accelbiasY−accelY)+q3∗(accelbiasZ−accelZ))+q3∗(q0∗(accelbiasX−accelX)−q3∗(accelbiasY−accelY)+q2∗(accelbiasZ−accelZ))}vD+Δt∗{q0∗(q1∗(accelbiasY−accelY)−q2∗(accelbiasX−accelX)+q0∗(accelbiasZ−accelZ))−gD+q1∗(q3∗(accelbiasX−accelX)+q0∗(accelbiasY−accelY)−q1∗(accelbiasZ−accelZ))−q2∗(q0∗(accelbiasX−accelX)−q3∗(accelbiasY−accelY)+q2∗(accelbiasZ−accelZ))+q3∗(q1∗(accelbiasX−accelX)+q2∗(accelbiasY−accelY)+q3∗(accelbiasZ−accelZ))}−accelbiasX∗(Δt∗λaccel−1)−accelbiasY∗(Δt∗λaccel−1)−accelbiasZ∗(Δt∗λaccel−1)]

где

  • Δt – Шаг расчета IMU.

  • g N, g E, g D – Постоянный вектор силы тяжести в системе координат NED.

  • accel X, accel Y, accel Z – Ускоряющий вектор в системе координат тела.

  • λ accel – Смещение акселерометра затухает фактор.

  • λ gyro – Смещение гироскопа затухает фактор.

Ссылки

[1] Munguía, R. "Помогшая GPS Инерционная Система навигации в Прямой Настройке". Журнал прикладного исследования и технологии. Издание 12, Номер 4, 2014, стр 803 – 814.

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

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

Смотрите также

| |

Введенный в R2018b