imuSensor

Имитационная модель БИНС

Описание

The imuSensor Системный object™ моделей приема данных от инерциального измерительного блока (IMU).

Для моделирования БИНС:

  1. Создайте imuSensor Объекту и установите его свойства.

  2. Вызывайте объект с аргументами, как будто это функция.

Дополнительные сведения о работе системных объектов см. в разделе «Что такое системные объекты?».

Создание

Описание

пример

IMU = imuSensor возвращает Системный объект, IMU, который вычисляет считывание модуля измерения на основе инерционного входного сигнала. 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 Использование Системных объектов.

Тип инерционного модуля измерения, заданный как 'accel-gyro', 'accel-mag', или 'accel-gyro-mag'.

Тип инерционного модуля измерения определяет, какие показания датчика нужно смоделировать:

  • 'accel-gyro' -- Акселерометр и гироскоп

  • 'accel-mag' -- Акселерометр и магнитометр

  • 'accel-gyro-mag' -- Акселерометр, гироскоп и магнитометр

Можно задать IMUType как аргумент только для значения во время создания или как Name,Value пара.

Типы данных: char | string

Частота дискретизации модели датчика в Гц, заданная как положительная скалярная величина.

Типы данных: single | double

Рабочая температура БИНС в степенях Цельсия, заданная как действительный скаляр.

Когда объект вычисляет коэффициенты шкалы температуры и шум дрейфа среды, 25 oВ качестве номинальной температуры используется C.

Настраиваемый: Да

Типы данных: single | double

Вектор поля в microtesla, заданный как трехэлементный вектор-строка в локальной навигационной системе координат.

Магнитное поле по умолчанию соответствует магнитному полю на нулевой широте, нулевой долготе и нулевой высоте.

Настраиваемый: Да

Типы данных: single | double

Параметры датчика акселерометра, заданные accelparams объект.

Настраиваемый: Да

Параметры гироскопа, заданные gyroparams объект.

Настраиваемый: Да

Параметры магнитометра, заданные magparams объект.

Настраиваемый: Да

Источник случайных чисел, заданный в виде вектора символов или строки:

  • 'Global stream' - Случайные числа генерируются с использованием текущего глобального потока случайных чисел.

  • 'mt19937ar with seed' -- Случайные числа генерируются с помощью алгоритма mt19937ar со seed, заданной Seed свойство.

Типы данных: char | string

Начальный 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'.

Входные параметры

расширить все

Ускорение БИНС в локальной навигационной системе координат, заданное как действительный, конечный N - на 3 в метрах в секунду за секунду. N - количество выборок в текущей системе координат.

Типы данных: single | double

Скорость вращения БИНС в локальной навигационной системе координат, заданная как вещественная, конечная N -на-3 массив в радианах в секунду. N - количество выборок в текущей системе координат.

Типы данных: single | double

Ориентация БИНС относительно локальной навигационной системы координат, заданная как quaternion N вектор -элемент или матрица вращения 3 на 3 N байта. Каждый quaternion или матрица вращения представляет поворот кадра от локальной навигационной системы координат к текущей системе координат тела датчика БИНС. N - количество выборок в текущей системе координат.

Типы данных: single | double | quaternion

Выходные аргументы

расширить все

Измерение акселерометра БИНС в системе координат тела датчика, заданное как действительный, конечный массив N -на 3 в метрах в секунду в квадрате. N - количество выборок в текущей системе координат.

Типы данных: single | double

Гироскопическое измерение БИНС в системе координат тела датчика, заданное как действительная, конечная решётка N -на 3 в радианах в секунду. N - количество выборок в текущей системе координат.

Типы данных: single | double

Магнитометрическое измерение БИНС в системе координат тела датчика, заданное как действительная, конечная N -на-3 массив в микротелсе. N - количество выборок в текущей системе координат.

Типы данных: single | double

Функции объекта

Чтобы использовать функцию объекта, задайте системный объект в качестве первого входного параметра. Например, чтобы освободить системные ресурсы системного объекта с именем obj, используйте следующий синтаксис:

release(obj)

расширить все

loadparamsЗагрузите параметры датчика из файла JSON
stepЗапуск алгоритма системного объекта
releaseОтпустите ресурсы и допустите изменения в значениях свойств системного объекта и входных характеристиках
resetСброс внутренних состояний Системного объекта

