exponenta event banner

insSensor

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

Описание

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

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

  1. Создать insSensor и задайте его свойства.

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

Дополнительные сведения о работе системных объектов см. в разделе Что такое системные объекты?.

Создание

Описание

пример

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

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

Свойства

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

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

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

Дополнительные сведения об изменении значений свойств см. в разделе Проектирование системы в MATLAB с использованием системных объектов.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Включить ввод времени моделирования, заданного как логическое 0 (false) или 1 (true). Установить для этого свойства значение true для ввода времени моделирования с помощью simTime аргумент.

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

Типы данных: logical

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

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

Зависимости

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

Типы данных: logical

Коэффициент ошибки положения без исправления GNSS, заданный как скаляр или вектор скаляров 1 на 3.

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

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

Зависимости

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

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

Источник случайных чисел, указанный как один из следующих вариантов:

  • 'Global stream' - Создание случайных чисел с использованием текущего глобального потока случайных чисел.

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

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

Начальное начальное число алгоритма генератора случайных чисел 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 матрица вектора [vx vy vz]. N - количество выборок в текущем кадре.

'Orientation'

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

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

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

  • N-by-3 матрица углов [xroll ypitch zyaw] в градусах

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

'Acceleration'

Ускорение (a), в метрах в секунду в квадрате, заданное как действительная, конечная N-by-3 матрица векторов [ax ay az]. N - количество выборок в текущем кадре.

'AngularVelocity'

Угловая скорость (λ), в метрах в секунду в квадрате, заданная как действительная, конечная N-by-3 матрица векторов [startx ü 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 матрица вектора [vx vy vz]. N - количество выборок в текущем кадре.

'Orientation'

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

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

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

  • N-by-3 матрица углов [xroll ypitch zyaw] в градусах

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

'Acceleration'

Ускорение (a), в метрах в секунду в квадрате, заданное как действительная, конечная N-by-3 матрица векторов [ax ay az]. N - количество выборок в текущем кадре.

'AngularVelocity'

Угловая скорость (λ), в метрах в секунду в квадрате, заданная как действительная, конечная N-by-3 матрица векторов [startx ü y ü z]. N - количество выборок в текущем кадре.

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

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

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

release(obj)

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

perturbationsВозмущение, определенное для объекта
perturbПрименение возмущений к объекту
stepЗапустить алгоритм объекта System
cloneСоздать повторяющийся объект System
isLockedОпределить, используется ли объект System
resetСброс внутренних состояний объекта System
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. Axes 1 with title Position contains 3 objects of type line. These objects represent North, East, Down. Axes 2 with title Velocity contains 3 objects of type line. These objects represent North, East, Down. Axes 3 with title Orientation contains 3 objects of type line. These objects represent Roll, Pitch, Yaw.

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

Создание сценария управления

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

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 этого состояния. Преобразуйте эти показания в географические координаты и в каждом ППМ визуализируйте истинные данные земли и показания 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