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 с помощью insSensor object™ системы. Использовать waypointTrajectory для генерации пути «земля-истина». Использовать radarScenario для организации моделирования и визуализации движения.

Укажите траекторию «земля-истина» как траекторию на восьмерке в северо-восточной плоскости. Используйте частоту дискретизации 50 Гц и длительность 5 секунд.

Fs = 50;
duration = 5;
numSamples = Fs*duration;
t = (0:(numSamples-1)).'/Fs;

a = 2;

x = a.*sqrt(2).*cos(t) ./ (sin(t).^2 + 1);
y = sin(t) .* x;
z = zeros(numSamples,1);

waypoints = [x,y,z];

path = waypointTrajectory('Waypoints',waypoints,'TimeOfArrival',t);

Создание insSensor Системный объект для моделирования получения данных INS. Установите PositionAccuracy кому 0.1.

ins = insSensor('PositionAccuracy',0.1);

Создание сценария радара с одной платформой, движение которой определяется path.

scenario = radarScenario('UpdateRate',Fs);
plat = platform(scenario);
plat.Trajectory = path;

Создание графика кинотеатра для визуализации движения платформы «земля-истина» и измерений движения платформы, смоделированных insSensor.

tp = theaterPlot('XLimits',[-3, 3],'YLimits', [-3, 3]);
platPlotter = platformPlotter(tp, ...
    'DisplayName', 'Ground-Truth Motion', ...
    'Marker', 's', ...
    'MarkerFaceColor','blue');
insPlotter = detectionPlotter(tp, ...
    'DisplayName','INS Measurement', ...
    'Marker','d', ...
    'MarkerFaceColor','red');

Figure contains an axes. The axes contains 2 objects of type line. These objects represent Ground-Truth Motion, INS Measurement.

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

while advance(scenario)
    motion = platformPoses(scenario,'quaternion');
    
    insMeas = ins(motion);
    
    plotPlatform(platPlotter,motion.Position);
    plotDetection(insPlotter,insMeas.Position);
    
    pause(1/scenario.UpdateRate)
end

Figure contains an axes. The axes contains 2 objects of type line. These objects represent Ground-Truth Motion, INS Measurement.

Создание измерений INS с помощью insSensor object™ системы. Использовать waypointTrajectory для генерации пути «земля-истина».

Укажите ориентацию «земля-истина», которая начинается с оси X корпуса датчика, выровненной по северу, и заканчивается осью X корпуса датчика, выровненной по Востоку. Укажите ППМ для траектории дуги и вектор времени прибытия для соответствующих ППМ. Используйте частоту дискретизации 100 Гц. Создать waypointTrajectory Системный объект с ограничениями ППМ и установленным SamplesPerFrame так, что вся траектория выводится одним вызовом.

eulerAngles = [0,0,0; ...
               0,0,0; ...
               90,0,0; ...
               90,0,0];
orientation = quaternion(eulerAngles,'eulerd','ZYX','frame');

r = 20;
waypoints = [0,0,0; ...
             100,0,0; ...
             100+r,r,0; ...
             100+r,100+r,0];

toa = [0,10,10+(2*pi*r/4),20+(2*pi*r/4)];

Fs = 100;
numSamples = floor(Fs*toa(end));

path = waypointTrajectory('Waypoints',waypoints, ...
    'TimeOfArrival',toa, ...
    'Orientation',orientation, ...
    'SampleRate',Fs, ...
    'SamplesPerFrame',numSamples);

Создание insSensor Системный объект для моделирования получения данных INS. Установите PositionAccuracy кому 0.1.

ins = insSensor('PositionAccuracy',0.1);

Вызовите объект траектории ППМ, path, чтобы генерировать движение земля-истина. Вызовите симулятор INS, insс движением земля-истина для генерации измерений INS.

[motion.Position,motion.Orientation,motion.Velocity] = path();
insMeas = ins(motion);

Преобразование ориентации, возвращенной ins к углам Эйлера в градусах для целей визуализации. Постройте график полного пути и ориентации с течением времени.

orientationMeasurementEuler = eulerd(insMeas.Orientation,'ZYX','frame');

subplot(2,1,1)
plot(insMeas.Position(:,1),insMeas.Position(:,2));
title('Path')
xlabel('North (m)')
ylabel('East (m)')

subplot(2,1,2)
t = (0:(numSamples-1)).'/Fs;
plot(t,orientationMeasurementEuler(:,1), ...
     t,orientationMeasurementEuler(:,2), ...
     t,orientationMeasurementEuler(:,3));
title('Orientation')
legend('Yaw','Pitch','Roll')
xlabel('Time (s)')
ylabel('Rotation (degrees)')

Figure contains 2 axes. Axes 1 with title Path contains an object of type line. Axes 2 with title Orientation contains 3 objects of type line. These objects represent Yaw, Pitch, Roll.

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

.

См. также

Объекты

Представлен в R2021a