Инерционная система навигации и имитационная модель 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)
insSensor
perturbations | Возмущение задано на объекте |
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. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.