imuSensor

Имитационная модель IMU

Описание

Система imuSensor object™ модели, получающие данные из инерционного модуля измерения (IMU).

Смоделировать IMU:

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

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

Чтобы узнать больше, как Системные объекты работают, смотрите то, Что Системные объекты? MATLAB.

Создание

Синтаксис

IMU = imuSensor
IMU = imuSensor('accel-gyro')
IMU = imuSensor('accel-mag')
IMU = imuSensor('accel-gyro-mag')
IMU = imuSensor(___,Name,Value)

Описание

пример

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(___,Name,Value) наборы каждое свойство Name к заданному Value. Незаданные свойства имеют значения по умолчанию. Этот синтаксис может использоваться в сочетании с любым из предыдущих входных параметров.

Свойства

развернуть все

Если в противном случае не обозначено, свойства являются ненастраиваемыми, что означает, что вы не можете изменить их значения после вызова объекта. Объекты блокируют, когда вы вызываете их, и функция release разблокировала их.

Если свойство является настраиваемым, можно изменить его значение в любое время.

Для получения дополнительной информации об изменении значений свойств смотрите Разработку системы в MATLAB Используя Системные объекты (MATLAB).

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

Тип инерционного модуля измерения задает который показания датчика к модели:

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

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

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

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

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

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

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

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

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

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

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

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

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

Типы данных: 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)
[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'.

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

развернуть все

Ускорение IMU в локальной системе координат NED, заданной как действительный, конечный N-by-3 массив в метрах в секунду, придало квадратную форму. N является количеством выборок в текущем кадре.

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

Угловая скорость IMU в локальной системе координат NED, заданной как действительный, конечный N-by-3 массив в радианах в секунду. N является количеством выборок в текущем кадре.

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

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

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

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

развернуть все

Измерение акселератора IMU в системе координат корпуса датчика, заданной как действительный, конечный N-by-3 массив в метрах в секунду, придало квадратную форму. N является количеством выборок в текущем кадре.

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

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

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

Измерение магнитометра IMU в системе координат корпуса датчика, заданной как действительный, конечный N-by-3 массив в microtelsa. N является количеством выборок в текущем кадре.

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

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

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

release(obj)

развернуть все

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

Примеры

развернуть все

Система 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 движения описывает последовательные вращения:

  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. Моделируйте IMU вывод путем питания движения наземной истины объект датчика IMU.

  2. Отфильтруйте 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)')

Алгоритмы

развернуть все

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

Смотрите также

Классы

Системные объекты

Введенный в R2018b