Инерциальная навигационная система и имитационная модель ГНСС/GPS
insSensor Система object™ моделирует устройство, которое плавит измерения от инерциальной навигационной системы (INS) и глобальной навигационной спутниковой системы (GNSS), такой как GPS, и выводит плавкие измерения.
Для вывода результатов измерений плавкой INS и GNSS:
Создать insSensor и задайте его свойства.
Вызовите объект с аргументами, как если бы это была функция.
Дополнительные сведения о работе системных объектов см. в разделе Что такое системные объекты?.
возвращает объект System, INS = insSensorINS, который моделирует устройство, которое выводит измерения из INS и GNSS.
Если не указано иное, свойства не настраиваются, что означает невозможность изменения их значений после вызова объекта. Объекты блокируются при их вызове, и release функция разблокирует их.
Если свойство настраивается, его значение можно изменить в любое время.
Дополнительные сведения об изменении значений свойств см. в разделе Проектирование системы в MATLAB с использованием системных объектов.
MountingLocation - Расположение датчика на платформе (м)[0 0 0] (по умолчанию) | трехэлементный действительный вектор вида [x
y z]
Расположение датчика на платформе в метрах, определяемое как трехэлементный действительный вектор вида [x y z]. Вектор определяет смещение начала координат датчика от начала координат платформы.
Настраиваемый: Да
Типы данных: single | double
RollAccuracy - Точность измерения крена (град.)0.2 (по умолчанию) | неотрицательный вещественный скалярТочность измерения крена корпуса датчика в градусах, заданная как неотрицательный действительный скаляр.
Крен - это вращение вокруг оси X корпуса датчика. Шум рулона моделируется как процесс белого шума. RollAccuracy устанавливает стандартное отклонение шума измерения крена.
Настраиваемый: Да
Типы данных: single | double
PitchAccuracy - Точность измерения тангажа (град.)0.2 (по умолчанию) | неотрицательный вещественный скалярТочность измерения тангажа корпуса датчика в градусах, заданная как неотрицательный действительный скаляр.
Шаг - это поворот вокруг оси y корпуса датчика. Шум основного тона моделируется как процесс белого шума. PitchAccuracy определяет стандартное отклонение шума измерения основного тона.
Настраиваемый: Да
Типы данных: single | double
YawAccuracy - Точность измерения рыскания (град.)1 (по умолчанию) | неотрицательный вещественный скалярТочность измерения рыскания корпуса датчика в градусах, заданная как неотрицательный действительный скаляр.
Yaw - поворот вокруг оси z корпуса датчика. Шум Yaw моделируется как процесс белого шума. YawAccuracy определяет стандартное отклонение шума измерения рыскания.
Настраиваемый: Да
Типы данных: single | double
PositionAccuracy - Точность измерения положения (м)[1 1 1] (по умолчанию) | неотрицательный вещественный скаляр | трехэлементный действительный векторТочность измерения положения тела датчика, в метрах, заданная как неотрицательный действительный скаляр или трёхэлементный действительный вектор. Элементы вектора задают точность измерений положения x, y и z соответственно. При указании PositionAccuracy как скалярное значение, то объект устанавливает точность всех трех положений на это значение.
Позиционный шум моделируется как процесс белого шума. PositionAccuracy определяет стандартное отклонение шума измерения положения.
Настраиваемый: Да
Типы данных: single | double
VelocityAccuracy - Точность измерения скорости (м/с)0.05 (по умолчанию) | неотрицательный вещественный скалярТочность измерения скорости тела датчика в метрах в секунду, определяемая как неотрицательный действительный скаляр.
Шум скорости моделируется как процесс белого шума. VelocityAccuracy определяет стандартное отклонение шума измерения скорости.
Настраиваемый: Да
Типы данных: single | double
AccelerationAccuracy - Точность измерения ускорения (м/с2)0 (по умолчанию) | неотрицательный вещественный скалярТочность измерения ускорения корпуса датчика, в метрах в секунду, заданная как неотрицательный действительный скаляр.
Шум ускорения моделируется как процесс белого шума. AccelerationAccuracy определяет стандартное отклонение шума измерения ускорения.
Настраиваемый: Да
Типы данных: single | double
AngularVelocityAccuracy - Точность измерения угловой скорости (град ./с)0 (по умолчанию) | неотрицательный вещественный скалярТочность измерения угловой скорости тела датчика в метрах в секунду, определяемая как неотрицательный действительный скаляр.
Угловая скорость моделируется как процесс белого шума. AngularVelocityAccuracy определяет стандартное отклонение шума измерения ускорения.
Настраиваемый: Да
Типы данных: single | double
TimeInput - Включить ввод времени моделированияfalse или 0 (по умолчанию) | true или 1Включить ввод времени моделирования, заданного как логическое 0 (false) или 1 (true). Установить для этого свойства значение true для ввода времени моделирования с помощью simTime аргумент.
Настраиваемый: Нет
Типы данных: logical
HasGNSSFix - Включить исправление GNSStrue или 1 (по умолчанию) | false или 0Включить исправление GNSS, указанное как логическое 1 (true) или 0 (false). Установить для этого свойства значение false для моделирования потери фиксации приемника GNSS. Когда фиксация приемника GNSS потеряна, измерения положения дрейфа со скоростью, заданной PositionErrorFactor собственность.
Настраиваемый: Да
Чтобы включить это свойство, установите TimeInput кому true.
Типы данных: logical
PositionErrorFactor - Коэффициент ошибки положения без исправления ГНСС[0 0 0] (по умолчанию) | неотрицательный скаляр | вектор скаляров 1 на 3Коэффициент ошибки положения без исправления 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
RandomStream - Источник случайных чисел'Global stream' (по умолчанию) | 'mt19937ar with seed'Источник случайных чисел, указанный как один из следующих вариантов:
'Global stream' - Создание случайных чисел с использованием текущего глобального потока случайных чисел.
'mt19937ar with seed' - Создать случайные числа с использованием алгоритма mt19937ar, с начальным числом, указанным Seed собственность.
Типы данных: char | string
Seed - Начальное семя67 (по умолчанию) | неотрицательное целое числоНачальное начальное число алгоритма генератора случайных чисел mt19937ar, указанное как неотрицательное целое число.
Чтобы включить это свойство, установите RandomStream кому 'mt19937ar with seed'.
Типы данных: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64
моделирует данные, полученные от датчика INS и датчика GNSS. Выходное измерение основано на инерционном состоянии «земля-истина» корпуса датчика, measurement = INS(gTruth)gTruth.
дополнительно указывает время моделирования, measurement = INS(gTruth,simTime)simTime. Чтобы включить этот синтаксис, установите TimeInput свойство для true.
gTruth - Инерционное состояние «земля-истина» корпуса датчикаИнерционное наземно-истинное состояние корпуса датчика в локальных декартовых координатах, указанное как структура, содержащая следующие поля:
| Область | Описание |
|---|---|
'Position' | Позиция в метрах, заданная как вещественная, конечная N-by-3 матрица векторов [x y z]. N - количество выборок в текущем кадре. |
'Velocity' | Скорость (v), в метрах в секунду, заданная как действительная, конечная N-by-3 матрица вектора [vx vy vz]. N - количество выборок в текущем кадре. |
'Orientation' | Ориентация относительно локальной декартовой системы координат, заданная как одна из следующих опций:
Каждая матрица кватерниона или вращения - это поворот кадра от локальной декартовой системы координат к текущей системе координат тела датчика. 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]))
simTime - Время моделированияВремя моделирования в секундах, указанное как неотрицательный действительный скаляр.
Типы данных: single | double
measurement - Измерение движения корпуса датчикаИзмерение движения тела датчика в локальных декартовых координатах возвращается в виде структуры, содержащей следующие поля:
| Область | Описание |
|---|---|
'Position' | Позиция в метрах, заданная как вещественная, конечная N-by-3 матрица векторов [x y z]. N - количество выборок в текущем кадре. |
'Velocity' | Скорость (v), в метрах в секунду, заданная как действительная, конечная N-by-3 матрица вектора [vx vy vz]. N - количество выборок в текущем кадре. |
'Orientation' | Ориентация относительно локальной декартовой системы координат, заданная как одна из следующих опций:
Каждая матрица кватерниона или вращения - это поворот кадра от локальной декартовой системы координат к текущей системе координат тела датчика. 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)
insSensorperturbations | Возмущение, определенное для объекта |
perturb | Применение возмущений к объекту |
Создайте структуру движения, определяющую стационарное положение в локальной точке отсчета на северо-восток вниз (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')

Создание измерений 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');

В цикле продвигайте сценарий до его завершения. Для каждого временного шага получите текущий образец движения, смоделируйте измерения INS для движения, а затем постройте график результата.
while advance(scenario) motion = platformPoses(scenario,'quaternion'); insMeas = ins(motion); plotPlatform(platPlotter,motion.Position); plotDetection(insPlotter,insMeas.Position); pause(1/scenario.UpdateRate) end

Создание измерений 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)')

Примечания и ограничения по использованию:
См. Системные объекты в создании кода MATLAB (кодер MATLAB).
Имеется измененная версия этого примера. Открыть этот пример с помощью изменений?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.