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