insSensor

Инерционная система навигации и имитационная модель GNSS/GPS

Описание

insSensor Система object™ моделирует устройство, которое плавит измерения от инерционной системы навигации (INS) и глобальной навигационной спутниковой системы (GNSS), такие как GPS, и выводит сплавленные измерения.

Выводить сплавленный INS и измерения GNSS:

  1. Создайте insSensor объект и набор его свойства.

  2. Вызовите объект с аргументами, как будто это была функция.

Чтобы узнать больше, как Системные объекты работают, смотрите то, Что Системные объекты?

Создание

Описание

пример

INS = insSensor возвращает Системный объект, INS, это моделирует устройство что выходные измерения от INS и GNSS.

INS = insSensor(Name,Value) свойства наборов с помощью одной или нескольких пар "имя-значение". Незаданные свойства имеют значения по умолчанию. Заключите каждое имя свойства в кавычки.

Свойства

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

Если в противном случае не обозначено, свойства являются ненастраиваемыми, что означает, что вы не можете изменить их значения после вызова объекта. Объекты блокируют, когда вы вызываете их, и release функция разблокировала их.

Если свойство является настраиваемым, можно изменить его значение в любое время.

Для получения дополнительной информации об изменении значений свойств смотрите Разработку системы в MATLAB Используя Системные объекты.

Местоположение датчика на платформе, в метрах в виде трехэлементного вектора с действительным знаком из формы [x y z]. Вектор задает смещение источника датчика от источника платформы.

Настраиваемый: да

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

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

Roll является вращением вокруг x - ось корпуса датчика. Шум крена моделируется как процесс белого шума. RollAccuracy устанавливает стандартное отклонение шума измерения крена.

Настраиваемый: да

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

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

Pitch является вращением вокруг y - ось корпуса датчика. Шум тангажа моделируется как процесс белого шума. PitchAccuracy задает стандартное отклонение шума измерения тангажа.

Настраиваемый: да

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

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

Yaw является вращением вокруг z - ось корпуса датчика. Шум рыскания моделируется как процесс белого шума. YawAccuracy задает стандартное отклонение шума измерения рыскания.

Настраиваемый: да

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

Точность измерения положения корпуса датчика, в метрах в виде неотрицательного действительного скаляра или трехэлементного вектора с действительным знаком. Элементы вектора устанавливают точность x - y - и z позиционные измерения, соответственно. Если вы задаете PositionAccuracy как скалярное значение, затем объект устанавливает точность всех трех положений к этому значению.

Шум положения моделируется как процесс белого шума. PositionAccuracy задает стандартное отклонение шума измерения положения.

Настраиваемый: да

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

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

Скоростной шум моделируется как процесс белого шума. VelocityAccuracy задает стандартное отклонение скоростного шума измерения.

Настраиваемый: да

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

Точность ускоряющего измерения корпуса датчика, в метрах в секунду в виде неотрицательного действительного скаляра.

Ускоряющий шум моделируется как процесс белого шума. AccelerationAccuracy задает стандартное отклонение ускоряющего шума измерения.

Настраиваемый: да

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

Точность измерения скорости вращения корпуса датчика, в метрах в секунду в виде неотрицательного действительного скаляра.

Скорость вращения моделируется как процесс белого шума. AngularVelocityAccuracy задает стандартное отклонение ускоряющего шума измерения.

Настраиваемый: да

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

Включите вход времени симуляции в виде логического 0 ложь) или 1 TRUE). Установите это свойство на true вводить время симуляции при помощи simTime аргумент.

Настраиваемый: нет

Типы данных: логический

Включите GNSS, фиксируют в виде логического 1 TRUE) или 0 ложь). Установите это свойство на false чтобы симулировать потерю приемника GNSS фиксируют. Когда фиксация приемника GNSS потеряна, дрейф измерений положения на уровне, заданном PositionErrorFactor свойство.

Настраиваемый: да

Зависимости

Чтобы включить это свойство, установите TimeInput к true.

Типы данных: логический

Ошибочный фактор положения без GNSS фиксирует в виде скаляра или 1 3 вектор из скаляров.

Когда HasGNSSFix свойство установлено в false, ошибка положения растет с квадратичной скоростью из-за систематической ошибки в акселерометре. Ошибка положения для компонента положения E (t) может быть описана как E (t) = 1/2αt2, где α является ошибочным фактором положения для соответствующего компонента, и t является временем, поскольку фиксация GNSS потеряна. При выполнении объект вычисляет t на основе simTime входной параметр. Вычисленный E (t) значения для x, y и компонентов z добавляется к соответствующим компонентам положения gTruth входной параметр.

