Имитационная модель IMU
Система imuSensor
object™ модели, получающие данные из инерционного модуля измерения (IMU).
Смоделировать IMU:
Создайте объект imuSensor
и установите его свойства.
Вызовите объект с аргументами, как будто это была функция.
Чтобы узнать больше, как Системные объекты работают, смотрите то, Что Системные объекты? MATLAB.
IMU = imuSensor
IMU = imuSensor('accel-gyro')
IMU = imuSensor('accel-mag')
IMU = imuSensor('accel-gyro-mag')
IMU = imuSensor(___,Name,Value)
возвращает Системный объект, 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(___,
наборы каждое свойство Name,Value
)Name
к заданному Value
. Незаданные свойства имеют значения по умолчанию. Этот синтаксис может использоваться в сочетании с любым из предыдущих входных параметров.
Если в противном случае не обозначено, свойства являются ненастраиваемыми, что означает, что вы не можете изменить их значения после вызова объекта. Объекты блокируют, когда вы вызываете их, и функция release
разблокировала их.
Если свойство является настраиваемым, можно изменить его значение в любое время.
Для получения дополнительной информации об изменении значений свойств смотрите Разработку системы в MATLAB Используя Системные объекты (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
— Частота дискретизации датчика (Гц)100
(значение по умолчанию) | положительная скалярная величинаЧастота дискретизации модели датчика в Гц, заданном как положительная скалярная величина.
Типы данных: single | double
Temperature
— Температура IMU (oC)25
(значение по умолчанию) | действительный скалярРабочая температура IMU, в градусах Цельсия, заданного как действительный скаляр.
Настраиваемый: да
Типы данных: single | double
MagneticField
— Вектор магнитного поля в локальной системе координат NED (μT)[27.5550 -2.4169 -16.0849]
(значение по умолчанию) | действительный скалярВектор магнитного поля в микротесла, заданном как трехэлементный вектор - строка в локальной системе координат NED.
Магнитное поле по умолчанию соответствует магнитному полю в нуле широты, нуле долготы и высотном нуле.
Настраиваемый: да
Типы данных: 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
— Начальный seed67
(значение по умолчанию) | неотрицательный целочисленный скалярНачальный seed mt19937ar алгоритма генератора случайных чисел, заданного как действительный, неотрицательный целочисленный скаляр.
Чтобы включить это свойство, установите RandomStream
на 'mt19937ar with seed'
.
Типы данных: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64
[accelReadings,gyroReadings] = IMU(acc,angVel)
[accelReadings,gyroReadings] = IMU(acc,angVel,orientation)
[accelReadings,magReadings] = IMU(acc,angVel)
[accelReadings,magReadings] = IMU(acc,angVel,orientation)
[accelReadings,gyroReadings,magReadings] = IMU(acc,angVel)
[accelReadings,gyroReadings,magReadings] = IMU(acc,angVel,orientation)
[
генерирует акселерометр и показания гироскопа от ускорения и угловых скоростных входных параметров.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 в локальной системе координат NED (m/s2)Ускорение IMU в локальной системе координат NED, заданной как действительный, конечный N-by-3 массив в метрах в секунду, придало квадратную форму. N является количеством выборок в текущем кадре.
Типы данных: single | double
angVel
— Угловая скорость IMU в локальной системе координат NED (rad/s)Угловая скорость IMU в локальной системе координат NED, заданной как действительный, конечный N-by-3 массив в радианах в секунду. N является количеством выборок в текущем кадре.
Типы данных: single | double
orientation
— Ориентация IMU в локальной системе координат NEDОриентация IMU относительно локальной системы координат NED, заданной как
N quaternion
- вектор-столбец элемента или 3 3 N матрицей вращения. Каждая матрица quaternion
или вращения представляет вращение кадра от локальной системы координат NED до текущей системы координат корпуса датчика 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
Система 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: [0 0 0] % 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
подражать определенному оборудованию, и затем установить свойство IMU Accelerometer
на объект 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: [2 2 2] % 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 ускорений m/s^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)')
Модель акселерометра использует ориентацию наземной истины и ускоряющие входные параметры и свойства imuSensor
и accelparams
смоделировать показания акселерометра.
Ускорение наземной истины преобразовано от локального кадра до кадра датчика с помощью ориентации наземной истины:
Если ориентация вводится в форме кватерниона, она преобразована в матрицу вращения перед обработкой.
Ускорение наземной истины в кадре датчика, 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
.
Модель гироскопа использует ориентацию наземной истины, ускорение, и угловые скоростные входные параметры и свойства 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
.
Модель магнитометра использует ориентацию наземной истины и ускоряющие входные параметры и свойства 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
.
Указания и ограничения по применению:
Смотрите системные объекты в Генерации кода MATLAB (MATLAB Coder).
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.