Инерционная система навигации и имитационная модель GNSS/GPS
insSensor
Система object™ моделирует устройство, которое плавит измерения от инерционной системы навигации (INS) и глобальной навигационной спутниковой системы (GNSS), такие как GPS, и выводит сплавленные измерения.
Выводить сплавленный INS и измерения GNSS:
Создайте insSensor
объект и набор его свойства.
Вызовите объект с аргументами, как будто это была функция.
Чтобы узнать больше, как Системные объекты работают, смотрите то, Что Системные объекты?.
возвращает Системный объект, INS
= insSensorINS
, это моделирует устройство что выходные измерения от INS и GNSS.
Если в противном случае не обозначено, свойства являются ненастраиваемыми, что означает, что вы не можете изменить их значения после вызова объекта. Объекты блокируют, когда вы вызываете их, и 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 с помощью 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
движение и 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 корпуса датчика, выровненной с Востоком. Задайте waypoints для траектории дуги и вектор времени прибытия для соответствующего waypoints. Используйте частоту дискретизации на 100 Гц. Создайте waypointTrajectory
Системный объект с waypoint ограничениями и набор 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);
Вызовите waypoint объект траектории, 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. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.