Настраиваемый: да

Зависимости

Чтобы включить это свойство, установите TimeInput к true и HasGNSSFix к false.

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

Источник случайных чисел в виде одной из этих опций:

  • 'Global stream' – Сгенерируйте случайные числа с помощью текущего глобального потока случайных чисел.

  • 'mt19937ar with seed' – Сгенерируйте случайные числа с помощью mt19937ar алгоритма с seed, заданным Seed свойство.

Типы данных: char | string

Начальный seed mt19937ar алгоритма генератора случайных чисел в виде неотрицательного целого числа.

Зависимости

Чтобы включить это свойство, установите RandomStream к 'mt19937ar with seed'.

Типы данных: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

Использование

Описание

пример

measurement = INS(gTruth) моделирует данные, полученные от чтения датчика INS и чтения датчика GNSS. Выходное измерение основано на инерционном состоянии основной истины корпуса датчика, gTruth.

пример

measurement = INS(gTruth,simTime) дополнительно задает время симуляции, simTime. Чтобы включить этот синтаксис, установите TimeInput свойство к true.

Входные параметры

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

Инерционное состояние основной истины корпуса датчика, в локальных Декартовых координатах в виде структуры, содержащей эти поля:

Поле Описание
'Position'

Положение, в метрах в виде действительного, конечного N-by-3 матрица [x y z] векторы. N является количеством отсчетов в текущей системе координат.

'Velocity'

Скорость (v), в метрах в секунду в виде действительного, конечного N-by-3 матрица [v x v y v z] вектор. N является количеством отсчетов в текущей системе координат.

'Orientation'

Ориентация относительно локальной Декартовой системы координат в виде одной из этих опций:

  • N- вектор-столбец элемента quaternion объекты

  • 3 3 N массивом матриц вращения

  • N-by-3 матрица [крен x тангаж y рыскание z] углы в градусах

Каждая матрица кватерниона или вращения является вращением системы координат от локальной Декартовой системы координат до системы координат корпуса датчика тока. N является количеством отсчетов в текущей системе координат.

'Acceleration'

Ускорение (a), в метрах в секунду придало квадратную форму в виде действительного, конечного N-by-3 матрице [a x a y a z] векторы. N является количеством отсчетов в текущей системе координат.

'AngularVelocity'

Скорость вращения (ω), в градусах в секунду в квадрате в виде действительного, конечного N-by-3 матрица [ω x ω y ω z] векторы. N является количеством отсчетов в текущей системе координат.

Значения полей должны иметь тип double или single.

Position, Velocity, и Orientation поля требуются. Другие поля являются дополнительными.

Пример: struct('Position',[0 0 0],'Velocity',[0 0 0],'Orientation',quaternion([1 0 0 0]))

Время симуляции, в секундах в виде неотрицательного действительного скаляра.

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

Выходные аргументы

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

Измерение движения корпуса датчика, в локальных Декартовых координатах, возвратилось как структура, содержащая эти поля:

Поле Описание
'Position'

Положение, в метрах в виде действительного, конечного N-by-3 матрица [x y z] векторы. N является количеством отсчетов в текущей системе координат.

'Velocity'

Скорость (v), в метрах в секунду в виде действительного, конечного N-by-3 матрица [v x v y v z] вектор. N является количеством отсчетов в текущей системе координат.

'Orientation'

Ориентация относительно локальной Декартовой системы координат в виде одной из этих опций:

  • N- вектор-столбец элемента quaternion объекты

  • 3 3 N массивом матриц вращения

  • N-by-3 матрица [крен x тангаж y рыскание z] углы в градусах

Каждая матрица кватерниона или вращения является вращением системы координат от локальной Декартовой системы координат до системы координат корпуса датчика тока. N является количеством отсчетов в текущей системе координат.

'Acceleration'

Ускорение (a), в метрах в секунду придало квадратную форму в виде действительного, конечного N-by-3 матрице [a x a y a z] векторы. N является количеством отсчетов в текущей системе координат.

'AngularVelocity'

Скорость вращения (ω), в градусах в секунду в квадрате в виде действительного, конечного N-by-3 матрица [ω x ω y ω z] векторы. N является количеством отсчетов в текущей системе координат.

Возвращенные значения полей имеют тип double или single и имеют тот же тип как значения соответствующего поля в gTruth входной параметр.

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

Чтобы использовать объектную функцию, задайте Системный объект как первый входной параметр. Например, чтобы выпустить системные ресурсы Системного объекта под названием obj, используйте этот синтаксис:

release(obj)

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

