Инерционная навигационная система и модель симуляции GNSS/GPS
The insSensor
Система object™ моделирует устройство, которое запирает измерения от инерционной навигационной системы (INS) и глобальной навигационной спутниковой системы (GNSS), такой как GPS, и выводит сплавленные измерения.
Для вывода слитых измерений INS и GNSS:
Создайте insSensor
Объекту и установите его свойства.
Вызывайте объект с аргументами, как будто это функция.
Дополнительные сведения о работе системных объектов см. в разделе «Что такое системные объекты?».
возвращает Системный объект, INS
= insSensorINS
, который моделирует устройство, которое выводит измерения из INS и GNSS.
устанавливает свойства с помощью одной или нескольких пар "имя-значение". Неопределенные свойства имеют значения по умолчанию. Заключайте каждое имя свойства в кавычки.INS
= insSensor(Name,Value
)
Если не указано иное, свойства являются нетронутыми, что означает, что вы не можете изменить их значения после вызова объекта. Объекты блокируются, когда вы вызываете их, и 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)
insSensor
perturbations | Возмущение, заданное для объекта |
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, который установлен на транспортном средстве в сценарии вождения. Постройте график измерений INS в зависимости от состояния основной истины транспортного средства и визуализируйте скорость и профиль ускорения транспортного средства.
Создайте сценарий вождения
Загрузите географические данные для маршрута в кампусе MathWorks Apple Hill в Натике, штат Массачусетс.
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 этого состояния. Преобразуйте эти показания в географические координаты и в каждой путевой точке визуализируйте показания основной истины и 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
функция.
Указания и ограничения по применению:
Смотрите Системные объекты в Генерации кода MATLAB (MATLAB Coder).
У вас есть измененная версия этого примера. Вы хотите открыть этот пример с вашими правками?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.