NHConstrainedIMUGPSFuser

Изложите оценку с неголономными ограничениями

Описание

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

Создание

Создайте NHConstrainedIMUGPSFuser с неголономными ограничениями с помощью insfilter:

filt = insfilter('NonholonomicHeading', true, 'Magnetometer', false);

Свойства

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

Частота дискретизации 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

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

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

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

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

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

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

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

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

correctПравильные состояния с помощью прямых измерений состояния
fusegpsПравильные состояния с помощью данных о GPS
poseТекущая ориентация и оценка положения
predictОбновите состояния с помощью данных о гироскопе и акселерометра
resetСбросьте внутренние состояния
stateinfoОтобразите информацию о векторе состояния

Примеры

свернуть все

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

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

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

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

filt = insfilter('NonholonomicHeading',true,'Magnetometer',false);
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)

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

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

Введенный в R2018b