Имитационная модель IMU
imuSensor Модели object™ системы, получающие данные от инерциального измерительного блока (IMU).
Для моделирования IMU:
Создать imuSensor и задайте его свойства.
Вызовите объект с аргументами, как если бы это была функция.
Дополнительные сведения о работе системных объектов см. в разделе Что такое системные объекты?.
возвращает объект System, 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 - Частота дискретизации датчика (Гц)100 (по умолчанию) | положительный скалярЧастота дискретизации модели датчика в Гц, заданная как положительный скаляр.
Типы данных: single | double
Temperature - Температура IMU (oC)25 (по умолчанию) | вещественный скалярРабочая температура IMU в градусах Цельсия, заданная как действительный скаляр.
Когда объект вычисляет коэффициенты температурной шкалы и шумы дрейфа окружающей среды, в качестве номинальной температуры используется 25 oC.
Настраиваемый: Да
Типы данных: single | double
MagneticField - Вектор магнитного поля в локальной навигационной системе координат (мкТ)[27.5550 -2.4169 -16.0849] (по умолчанию) | вещественный скалярВектор магнитного поля в микротесле, определяемый как вектор трехэлементного ряда в локальной навигационной системе координат.
Магнитное поле по умолчанию соответствует магнитному полю на нулевой широте, нулевой долготе и нулевой высоте.
Настраиваемый: Да
Типы данных: single | double
Accelerometer - Параметры датчика акселерометраaccelparams объект (по умолчанию)Параметры датчика акселерометра, указанные accelparams объект.
Настраиваемый: Да
Gyroscope - Параметры датчика гироскопаgyroparams объект (по умолчанию)Параметры датчика гироскопа, определяемые gyroparams объект.
Настраиваемый: Да
Magnetometer - Параметры датчика магнитометраmagparams объект (по умолчанию)Параметры датчика магнитометра, указанные magparams объект.
Настраиваемый: Да
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
[ формирует показания акселерометра и гироскопа с входов ускорения и угловой скорости.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 в локальной навигационной системе координат (м/с2)Ускорение IMU в локальной навигационной системе координат, задаваемое как действительный, конечный массив N-by-3 в метрах в секунду в квадрате. N - количество выборок в текущем кадре.
Типы данных: single | double
angVel - Угловая скорость IMU в локальной навигационной системе координат (рад/с)Угловая скорость IMU в локальной навигационной системе координат, заданная как действительный, конечный массив N-by-3 в радианах в секунду. N - количество выборок в текущем кадре.
Типы данных: single | double
orientation - Ориентация IMU в локальной навигационной системе координатОриентация IMU относительно локальной навигационной системы координат, указанной как quaternion
Вектор столбца N-элемента или матрица вращения 3-by-3-by-N. Каждый quaternion или матрица поворота представляет поворот кадра от локальной навигационной системы координат к текущей системе координат корпуса датчика IMU. N - количество выборок в текущем кадре.
Типы данных: single | double | quaternion
accelReadings - Измерение акселерометра IMU в системе координат корпуса датчика (м/с2)Измерение акселерометра IMU в системе координат корпуса датчика, определяемое как действительный, конечный массив N-by-3 в метрах в секунду в квадрате. N - количество выборок в текущем кадре.
Типы данных: single | double
gyroReadings - Гироскоп измерения IMU в системе координат корпуса датчика (рад/с)Гироскоп измерения IMU в системе координат корпуса датчика, определяемый как действительный, конечный массив N-by-3 в радианах в секунду. N - количество выборок в текущем кадре.
Типы данных: single | double
magReadings - Магнитометрическое измерение IMU в системе координат корпуса датчика (мкТ)Магнитометрическое измерение IMU в системе координат корпуса датчика, определяемое как действительная, конечная N-by-3 матрица в микротельце. N - количество выборок в текущем кадре.
Типы данных: single | double
Чтобы использовать функцию объекта, укажите объект System в качестве первого входного аргумента. Например, для освобождения системных ресурсов объекта System с именем obj, используйте следующий синтаксис:
release(obj)
imuSensorloadparams | Загрузить параметры датчика из файла JSON |
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 корпуса датчика соответствует оси Down. Ускорение 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 Системный объект.
Загрузите структуру, описывающую движение «земля-истина» и частоту дискретизации. Структура движения описывает последовательные повороты:
рыскание: 120 градусов в течение двух секунд
шаг: 60 градусов в течение одной секунды
крен: 30 градусов в течение половины секунды
крен: -30 градусов в течение половины секунды
шаг: -60 градусов в течение одной секунды
рыскание: -120 градусов в течение двух секунд
На последнем этапе структура движения объединяет 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 свойства для моделирования показаний акселерометра.

Для получения полного ускорения (totalAcc) ускорение предварительно обрабатывается отрицанием и добавлением вектора постоянной гравитации (g = [0; 0; 9,8] м/с2) в виде:
ускорение + g
Затем преобразуют суммарное ускорение из локального навигационного кадра в кадр датчика, используя:
totalAcc) T
Если ориентация вводится в форме кватерниона, она преобразуется в матрицу вращения перед обработкой.
Ускорение «земля-истина» в кадре датчика, а, проходит через объемную модель, что добавляет несовпадение осей и смещение:
ConstantBias
где ConstantBias является свойством accelparams, а α1, α2 и α3 даны первым, вторым и третьим элементами свойства Misalignment accelparams.
Дрейф нестабильности смещения моделируется как смещенный белый шум и затем фильтруется:
Нестабильность)
где BiasНеустойчивость является свойством accelparams, и h1 является фильтром, определенным свойством SampleRate:
12z − 1
Дрейф белого шума моделируется умножением элементов случайного потока белого шума на стандартное отклонение:
Плотность)
где SampleRate является imuSensor свойство, и NoaseDensity является accelparams собственность. Элементы w - случайные числа, задаваемые настройками imuSensor случайный поток.
Дрейф случайного хождения моделируется смещающими элементами случайного потока белого шума и затем фильтруется:
RandomWalkSampleRate2)
где RandomWalk является свойством accelparams, SampleRate является свойством imuSensor, и h2 является фильтром, определяемым как:
− z − 1
Шум дрейфа окружающей среды моделируется путем умножения разности температур из стандарта с температурным смещением:
Температура Смещение)
где Температура является свойством imuSensor, и TemperateBias является свойством accelparams. Постоянная 25 соответствует стандартной температуре.
Погрешность температурного коэффициента моделируется следующим образом:
температурный коэффициент)
где Температура является свойством imuSensor, а TemperateScityFactor является свойством accelparams. Постоянная 25 соответствует стандартной температуре.
Квантование моделируется посредством первого насыщения модели непрерывного сигнала:
а затем установите разрешение:
eResolution))
где MeasureRange является свойством accelparams.
В модели гироскопа используются входные значения ориентации «земля-истина», ускорения и угловой скорости, а также imuSensor и gyroparams свойства для моделирования показаний акселерометра.