perturbationsВозмущение задано на объекте
perturbПримените возмущения, чтобы возразить
stepЗапустите алгоритм Системного объекта
cloneСоздайте объект дублированной системы
isLockedОпределите, используется ли Системный объект
resetСбросьте внутренние состояния Системного объекта
releaseВысвободите средства и позвольте изменения в значениях свойств Системного объекта и введите характеристики

Примеры

свернуть все

Создайте структуру движения, которая задает стационарное положение на локальном северо-востоке вниз (NED) источник. Поскольку платформа является стационарной, необходимо задать только одну выборку. Примите, что движение основной истины производится в течение 10 секунд с частотой дискретизации на 100 Гц. Создайте insSensor по умолчанию Система object™. Предварительно выделите переменные, чтобы содержать выход от insSensor объект.

Fs = 100;
duration = 10;
numSamples = Fs*duration;

motion = struct( ...
    'Position',zeros(1,3), ...
    'Velocity',zeros(1,3), ...
    'Orientation',ones(1,1,'quaternion'));

INS = insSensor;

positionMeasurements = zeros(numSamples,3);
velocityMeasurements = zeros(numSamples,3);
orientationMeasurements = zeros(numSamples,1,'quaternion');

В цикле вызовите INS со стационарной структурой движения, чтобы возвратить положение, скорость и измерения ориентации в локальной системе координат NED. Регистрируйте положение, скорость и измерения ориентации.

for i = 1:numSamples
    
    measurements = INS(motion);
    
    positionMeasurements(i,:) = measurements.Position;
    velocityMeasurements(i,:) = measurements.Velocity;
    orientationMeasurements(i) = measurements.Orientation;
    
end

Преобразуйте ориентацию от кватернионов до Углов Эйлера в целях визуализации. Стройте положение, скорость и измерения ориентации в зависимости от времени.

orientationMeasurements = eulerd(orientationMeasurements,'ZYX','frame');

t = (0:(numSamples-1))/Fs;

subplot(3,1,1)
plot(t,positionMeasurements)
title('Position')
xlabel('Time (s)')
ylabel('Position (m)')
legend('North','East','Down')

subplot(3,1,2)
plot(t,velocityMeasurements)
title('Velocity')
xlabel('Time (s)')
ylabel('Velocity (m/s)')
legend('North','East','Down')

subplot(3,1,3)
plot(t,orientationMeasurements)
title('Orientation')
xlabel('Time (s)')
ylabel('Rotation (degrees)')
legend('Roll', 'Pitch', 'Yaw')

Figure contains 3 axes objects. Axes object 1 with title Position contains 3 objects of type line. These objects represent North, East, Down. Axes object 2 with title Velocity contains 3 objects of type line. These objects represent North, East, Down. Axes object 3 with title Orientation contains 3 objects of type line. These objects represent Roll, Pitch, Yaw.

Сгенерируйте измерения от датчика INS, который смонтирован к транспортному средству в ведущем сценарии. Постройте измерения INS против состояния основной истины транспортного средства и визуализируйте скорость и ускоряющий профиль транспортного средства.

Создайте ведущий сценарий

Загрузите географические данные для ведущего маршрута в кампусе MathWorks® Apple Hill в Натике, MA.

data = load('ahroute.mat');
latIn = data.latitude;
lonIn = data.longitude;

Преобразуйте координаты широты и долготы маршрута к Декартовым координатам. Установите источник на первую координату в ведущем маршруте. Для простоты примите высоту 0 для маршрута.

alt = 0;
origin = [latIn(1),lonIn(1),alt];
[xEast,yNorth,zUp] = latlon2local(latIn,lonIn,alt,origin);

Создайте ведущий сценарий. Установите источник конвертированного маршрута как географическая контрольная точка.

scenario = drivingScenario('GeoReference',origin);

Создайте дорогу на основе Декартовых координат маршрута.

roadCenters = [xEast,yNorth,zUp];
road(scenario,roadCenters);

Создайте транспортное средство, которое следует за центральной линией дороги. Транспортное средство перемещается между 4 и 5 метрами в секунду (9 - 11 миль в час), замедляющихся в кривых на дороге. Чтобы создать траекторию, используйте smoothTrajectory функция. Вычисленная траектория минимизирует толчок и избегает разрывов на ускорении, которое является требованием для моделирования датчиков INS.

egoVehicle = vehicle(scenario,'ClassID',1);
egoPath = roadCenters;
egoSpeed = [5 5 5 4 4 4 5 4 4 4 4 5 5 5 5 5];
smoothTrajectory(egoVehicle,egoPath,egoSpeed);

Постройте сценарий и покажите 3-D представление из-за автомобиля, оборудованного датчиком.