Примеры

свернуть все

The 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'

The 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 объект для имитации конкретного оборудования, а затем установки БИНС 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 = 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 Системный объект. Показания акселерометра, показания гироскопа и показания магнитометра соответствуют системе координат корпуса датчика БИНС.

[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)')

Figure contains 3 axes. Axes 1 with title Accelerometer Readings contains 3 objects of type line. These objects represent X-axis, Y-axis, Z-axis. Axes 2 with title Gyroscope Readings contains 3 objects of type line. These objects represent X-axis, Y-axis, Z-axis. Axes 3 with title Magnetometer Readings contains 3 objects of type line. These objects represent X-axis, Y-axis, Z-axis.

Ориентация не задана, и движение «земля-правда» является стационарным, поэтому система координат тела датчика IMU и локальная система координат NED перекрываются для всей симуляции.

  • Показания акселерометра: Ось Z тела датчика соответствует оси Вниз. Ускорение 9,8 м/с ^ 2 по оси Z обусловлено гравитацией.

  • Показания гироскопа: показания гироскопа - нуль вдоль каждой оси, как ожидалось.

  • Показания магнитометра: Поскольку система координат тела датчика выровнена с локальной системой координат NED, показания магнитометра соответствуют MagneticField свойство imuSensor. The MagneticField свойство определяется в локальной системе координат NED.

Использование imuSensor для данных моделей, полученных из вращающегося БИНС, содержащего идеальный акселерометр и идеальный магнитометр. Использование 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')

Figure contains 2 axes. Axes 1 with title Accelerometer Readings contains 3 objects of type line. These objects represent X-axis, Y-axis, Z-axis. Axes 2 with title Magnetometer Readings contains 3 objects of type line. These objects represent X-axis, Y-axis, Z-axis.

Показания акселерометра указывают, что платформа не имеет никакого перевода. Показания магнитометра показывают, что платформа вращается вокруг оси Z.

Подайте показания акселерометра и магнитометра в ecompass функция для оценки ориентации с течением времени. The 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')

Figure contains an axes. The axes with title Orientation contains 3 objects of type line. These objects represent Z-axis, Y-axis, X-axis.

Использование imuSensor для данных моделей, полученных из вращающегося БИНС, содержащего реалистичный акселерометр и реалистичный магнитометр. Использование 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')

Figure contains 2 axes. Axes 1 with title Accelerometer Readings contains 3 objects of type line. These objects represent X-axis, Y-axis, Z-axis. Axes 2 with title Magnetometer Readings contains 3 objects of type line. These objects represent X-axis, Y-axis, Z-axis.

Показания акселерометра указывают, что платформа не имеет никакого перевода. Показания магнитометра показывают, что платформа вращается вокруг оси Z.

Подайте показания акселерометра и магнитометра в ecompass функция для оценки ориентации с течением времени. The 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')

Figure contains an axes. The axes with title Orientation contains 3 objects of type line. These objects represent Z-axis, Y-axis, X-axis.

%

Моделируйте наклоняющийся БИНС, который содержит акселерометр и гироскоп, используя imuSensor Системные object™. Используйте идеальные и реалистичные модели, чтобы сравнить результаты отслеживания ориентации с помощью imufilter Системный объект.

Загрузите struct, описывающую основную истину движение и частоту дискретизации. Структура движения t описывает последовательные повороты:

  1. рыскание: 120 степени за две секунды

  2. тангаж: 60 степени более одной секунды

  3. крен: 30 степени за полсекунды

  4. крен: -30 степени за полсекунды

  5. тангаж: -60 степени в течение одной секунды

  6. рыскание: -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);

В цикле:

  1. Симулируйте выход БИНС путем подачи движения основная истина к объекту датчика БИНС.

  2. Фильтрация выхода БИНС с помощью объекта фильтра БИНС по умолчанию.

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 отслеживать достоверные данные значительно уменьшается при моделировании реалистичного БИНС. Чтобы улучшить эффективность, измените свойства своего 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 со свойствами по умолчанию и nondefault.

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)')

Алгоритмы

расширить все

Расширенные возможности

.

См. также

Классы

Объекты

Введенный в R2018b