Угловая скорость «земля-истина» преобразуется из локального кадра в кадр датчика с использованием ориентации «земля-истина»:
angularVelocity) T
Если ориентация вводится в форме кватерниона, она преобразуется в матрицу вращения перед обработкой.
Угловая скорость «земля-истина» в кадре датчика a проходит через объемную модель, что добавляет смещение и смещение осей:
ConstantBias
где ConstantBias является свойством gyroparams, а α1, α2 и α3 даны первым, вторым и третьим элементами свойства Misalignment gyroparams.
Дрейф нестабильности смещения моделируется как смещенный белый шум и затем фильтруется:
Нестабильность)
где BiasНеустойчивость является свойством gyroparams h1 - фильтр, определенный свойством SampleRate:
12z − 1
Дрейф белого шума моделируется умножением элементов случайного потока белого шума на стандартное отклонение:
Плотность)
где SampleRate является imuSensor свойство, и NoaseDensity является gyroparams собственность. Элементы w являются случайными числами, заданными настройками imuSensor случайный поток.
Дрейф случайного хождения моделируется смещающими элементами случайного потока белого шума и затем фильтруется:
RandomWalkSampleRate2)
где RandomWalk является свойством gyroparams, SampleRate является свойством imuSensor, и h2 является фильтром, определяемым как:
− z − 1
Шум дрейфа окружающей среды моделируется путем умножения разности температур из стандарта с температурным смещением:
Температура Смещение)
где Температура является свойством imuSensor, и TemperateBias является свойством gyroparams. Постоянная 25 соответствует стандартной температуре.
Погрешность температурного коэффициента моделируется следующим образом:
температурный коэффициент)
где Температура является свойством imuSensor, а TemperateScityFactor является свойством gyroparams. Постоянная 25 соответствует стандартной температуре.
Квантование моделируется посредством первого насыщения модели непрерывного сигнала:
а затем установите разрешение:
eResolution))
где MeasureRange является свойством gyroparams.
Модель магнитометра использует входы ориентации и ускорения «земля-истина», а также imuSensor и magparams свойства для моделирования показаний магнитометра.

Ускорение «земля-истина» преобразуется из локального кадра в кадр датчика с использованием ориентации «земля-истина»:
totalAcc) T
Если ориентация вводится в форме кватерниона, она преобразуется в матрицу вращения перед обработкой.
Ускорение «земля-истина» в кадре датчика, а, проходит через объемную модель, что добавляет несовпадение осей и смещение:
ConstantBias
где ConstantBias является свойством magparams, а α1, α2 и α3 даны первым, вторым и третьим элементами свойства Misalignment magparams.
Дрейф нестабильности смещения моделируется как смещенный белый шум и затем фильтруется:
Нестабильность)
где BiasНеустойчивость является свойством magparams h1 - фильтр, определенный свойством SampleRate:
12z − 1
Дрейф белого шума моделируется умножением элементов случайного потока белого шума на стандартное отклонение:
Плотность)
где SampleRate является imuSensor свойство, и NoaseDensity является magparams собственность. Элементы w являются случайными числами, заданными настройками imuSensor случайный поток.
Дрейф случайного хождения моделируется смещающими элементами случайного потока белого шума и затем фильтруется:
RandomWalkSampleRate2)
где RandomWalk является свойством magparams, SampleRate является свойством imuSensor, и h2 является фильтром, определяемым как:
− z − 1
Шум дрейфа окружающей среды моделируется путем умножения разности температур из стандарта с температурным смещением:
Температура Смещение)
где Температура является свойством imuSensor, и TemperateBias является свойством magparams. Постоянная 25 соответствует стандартной температуре.
Погрешность температурного коэффициента моделируется следующим образом:
температурный коэффициент)
где Температура является свойством imuSensor, а TemperateScityFactor является свойством magparams. Постоянная 25 соответствует стандартной температуре.
Квантование моделируется посредством первого насыщения модели непрерывного сигнала:
а затем установите разрешение:
eResolution))
где MeasureRange является свойством magparams.
Примечания и ограничения по использованию:
См. Системные объекты в создании кода MATLAB (кодер MATLAB).
Имеется измененная версия этого примера. Открыть этот пример с помощью изменений?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.