plot(scenario)
chasePlot(egoVehicle)

Создайте датчик INS

Создайте датчик INS, который принимает вход времен симуляции. Введите шум в измерения датчика путем установки стандартного отклонения измерений скорости и точности к 0,1 и 0.05, соответственно.

INS = insSensor('TimeInput',true, ...
                'VelocityAccuracy',0.1, ...
                'AccelerationAccuracy',0.05);

Визуализируйте измерения INS

Инициализируйте географический проигрыватель для отображения измерений INS и основной истины агента. Сконфигурируйте проигрыватель, чтобы отобразить его последние 10 положений и установить уровень изменения масштаба на 17.

zoomLevel = 17;
player = geoplayer(latIn(1),lonIn(1),zoomLevel, ...
    'HistoryDepth',10,'HistoryStyle','line');

Предварительно выделите место для времен симуляции, скоростных измерений и ускоряющих измерений, которые получены в процессе моделирования.

numWaypoints = length(latIn);
times = zeros(numWaypoints,1);
gTruthVelocities = zeros(numWaypoints,1);
gTruthAccelerations = zeros(numWaypoints,1);
sensorVelocities = zeros(numWaypoints,1);
sensorAccelerations = zeros(numWaypoints,1);

Симулируйте сценарий. Во время цикла симуляции получите состояние основной истины автомобиля, оборудованного датчиком и измерение INS того состояния. Преобразуйте эти показания в географические координаты, и в каждом waypoint, визуализируйте основную истину и показания INS на географическом проигрывателе. Также получите скорость и ускоряющие данные для графического вывода ускоряющие профили и скорость.

nextWaypoint = 2;
while advance(scenario)

    % Obtain ground truth state of ego vehicle.
    gTruth = state(egoVehicle);

    % Obtain INS sensor measurement.
    measurement = INS(gTruth,scenario.SimulationTime);

    % Convert readings to geographic coordinates.
    [latOut,lonOut] = local2latlon(measurement.Position(1), ...
                                   measurement.Position(2), ...
                                   measurement.Position(3),origin);

    % Plot differences between ground truth locations and locations reported by sensor.
    reachedWaypoint = sum(abs(roadCenters(nextWaypoint,:) - gTruth.Position)) < 1;
    if reachedWaypoint
        plotPosition(player,latIn(nextWaypoint),lonIn(nextWaypoint),'TrackID',1)
        plotPosition(player,latOut,lonOut,'TrackID',2,'Label','INS')

        % Capture simulation times, velocities, and accelerations.
        times(nextWaypoint,1) = scenario.SimulationTime;
        gTruthVelocities(nextWaypoint,1) = gTruth.Velocity(2);
        gTruthAccelerations(nextWaypoint,1) = gTruth.Acceleration(2);
        sensorVelocities(nextWaypoint,1) = measurement.Velocity(2);
        sensorAccelerations(nextWaypoint,1) = measurement.Acceleration(2);

        nextWaypoint = nextWaypoint + 1;
    end

    if nextWaypoint > numWaypoints
        break
    end

end

Постройте скоростной профиль

Сравните основную истину продольная скорость транспортного средства в зависимости от времени против скоростных измерений, полученных датчиком INS.

Удалите нули из временного вектора и векторов скорости.

times(times == 0) = [];
gTruthVelocities(gTruthVelocities == 0) = [];
sensorVelocities(sensorVelocities == 0) = [];

figure
hold on
plot(times,gTruthVelocities)
plot(times,sensorVelocities)
title('Longitudinal Velocity Profile')
xlabel('Time (s)')
ylabel('Velocity (m/s)')
legend('Ground truth','INS')
hold off

Постройте ускоряющий профиль

Сравните основную истину продольное ускорение транспортного средства в зависимости от времени против ускоряющих измерений, полученных датчиком INS.

gTruthAccelerations(gTruthAccelerations == 0) = [];
sensorAccelerations(sensorAccelerations == 0) = [];

figure
hold on
plot(times,gTruthAccelerations)
plot(times,sensorAccelerations)
title('Longitudinal Acceleration Profile')
xlabel('Time (s)')
ylabel('Acceleration (m/s^2)')
legend('Ground truth','INS')
hold off

Советы

  • Чтобы получить состояние основной истины агентов в ведущем сценарии, используйте state функция.

  • Датчик сообщает об измерениях в локальной Декартовой системе координат. Чтобы преобразовать эти измерения в географические положения для визуализации на карте, используйте local2latlon функция. Чтобы преобразовать эти данные назад в локальные координаты, используйте latlon2local функция.

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

Введенный в R2021a