Имитационная модель IMU
imuSensor
Система object™ модели, получающие данные из инерциального измерительного блока (IMU).
Смоделировать IMU:
Создайте imuSensor
объект и набор его свойства.
Вызовите объект с аргументами, как будто это была функция.
Чтобы узнать больше, как Системные объекты работают, смотрите то, Что Системные объекты?
возвращает Системный объект, IMU
= imuSensorIMU
, это вычисляет инерционный модуль измерения, читающий на основе инерционного входного сигнала. IMU
имеет идеальный акселерометр и гироскоп.
IMU = imuSensor(
возвращает 'accel-gyro'
)imuSensor
Системный объект с идеальным акселерометром и гироскопом. imuSensor
и imuSensor('accel-gyro')
эквивалентные синтаксисы создания.
IMU = imuSensor(
возвращает 'accel-mag'
)imuSensor
Системный объект с идеальным акселерометром и магнитометром.
IMU = imuSensor(
возвращает 'accel-gyro-mag'
)imuSensor
Системный объект с идеальным акселерометром, гироскопом и магнитометром.
IMU = imuSensor(___,
возвращает 'ReferenceFrame'
,RF
)imuSensor
Системный объект, который вычисляет инерционный модуль измерения, читающий относительно системы координат RF
. Задайте RF
как 'NED'
(Северо-восток вниз) или 'ENU'
(Восточный Север). Значением по умолчанию является 'NED'
.
IMU = imuSensor(___,
наборы каждое свойство Name,Value
)Name
к заданному Value
. Незаданные свойства имеют значения по умолчанию. Этот синтаксис может использоваться в сочетании с любым из предыдущих входных параметров.
Если в противном случае не обозначено, свойства являются ненастраиваемыми, что означает, что вы не можете изменить их значения после вызова объекта. Объекты блокируют, когда вы вызываете их, и release
функция разблокировала их.
Если свойство является настраиваемым, можно изменить его значение в любое время.
Для получения дополнительной информации об изменении значений свойств смотрите Разработку системы в MATLAB Используя Системные объекты.
IMUType
— Тип инерционного модуля измерения'accel-gyro'
(значение по умолчанию) | 'accel-mag'
| 'accel-gyro-mag'
Тип инерционного модуля измерения в виде 'accel-gyro'
, 'accel-mag'
, или 'accel-gyro-mag'
.
Тип инерционного модуля измерения задает который показания датчика к модели:
'accel-gyro'
– Акселерометр и гироскоп
'accel-mag'
– Акселерометр и магнитометр
'accel-gyro-mag'
– Акселерометр, гироскоп и магнитометр
Можно задать IMUType
в качестве аргумента только для значения во время создания или как Name,Value
пара.
Типы данных: char |
string
SampleRate
— Частота дискретизации датчика (Гц)
(значение по умолчанию) | положительная скалярная величинаЧастота дискретизации модели датчика в Гц в виде положительной скалярной величины.
Типы данных: single
| double
Temperature
— Температура IMU (oC
(значение по умолчанию) | действительный скалярРабочая температура IMU, в градусах Цельсия в виде действительного скаляра.
Когда объект вычисляет температурные масштабные коэффициенты и экологические шумы дрейфа, 25 oC используется в качестве номинальной температуры.
Настраиваемый: да
Типы данных: single
| double
MagneticField
— Вектор магнитного поля в локальной системе координат навигации (μT)
(значение по умолчанию) | действительный скалярВектор магнитного поля в микротесла в виде трехэлементного вектора-строки в локальной системе координат навигации.
Магнитное поле по умолчанию соответствует магнитному полю в нуле широты, нуле долготы и высотном нуле.
Настраиваемый: да
Типы данных: single
| double
Accelerometer
— Параметры датчика акселерометраaccelparams
объект (значение по умолчанию)Параметры датчика акселерометра, заданные accelparams
объект.
Настраиваемый: да
Gyroscope
— Параметры датчика гироскопаgyroparams
объект (значение по умолчанию)Параметры датчика гироскопа, заданные gyroparams
объект.
Настраиваемый: да
Magnetometer
— Параметры датчика магнитометраmagparams
объект (значение по умолчанию)Параметры датчика магнитометра, заданные magparams
объект.
Настраиваемый: да
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
[
генерирует акселерометр и показания гироскопа от входных параметров скорости вращения и ускорения.accelReadings
,gyroReadings
] = IMU(acc
,angVel
)
Этот синтаксис только допустим если IMUType
установлен в 'accel-gyro'
или 'accel-gyro-mag'
.
[
генерирует акселерометр и показания гироскопа от ускорения, скорости вращения и входных параметров ориентации.accelReadings
,gyroReadings
] = IMU(acc
,angVel
,orientation
)
Этот синтаксис только допустим если IMUType
установлен в 'accel-gyro'
или 'accel-gyro-mag'
.
[
генерирует показания акселерометра и магнитометра от входных параметров скорости вращения и ускорения.accelReadings
,magReadings
] = IMU(acc
,angVel
)
Этот синтаксис только допустим если IMUType
установлен в 'accel-mag'
.
[
генерирует показания акселерометра и магнитометра от ускорения, скорости вращения и входных параметров ориентации.accelReadings
,magReadings
] = IMU(acc
,angVel
,orientation
)
Этот синтаксис только допустим если IMUType
установлен в 'accel-mag'
.
[
генерирует акселерометр, гироскоп и показания магнитометра от входных параметров скорости вращения и ускорения.accelReadings
,gyroReadings
,magReadings
] = IMU(acc
,angVel
)
Этот синтаксис только допустим если IMUType
установлен в 'accel-gyro-mag'
.
[
генерирует акселерометр, гироскоп и показания магнитометра от ускорения, скорости вращения и входных параметров ориентации.accelReadings
,gyroReadings
,magReadings
] = IMU(acc
,angVel
,orientation
)
Этот синтаксис только допустим если IMUType
установлен в 'accel-gyro-mag'
.
acc
— Ускорение IMU в локальной системе координат навигации (m/s2)Ускорение IMU в локальной системе координат навигации в виде действительного, конечного N-by-3 массив в метрах в секунду придало квадратную форму. N является количеством отсчетов в текущей системе координат.
Типы данных: single
| double
angVel
— Скорость вращения IMU в локальной системе координат навигации (rad/s)Скорость вращения IMU в локальной системе координат навигации в виде действительного, конечного N-by-3 массив в радианах в секунду. N является количеством отсчетов в текущей системе координат.
Типы данных: single
| double
orientation
— Ориентация IMU в локальной системе координат навигацииОриентация IMU относительно локальной системы координат навигации в виде quaternion
N- вектор-столбец элемента или 3 3 N матрицей вращения. Каждый quaternion
или матрица вращения представляет вращение системы координат от локальной системы координат навигации до текущей системы координат корпуса датчика IMU. N является количеством отсчетов в текущей системе координат.
Типы данных: single
| double
| quaternion
accelReadings
— Измерение акселерометра IMU в системе координат корпуса датчика (m/s2)Измерение акселерометра IMU в системе координат корпуса датчика в виде действительного, конечного N-by-3 массив в метрах в секунду придало квадратную форму. N является количеством отсчетов в текущей системе координат.
Типы данных: single
| double
gyroReadings
— Измерение гироскопа IMU в системе координат корпуса датчика (rad/s)Измерение гироскопа IMU в системе координат корпуса датчика в виде действительного, конечного N-by-3 массив в радианах в секунду. N является количеством отсчетов в текущей системе координат.
Типы данных: single
| double
magReadings
— Измерение магнитометра IMU в системе координат корпуса датчика (μT)Измерение магнитометра IMU в системе координат корпуса датчика в виде действительного, конечного N-by-3 массив в microtelsa. N является количеством отсчетов в текущей системе координат.
Типы данных: single
| double
Чтобы использовать объектную функцию, задайте Системный объект как первый входной параметр. Например, чтобы выпустить системные ресурсы Системного объекта под названием obj
, используйте этот синтаксис:
release(obj)
imuSensor
loadparams | Загрузите параметры датчика из файла JSON |
perturbations | Возмущение задано на объекте |
perturb | Примените возмущения, чтобы возразить |
imuSensor
Системный объектimuSensor
Система object™ позволяет вам смоделировать данные, полученные от инерционного модуля измерения, состоящего из комбинации гироскопа, акселерометра и магнитометра.
Создайте imuSensor
по умолчанию объект.
IMU = imuSensor
IMU = imuSensor with properties: IMUType: 'accel-gyro' SampleRate: 100 Temperature: 25 Accelerometer: [1x1 accelparams] Gyroscope: [1x1 gyroparams] RandomStream: 'Global stream'
imuSensor
объект, IMU
, содержит идеализированный гироскоп и акселерометр. Используйте запись через точку, чтобы просмотреть свойства гироскопа.
IMU.Gyroscope
ans = gyroparams with properties: MeasurementRange: Inf rad/s Resolution: 0 (rad/s)/LSB ConstantBias: [0 0 0] rad/s AxesMisalignment: [3x3 double] % NoiseDensity: [0 0 0] (rad/s)/√Hz BiasInstability: [0 0 0] rad/s RandomWalk: [0 0 0] (rad/s)*√Hz TemperatureBias: [0 0 0] (rad/s)/°C TemperatureScaleFactor: [0 0 0] %/°C AccelerationBias: [0 0 0] (rad/s)/(m/s²)
Свойства датчика заданы соответствующими объектами параметра. Например, модель гироскопа используется imuSensor
задан экземпляром gyroparams
класс. Можно изменить свойства модели гироскопа, использующей запись через точку. Установите область значений измерения гироскопа на 4,3 рад/с.
IMU.Gyroscope.MeasurementRange = 4.3;
Можно также установить свойства датчика задать объекты параметра. Создайте accelparams
возразите, чтобы подражать определенному оборудованию, и затем установить Accelerometer
IMU свойство к
accelparams
объект. Отобразите Accelerometer
свойство проверить свойства правильно установлено.
SpecSheet1 = accelparams( ... 'MeasurementRange',19.62, ... 'Resolution',0.00059875, ... 'ConstantBias',0.4905, ... 'AxesMisalignment',2, ... 'NoiseDensity',0.003924, ... 'BiasInstability',0, ... 'TemperatureBias', [0.34335 0.34335 0.5886], ... 'TemperatureScaleFactor', 0.02); IMU.Accelerometer = SpecSheet1; IMU.Accelerometer
ans = accelparams with properties: MeasurementRange: 19.62 m/s² Resolution: 0.00059875 (m/s²)/LSB ConstantBias: [0.4905 0.4905 0.4905] m/s² AxesMisalignment: [3x3 double] % NoiseDensity: [0.003924 0.003924 0.003924] (m/s²)/√Hz BiasInstability: [0 0 0] m/s² RandomWalk: [0 0 0] (m/s²)*√Hz TemperatureBias: [0.34335 0.34335 0.5886] (m/s²)/°C TemperatureScaleFactor: [0.02 0.02 0.02] %/°C
Используйте imuSensor
Система object™ к модели, получающей данные из стационарного идеального IMU, содержащего акселерометр, гироскоп и магнитометр.
Создайте идеальную модель датчика IMU, которая содержит акселерометр, гироскоп и магнитометр.
IMU = imuSensor('accel-gyro-mag')
IMU = imuSensor with properties: IMUType: 'accel-gyro-mag' SampleRate: 100 Temperature: 25 MagneticField: [27.5550 -2.4169 -16.0849] Accelerometer: [1x1 accelparams] Gyroscope: [1x1 gyroparams] Magnetometer: [1x1 magparams] RandomStream: 'Global stream'
Задайте основную истину, базовое движение IMU, который вы моделируете. Ускорение и скорость вращения заданы относительно локальной системы координат NED.
numSamples = 1000; acceleration = zeros(numSamples,3); angularVelocity = zeros(numSamples,3);
Вызовите IMU
с ускорением основной истины и скоростью вращения. Объектные выходные показания акселерометра, показания гироскопа и показания магнитометра, как смоделировано свойствами imuSensor
Системный объект. Показания акселерометра, показания гироскопа и показания магнитометра относительно системы координат корпуса датчика IMU.
[accelReading,gyroReading,magReading] = IMU(acceleration,angularVelocity);
Постройте показания акселерометра, показания гироскопа и показания магнитометра.
t = (0:(numSamples-1))/IMU.SampleRate; subplot(3,1,1) plot(t,accelReading) legend('X-axis','Y-axis','Z-axis') title('Accelerometer Readings') ylabel('Acceleration (m/s^2)') subplot(3,1,2) plot(t,gyroReading) legend('X-axis','Y-axis','Z-axis') title('Gyroscope Readings') ylabel('Angular Velocity (rad/s)') subplot(3,1,3) plot(t,magReading) legend('X-axis','Y-axis','Z-axis') title('Magnetometer Readings') xlabel('Time (s)') ylabel('Magnetic Field (uT)')
Ориентация не задана, и движение основной истины стационарное, таким образом, система координат корпуса датчика IMU и локальное перекрытие системы координат NED для целой симуляции.
Показания акселерометра: ось z корпуса датчика соответствует Вниз-оси. Ускорение на 9,8 м/с^2 вдоль оси z происходит из-за силы тяжести.
Показания гироскопа: показания гироскопа являются нулем вдоль каждой оси, как ожидалось.
Показания магнитометра: Поскольку система координат корпуса датчика выравнивается с локальной системой координат NED, показания магнитометра соответствуют MagneticField
свойство imuSensor
. MagneticField
свойство задано в локальной системе координат NED.
Используйте imuSensor
к данным модели, полученным из вращения IMU, содержащий идеальный акселерометр и идеальный магнитометр. Используйте kinematicTrajectory
задавать движение основной истины. Плавьте imuSensor
выход модели с помощью ecompass
функция, чтобы определять ориентацию в зависимости от времени.
Задайте движение основной истины для платформы, которая вращает 360 градусов за четыре секунды, и затем еще 360 градусов за две секунды. Используйте kinematicTrajectory
выводить ориентацию, ускорение и скорость вращения в системе координат NED.
fs = 100;
firstLoopNumSamples = fs*4;
secondLoopNumSamples = fs*2;
totalNumSamples = firstLoopNumSamples + secondLoopNumSamples;
traj = kinematicTrajectory('SampleRate',fs);
accBody = zeros(totalNumSamples,3);
angVelBody = zeros(totalNumSamples,3);
angVelBody(1:firstLoopNumSamples,3) = (2*pi)/4;
angVelBody(firstLoopNumSamples+1:end,3) = (2*pi)/2;
[~,orientationNED,~,accNED,angVelNED] = traj(accBody,angVelBody);
Создайте imuSensor
объект с идеальным акселерометром и идеальным магнитометром. Вызовите IMU
с ускорением основной истины, скоростью вращения и ориентацией, чтобы вывести показания акселерометра и показания магнитометра. Постройте график результатов.
IMU = imuSensor('accel-mag','SampleRate',fs); [accelReadings,magReadings] = IMU(accNED,angVelNED,orientationNED); figure(1) t = (0:(totalNumSamples-1))/fs; subplot(2,1,1) plot(t,accelReadings) legend('X-axis','Y-axis','Z-axis') ylabel('Acceleration (m/s^2)') title('Accelerometer Readings') subplot(2,1,2) plot(t,magReadings) legend('X-axis','Y-axis','Z-axis') ylabel('Magnetic Field (\muT)') xlabel('Time (s)') title('Magnetometer Readings')
Показания акселерометра указывают, что платформа не имеет никакого перевода. Показания магнитометра указывают, что платформа вращается вокруг оси z.
Подайте показания акселерометра и магнитометра в ecompass
функционируйте, чтобы оценивать ориентацию в зависимости от времени. ecompass
функция возвращает ориентацию в формате кватерниона. Преобразуйте ориентацию в Углы Эйлера и постройте результаты. График ориентации показывает, что платформа вращается об оси z только.
orientation = ecompass(accelReadings,magReadings); orientationEuler = eulerd(orientation,'ZYX','frame'); figure(2) plot(t,orientationEuler) legend('Z-axis','Y-axis','X-axis') xlabel('Time (s)') ylabel('Rotation (degrees)') title('Orientation')
Используйте imuSensor
к данным модели, полученным из вращения IMU, содержащий реалистический акселерометр и реалистический магнитометр. Используйте kinematicTrajectory
задавать движение основной истины. Плавьте imuSensor
выход модели с помощью ecompass
функция, чтобы определять ориентацию в зависимости от времени.
Задайте движение основной истины для платформы, которая вращает 360 градусов за четыре секунды, и затем еще 360 градусов за две секунды. Используйте kinematicTrajectory
выводить ориентацию, ускорение и скорость вращения в системе координат NED.
fs = 100;
firstLoopNumSamples = fs*4;
secondLoopNumSamples = fs*2;
totalNumSamples = firstLoopNumSamples + secondLoopNumSamples;
traj = kinematicTrajectory('SampleRate',fs);
accBody = zeros(totalNumSamples,3);
angVelBody = zeros(totalNumSamples,3);
angVelBody(1:firstLoopNumSamples,3) = (2*pi)/4;
angVelBody(firstLoopNumSamples+1:end,3) = (2*pi)/2;
[~,orientationNED,~,accNED,angVelNED] = traj(accBody,angVelBody);
Создайте imuSensor
объект с реалистическим акселерометром и реалистическим магнитометром. Вызовите IMU
с ускорением основной истины, скоростью вращения и ориентацией, чтобы вывести показания акселерометра и показания магнитометра. Постройте график результатов.
IMU = imuSensor('accel-mag','SampleRate',fs); IMU.Accelerometer = accelparams( ... 'MeasurementRange',19.62, ... % m/s^2 'Resolution',0.0023936, ... % m/s^2 / LSB 'TemperatureScaleFactor',0.008, ... % % / degree C 'ConstantBias',0.1962, ... % m/s^2 'TemperatureBias',0.0014715, ... % m/s^2 / degree C 'NoiseDensity',0.0012361); % m/s^2 / Hz^(1/2) IMU.Magnetometer = magparams( ... 'MeasurementRange',1200, ... % uT 'Resolution',0.1, ... % uT / LSB 'TemperatureScaleFactor',0.1, ... % % / degree C 'ConstantBias',1, ... % uT 'TemperatureBias',[0.8 0.8 2.4], ... % uT / degree C 'NoiseDensity',[0.6 0.6 0.9]/sqrt(100)); % uT / Hz^(1/2) [accelReadings,magReadings] = IMU(accNED,angVelNED,orientationNED); figure(1) t = (0:(totalNumSamples-1))/fs; subplot(2,1,1) plot(t,accelReadings) legend('X-axis','Y-axis','Z-axis') ylabel('Acceleration (m/s^2)') title('Accelerometer Readings') subplot(2,1,2) plot(t,magReadings) legend('X-axis','Y-axis','Z-axis') ylabel('Magnetic Field (\muT)') xlabel('Time (s)') title('Magnetometer Readings')
Показания акселерометра указывают, что платформа не имеет никакого перевода. Показания магнитометра указывают, что платформа вращается вокруг оси z.
Подайте показания акселерометра и магнитометра в ecompass
функционируйте, чтобы оценивать ориентацию в зависимости от времени. ecompass
функция возвращает ориентацию в формате кватерниона. Преобразуйте ориентацию в Углы Эйлера и постройте результаты. График ориентации показывает, что платформа вращается об оси z только.
orientation = ecompass(accelReadings,magReadings); orientationEuler = eulerd(orientation,'ZYX','frame'); figure(2) plot(t,orientationEuler) legend('Z-axis','Y-axis','X-axis') xlabel('Time (s)') ylabel('Rotation (degrees)') title('Orientation')
%
Смоделируйте наклон IMU, который содержит акселерометр и гироскоп с помощью imuSensor
Система object™. Используйте идеальные и реалистические модели, чтобы сравнить результаты отслеживания ориентации с помощью imufilter
Системный объект.
Загрузите struct, описывающий движение основной истины и частоту дискретизации. Struct движения описывает последовательные вращения:
рыскание: 120 градусов более чем две секунды
тангаж: 60 градусов более чем одна секунда
крен: 30 градусов по половине второго
крен:-30 градусов по половине второго
тангаж:-60 градусов более чем одна секунда
рыскание:-120 градусов более чем две секунды
На последней стадии struct движения комбинирует 1-е, 2-е, и 3-и вращения во вращение одно оси. Ускорение, скорость вращения и ориентация заданы в локальной системе координат NED.
load y120p60r30.mat motion fs accNED = motion.Acceleration; angVelNED = motion.AngularVelocity; orientationNED = motion.Orientation; numSamples = size(motion.Orientation,1); t = (0:(numSamples-1)).'/fs;
Создайте идеальный объект датчика IMU и объект фильтра IMU по умолчанию.
IMU = imuSensor('accel-gyro','SampleRate',fs); aFilter = imufilter('SampleRate',fs);
В цикле:
Симулируйте IMU выход путем питания движения основной истины объект датчика IMU.
Отфильтруйте IMU выход с помощью объекта фильтра IMU по умолчанию.
orientation = zeros(numSamples,1,'quaternion'); for i = 1:numSamples [accelBody,gyroBody] = IMU(accNED(i,:),angVelNED(i,:),orientationNED(i,:)); orientation(i) = aFilter(accelBody,gyroBody); end release(aFilter)
Стройте ориентацию в зависимости от времени.
figure(1) plot(t,eulerd(orientation,'ZYX','frame')) xlabel('Time (s)') ylabel('Rotation (degrees)') title('Orientation Estimation -- Ideal IMU Data, Default IMU Filter') legend('Z-axis','Y-axis','X-axis')
Измените свойства своего imuSensor
смоделировать реальные датчики. Запустите цикл снова и стройте оценку ориентации в зависимости от времени.
IMU.Accelerometer = accelparams( ... 'MeasurementRange',19.62, ... 'Resolution',0.00059875, ... 'ConstantBias',0.4905, ... 'AxesMisalignment',2, ... 'NoiseDensity',0.003924, ... 'BiasInstability',0, ... 'TemperatureBias', [0.34335 0.34335 0.5886], ... 'TemperatureScaleFactor',0.02); IMU.Gyroscope = gyroparams( ... 'MeasurementRange',4.3633, ... 'Resolution',0.00013323, ... 'AxesMisalignment',2, ... 'NoiseDensity',8.7266e-05, ... 'TemperatureBias',0.34907, ... 'TemperatureScaleFactor',0.02, ... 'AccelerationBias',0.00017809, ... 'ConstantBias',[0.3491,0.5,0]); orientationDefault = zeros(numSamples,1,'quaternion'); for i = 1:numSamples [accelBody,gyroBody] = IMU(accNED(i,:),angVelNED(i,:),orientationNED(i,:)); orientationDefault(i) = aFilter(accelBody,gyroBody); end release(aFilter) figure(2) plot(t,eulerd(orientationDefault,'ZYX','frame')) xlabel('Time (s)') ylabel('Rotation (degrees)') title('Orientation Estimation -- Realistic IMU Data, Default IMU Filter') legend('Z-axis','Y-axis','X-axis')
Способность imufilter
отслеживать достоверные данные значительно уменьшается при моделировании реалистического IMU. Чтобы улучшать производительность, измените свойства своего imufilter
объект. Эти значения были определены опытным путем. Запустите цикл снова и стройте оценку ориентации в зависимости от времени.
aFilter.GyroscopeNoise = 7.6154e-7; aFilter.AccelerometerNoise = 0.0015398; aFilter.GyroscopeDriftNoise = 3.0462e-12; aFilter.LinearAccelerationNoise = 0.00096236; aFilter.InitialProcessNoise = aFilter.InitialProcessNoise*10; orientationNondefault = zeros(numSamples,1,'quaternion'); for i = 1:numSamples [accelBody,gyroBody] = IMU(accNED(i,:),angVelNED(i,:),orientationNED(i,:)); orientationNondefault(i) = aFilter(accelBody,gyroBody); end release(aFilter) figure(3) plot(t,eulerd(orientationNondefault,'ZYX','frame')) xlabel('Time (s)') ylabel('Rotation (degrees)') title('Orientation Estimation -- Realistic IMU Data, Nondefault IMU Filter') legend('Z-axis','Y-axis','X-axis')
Определить количество улучшенной производительности модифицированного imufilter
, постройте расстояние кватерниона между движением основной истины и ориентацией, как возвращено imufilter
со свойствами не по умолчанию и по умолчанию.
qDistDefault = rad2deg(dist(orientationNED,orientationDefault)); qDistNondefault = rad2deg(dist(orientationNED,orientationNondefault)); figure(4) plot(t,[qDistDefault,qDistNondefault]) title('Quaternion Distance from True Orientation') legend('Realistic IMU Data, Default IMU Filter', ... 'Realistic IMU Data, Nondefault IMU Filter') xlabel('Time (s)') ylabel('Quaternion Distance (degrees)')
Следующее описание алгоритма принимает систему координат навигации NED. Модель акселерометра использует ориентацию основной истины и ускоряющие входные параметры и imuSensor
и accelparams
свойства смоделировать показания акселерометра.
Чтобы получить общее ускорение (totalAcc), ускорение предварительно обрабатывается путем отрицания и добавления силы тяжести постоянный вектор (g = [0; 0; 9.8] m/s2 принятие системы координат NED) как:
acceleration
термин отрицается, чтобы получить нулевые общие ускоряющие показания, когда акселерометр находится в свободном падении. acceleration
термин также известен как определенную силу.
Затем общее ускорение преобразовано от локальной системы координат навигации до использования системы координат датчика:
Если ориентация вводится в форме кватерниона, она преобразована в матрицу вращения перед обработкой.
Ускорение основной истины в системе координат датчика, a, проходит через объемную модель, которая добавляет неточное совмещение осей и смещение:
где ConstantBias является свойством accelparams
, и α 1, α 2, и α 3 дан первыми, вторыми, и третьими элементами свойства AxesMisalignment accelparams
.
Дрейф нестабильности смещения моделируется как смещенный белый шум и затем отфильтрованный:
где BiasInstability является свойством accelparams
, и h 1 является фильтром, заданным свойством SampleRate:
Дрейф белого шума моделируется путем умножения элементов белого шума случайный поток стандартным отклонением:
где SampleRate является imuSensor
свойством и NoiseDensity является accelparams
свойство. Элементами w являются случайные числа, данные настройками imuSensor
случайный поток.
Случайный дрейф обхода моделируется путем смещения элементов белого шума случайный поток и затем фильтрация:
где RandomWalk является свойством accelparams
, SampleRate является свойством imuSensor
, и h 2 является фильтром, заданным как:
Экологический шум дрейфа моделируется путем умножения перепада температур от стандарта с температурным смещением:
где Температура является свойством imuSensor
, и TemperatureBias является свойством accelparams
. Постоянные 25 соответствуют стандартной температуре.
Температурная ошибка масштабного коэффициента моделируется как:
где Температура является свойством imuSensor
, и TemperatureScaleFactor является свойством accelparams
. Постоянные 25 соответствуют стандартной температуре.
Квантование моделируется первым насыщением непрерывной модели сигнала:
и затем установка разрешения:
где MeasurementRange является свойством accelparams
.
Следующее описание алгоритма принимает систему координат навигации NED. Модель гироскопа использует ориентацию основной истины, ускорение, и входные параметры скорости вращения и imuSensor
и gyroparams
свойства смоделировать показания акселерометра.
Скорость вращения основной истины преобразована от локальной системы координат до системы координат датчика с помощью ориентации основной истины:
Если ориентация вводится в форме кватерниона, она преобразована в матрицу вращения перед обработкой.
Скорость вращения основной истины в системе координат датчика, a, проходит через объемную модель, которая добавляет неточное совмещение осей и смещение:
где ConstantBias является свойством gyroparams
, и α 1, α 2, и α 3 дан первыми, вторыми, и третьими элементами свойства AxesMisalignment gyroparams
.
Дрейф нестабильности смещения моделируется как смещенный белый шум и затем отфильтрованный:
где BiasInstability является свойством gyroparams
и h 1 является фильтром, заданным свойством SampleRate:
Дрейф белого шума моделируется путем умножения элементов белого шума случайный поток стандартным отклонением:
где SampleRate является imuSensor
свойством и NoiseDensity является gyroparams
свойство. Элементами w являются случайные числа, данные настройками imuSensor
случайный поток.
Случайный дрейф обхода моделируется путем смещения элементов белого шума случайный поток и затем фильтрация:
где RandomWalk является свойством gyroparams
, SampleRate является свойством imuSensor
, и h 2 является фильтром, заданным как:
Экологический шум дрейфа моделируется путем умножения перепада температур от стандарта с температурным смещением:
где Температура является свойством imuSensor
, и TemperatureBias является свойством gyroparams
. Постоянные 25 соответствуют стандартной температуре.
Температурная ошибка масштабного коэффициента моделируется как:
где Температура является свойством imuSensor
, и TemperatureScaleFactor является свойством gyroparams
. Постоянные 25 соответствуют стандартной температуре.
Квантование моделируется первым насыщением непрерывной модели сигнала:
и затем установка разрешения:
где MeasurementRange является свойством gyroparams
.
Следующее описание алгоритма принимает систему координат навигации NED. Модель магнитометра использует ориентацию основной истины и ускоряющие входные параметры и imuSensor
и magparams
свойства смоделировать показания магнитометра.
Ускорение основной истины преобразовано от локальной системы координат до системы координат датчика с помощью ориентации основной истины:
Если ориентация вводится в форме кватерниона, она преобразована в матрицу вращения перед обработкой.
Ускорение основной истины в системе координат датчика, a, проходит через объемную модель, которая добавляет неточное совмещение осей и смещение:
где ConstantBias является свойством magparams
, и α 1, α 2, и α 3 дан первыми, вторыми, и третьими элементами свойства AxesMisalignment magparams
.
Дрейф нестабильности смещения моделируется как смещенный белый шум и затем отфильтрованный:
где BiasInstability является свойством magparams
и h 1 является фильтром, заданным свойством SampleRate:
Дрейф белого шума моделируется путем умножения элементов белого шума случайный поток стандартным отклонением:
где SampleRate является imuSensor
свойством и NoiseDensity является magparams
свойство. Элементами w являются случайные числа, данные настройками imuSensor
случайный поток.
Случайный дрейф обхода моделируется путем смещения элементов белого шума случайный поток и затем фильтрация:
где RandomWalk является свойством magparams
, SampleRate является свойством imuSensor
, и h 2 является фильтром, заданным как:
Экологический шум дрейфа моделируется путем умножения перепада температур от стандарта с температурным смещением:
где Температура является свойством imuSensor
, и TemperatureBias является свойством magparams
. Постоянные 25 соответствуют стандартной температуре.
Температурная ошибка масштабного коэффициента моделируется как:
где Температура является свойством imuSensor
, и TemperatureScaleFactor является свойством magparams
. Постоянные 25 соответствуют стандартной температуре.
Квантование моделируется первым насыщением непрерывной модели сигнала:
и затем установка разрешения:
где MeasurementRange является свойством magparams
.
Объектные функции, perturbations
и perturb
, не поддерживайте генерацию кода.
Указания и ограничения по применению:
Смотрите системные объекты в Генерации кода MATLAB (MATLAB Coder).
У вас есть модифицированная версия этого примера. Вы хотите открыть этот пример со своими редактированиями?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.