Инерционная навигационная система и модель симуляции GNSS/GPS
The insSensor Система object™ моделирует устройство, которое запирает измерения от инерционной навигационной системы (INS) и глобальной навигационной спутниковой системы (GNSS), такой как GPS, и выводит сплавленные измерения.
Для вывода слитых измерений INS и GNSS:
Создайте insSensor Объекту и установите его свойства.
Вызывайте объект с аргументами, как будто это функция.
Дополнительные сведения о работе системных объектов см. в разделе «Что такое системные объекты?».
возвращает Системный объект, INS = insSensorINS, который моделирует устройство, которое выводит измерения из INS и GNSS.
Если не указано иное, свойства являются нетронутыми, что означает, что вы не можете изменить их значения после вызова объекта. Объекты блокируются, когда вы вызываете их, и release функция разблокирует их.
Если свойство настраивается, можно изменить его значение в любой момент.
Для получения дополнительной информации об изменении значений свойств смотрите Разработку системы в MATLAB Использование Системных объектов.
MountingLocation - Расположение датчика на платформе (м)[0 0 0] (по умолчанию) | трехэлементный вектор вида [x
y z]
Расположение датчика на платформе, в метрах, задается как трехэлементный реальный вектор вида [x y z]. Вектор определяет смещение источника датчика от источника платформы.
Настраиваемый: Да
Типы данных: single | double
RollAccuracy - Точность измерения крена (град)0.2 (по умолчанию) | неотрицательным вещественным скаляромТочность измерения крена тела датчика, в степенях, задается как неотрицательный действительный скаляр.
Roll - вращение вокруг оси x тела датчика. Шум от крена моделируется как процесс белого шума. RollAccuracy устанавливает стандартное отклонение шума измерения крена.
Настраиваемый: Да
Типы данных: single | double
PitchAccuracy - Точность измерения тангажа (град)0.2 (по умолчанию) | неотрицательным вещественным скаляромТочность измерения тангажа тела датчика, в степенях, задается как неотрицательный действительный скаляр.
Pitch - вращение вокруг оси y тела датчика. Шум тангажа моделируется как процесс белого шума. PitchAccuracy задает стандартное отклонение шума измерения тангажа.
Настраиваемый: Да
Типы данных: single | double
YawAccuracy - Точность измерения рыскания (град.)1 (по умолчанию) | неотрицательным вещественным скаляромТочность измерения рыскания тела датчика, в степенях, задается как неотрицательный действительный скаляр.
Yaw - вращение вокруг оси z тела датчика. Шум рыскание моделируется как процесс белого шума. 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. Когда фиксация приемника теряется, измерения положения дрейфуют со скоростью, заданной PositionErrorFactor свойство.
Настраиваемый: Да
Чтобы включить это свойство, задайте TimeInput на true.
Типы данных: logical
PositionErrorFactor - Коэффициент ошибки положения без исправления GNSS[0 0 0] (по умолчанию) | неотрицательный скаляр | вектор скаляров 1 на 3Коэффициент ошибки положения без исправления 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
RandomStream - Источник случайных чисел'Global stream' (по умолчанию) | 'mt19937ar with seed'Источник случайных чисел, заданный как один из следующих опций:
'Global stream' -- Сгенерируйте случайные числа, используя текущий глобальный поток случайных чисел.
'mt19937ar with seed' -- Сгенерируйте случайные числа с помощью алгоритма mt19937ar с seed, заданным Seed свойство.
Типы данных: char | string
Seed - Начальный seed67 (по умолчанию) | неотрицательное целое числоНачальное начальное число алгоритма генератора случайных чисел 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' | Положение, в метрах, определенных как реальная, конечная матрица <reservedrangesplaceholder4>-by-3 [<reservedrangesplaceholder3> <reservedrangesplaceholder2> <reservedrangesplaceholder1>] векторы. N - количество выборок в текущей системе координат. |
'Velocity' | Скорость (v), в метрах в секунду, заданная как вещественная, конечная N -на-3 матрица вектора [v x v y v z]. N - количество выборок в текущей системе координат. |
'Orientation' | Ориентация относительно локальной Декартовой системы координат, заданная как один из следующих опций:
Каждый кватернион или матрица вращения является поворотом кадра от локальной Декартовой системы координат к текущей системе координат тела датчика. N - количество выборок в текущей системе координат. |
'Acceleration' | Ускорение (a), в метрах в секунду за секунду, заданное как вещественная, конечная N -на-3 матрица векторов [a x a y a z]. N - количество выборок в текущей системе координат. |
'AngularVelocity' | Скорость вращения (ω), в метрах в секунду в квадрате, заданная как вещественная, конечная N-на-3 матрица векторов [ω x ω y ω z]. N - количество выборок в текущей системе координат. |
Значения полей должны иметь тип double или single.
The Position, Velocity, и Orientation поля обязательны для заполнения. Другие поля являются необязательными.
Пример: struct('Position',[0 0 0],'Velocity',[0 0 0],'Orientation',quaternion([1 0 0 0]))
simTime - Время симуляцииВремя симуляции, в секундах, задается как неотрицательный действительный скаляр.
Типы данных: single | double
measurement - Измерение движения тела датчикаИзмерение движения тела датчика, в локальных Декартовых координатах, возвращается как структура, содержащая эти поля:
| Область | Описание |
|---|---|
'Position' | Положение, в метрах, определенных как реальная, конечная матрица <reservedrangesplaceholder4>-by-3 [<reservedrangesplaceholder3> <reservedrangesplaceholder2> <reservedrangesplaceholder1>] векторы. N - количество выборок в текущей системе координат. |
'Velocity' | Скорость (v), в метрах в секунду, заданная как вещественная, конечная N -на-3 матрица вектора [v x v y v z]. N - количество выборок в текущей системе координат. |
'Orientation' | Ориентация относительно локальной Декартовой системы координат, заданная как один из следующих опций:
Каждый кватернион или матрица вращения является поворотом кадра от локальной Декартовой системы координат к текущей системе координат тела датчика. N - количество выборок в текущей системе координат. |
'Acceleration' | Ускорение (a), в метрах в секунду за секунду, заданное как вещественная, конечная N -на-3 матрица векторов [a x a y a z]. N - количество выборок в текущей системе координат. |
'AngularVelocity' | Скорость вращения (ω), в метрах в секунду в квадрате, заданная как вещественная, конечная N-на-3 матрица векторов [ω x ω y ω z]. N - количество выборок в текущей системе координат. |
Возвращенные значения полей имеют тип double или single и имеют тот же тип, что и соответствующие значения полей в gTruth вход.
Чтобы использовать функцию объекта, задайте системный объект в качестве первого входного параметра. Например, чтобы освободить системные ресурсы системного объекта с именем 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 чтобы сгенерировать путь «основная истина». Использование trackingScenario организовать симуляцию и визуализировать движение.
Задайте траекторию основной истины как восьмерку пути в плоскости Северо-Восток. Используйте частоту дискретизации 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 = trackingScenario('UpdateRate',Fs);
quadcopter = platform(scenario);
quadcopter.Trajectory = path;Создайте театральный график, чтобы визуализировать основную истину quadcopter движение и квадрокоптерные измерения движения, смоделированные insSensor.
tp = theaterPlot('XLimits',[-3, 3],'YLimits', [-3, 3]); quadPlotter = 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(quadPlotter,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 Coder).
У вас есть измененная версия этого примера. Вы хотите открыть этот пример с вашими правками?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.