Инерционная система навигации и имитационная модель GNSS/GPS
insSensor Система object™ моделирует устройство, которое плавит измерения от инерционной системы навигации (INS) и глобальной навигационной спутниковой системы (GNSS), такие как GPS, и выводит сплавленные измерения.
Выводить сплавленный INS и измерения GNSS:
Создайте insSensor объект и набор его свойства.
Вызовите объект с аргументами, как будто это была функция.
Чтобы узнать больше, как Системные объекты работают, смотрите то, Что Системные объекты?
возвращает Системный объект, INS = insSensorINS, это моделирует устройство что выходные измерения от INS и GNSS.
свойства наборов с помощью одной или нескольких пар "имя-значение". Незаданные свойства имеют значения по умолчанию. Заключите каждое имя свойства в кавычки.INS = insSensor(Name,Value)
Если в противном случае не обозначено, свойства являются ненастраиваемыми, что означает, что вы не можете изменить их значения после вызова объекта. Объекты блокируют, когда вы вызываете их, и release функция разблокировала их.
Если свойство является настраиваемым, можно изменить его значение в любое время.
Для получения дополнительной информации об изменении значений свойств смотрите Разработку системы в MATLAB Используя Системные объекты.
MountingLocation — Местоположение датчика на платформе (m) (значение по умолчанию) | трехэлементный вектор с действительным знаком из формы [x
y
z]Местоположение датчика на платформе, в метрах в виде трехэлементного вектора с действительным знаком из формы [x y z]. Вектор задает смещение источника датчика от источника платформы.
Настраиваемый: да
Типы данных: single | double
RollAccuracy — Точность измерения крена (градус) (значение по умолчанию) | неотрицательный действительный скалярТочность измерения крена корпуса датчика, в градусах в виде неотрицательного действительного скаляра.
Roll является вращением вокруг x - ось корпуса датчика. Шум крена моделируется как процесс белого шума. RollAccuracy устанавливает стандартное отклонение шума измерения крена.
Настраиваемый: да
Типы данных: single | double
PitchAccuracy — Точность измерения тангажа (градус) (значение по умолчанию) | неотрицательный действительный скалярТочность измерения тангажа корпуса датчика, в градусах в виде неотрицательного действительного скаляра.
Pitch является вращением вокруг y - ось корпуса датчика. Шум тангажа моделируется как процесс белого шума. PitchAccuracy задает стандартное отклонение шума измерения тангажа.
Настраиваемый: да
Типы данных: single | double
YawAccuracy — Точность измерения рыскания (градус) (значение по умолчанию) | неотрицательный действительный скалярТочность измерения рыскания корпуса датчика, в градусах в виде неотрицательного действительного скаляра.
Yaw является вращением вокруг z - ось корпуса датчика. Шум рыскания моделируется как процесс белого шума. YawAccuracy задает стандартное отклонение шума измерения рыскания.
Настраиваемый: да
Типы данных: single | double
PositionAccuracy — Точность измерения положения (m) (значение по умолчанию) | неотрицательный действительный скаляр | трехэлементный вектор с действительным знакомТочность измерения положения корпуса датчика, в метрах в виде неотрицательного действительного скаляра или трехэлементного вектора с действительным знаком. Элементы вектора устанавливают точность x - y - и z позиционные измерения, соответственно. Если вы задаете PositionAccuracy как скалярное значение, затем объект устанавливает точность всех трех положений к этому значению.
Шум положения моделируется как процесс белого шума. PositionAccuracy задает стандартное отклонение шума измерения положения.
Настраиваемый: да
Типы данных: single | double
VelocityAccuracy — Точность скоростного измерения (m/s) (значение по умолчанию) | неотрицательный действительный скалярТочность скоростного измерения корпуса датчика, в метрах в секунду в виде неотрицательного действительного скаляра.
Скоростной шум моделируется как процесс белого шума. VelocityAccuracy задает стандартное отклонение скоростного шума измерения.
Настраиваемый: да
Типы данных: single | double
AccelerationAccuracy — Точность ускоряющего измерения (m/s2) (значение по умолчанию) | неотрицательный действительный скалярТочность ускоряющего измерения корпуса датчика, в метрах в секунду в виде неотрицательного действительного скаляра.
Ускоряющий шум моделируется как процесс белого шума. AccelerationAccuracy задает стандартное отклонение ускоряющего шума измерения.
Настраиваемый: да
Типы данных: single | double
AngularVelocityAccuracy — Точность измерения скорости вращения (градус/с) (значение по умолчанию) | неотрицательный действительный скалярТочность измерения скорости вращения корпуса датчика, в метрах в секунду в виде неотрицательного действительного скаляра.
Скорость вращения моделируется как процесс белого шума. AngularVelocityAccuracy задает стандартное отклонение ускоряющего шума измерения.
Настраиваемый: да
Типы данных: single | double
TimeInput — Включите вход времени симуляцииfalse или 0 (значение по умолчанию) | true или 1Включите вход времени симуляции в виде логического 0 ложь) или 1 TRUE). Установите это свойство на true вводить время симуляции при помощи simTime аргумент.
Настраиваемый: нет
Типы данных: логический
HasGNSSFix — Включите GNSS, фиксируютtrue или 1 (значение по умолчанию) | false или 0Включите GNSS, фиксируют в виде логического 1 TRUE) или 0 ложь). Установите это свойство на false чтобы симулировать потерю приемника GNSS фиксируют. Когда фиксация приемника GNSS потеряна, дрейф измерений положения на уровне, заданном PositionErrorFactor свойство.
Настраиваемый: да
Чтобы включить это свойство, установите TimeInput к true.
Типы данных: логический
PositionErrorFactor — Ошибочный фактор положения без GNSS фиксирует (значение по умолчанию) | неотрицательный скаляр | 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 — Начальный seed (значение по умолчанию) | неотрицательное целое числоНачальный seed 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 матрица [v x v y v z] вектор. N является количеством отсчетов в текущей системе координат. |
'Orientation' | Ориентация относительно локальной Декартовой системы координат в виде одной из этих опций:
Каждая матрица кватерниона или вращения является вращением системы координат от локальной Декартовой системы координат до системы координат корпуса датчика тока. 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]))
simTime — Время симуляцииВремя симуляции, в секундах в виде неотрицательного действительного скаляра.
Типы данных: single | double
measurement — Измерение движения корпуса датчикаИзмерение движения корпуса датчика, в локальных Декартовых координатах, возвратилось как структура, содержащая эти поля:
| Поле | Описание |
|---|---|
'Position' | Положение, в метрах в виде действительного, конечного N-by-3 матрица [x y z] векторы. N является количеством отсчетов в текущей системе координат. |
'Velocity' | Скорость (v), в метрах в секунду в виде действительного, конечного N-by-3 матрица [v x v y v z] вектор. N является количеством отсчетов в текущей системе координат. |
'Orientation' | Ориентация относительно локальной Декартовой системы координат в виде одной из этих опций:
Каждая матрица кватерниона или вращения является вращением системы координат от локальной Декартовой системы координат до системы координат корпуса датчика тока. 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)
insSensorperturbations | Возмущение задано на объекте |
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')

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