exponenta event banner

complementaryFilter

Оценка ориентации из дополнительного фильтра

Описание

complementaryFilter Система object™ плавит акселерометр, гироскоп и данные датчика магнитометра для оценки ориентации устройства и угловой скорости.

Чтобы оценить ориентацию с помощью этого объекта:

  1. Создать complementaryFilter и задайте его свойства.

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

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

Создание

Описание

FUSE = complementaryFilter возвращает complementaryFilter Системный объект, FUSEдля сенсорного слияния данных акселерометра, гироскопа и магнитометра для оценки ориентации устройства и угловой скорости.

FUSE = complementaryFilter('ReferenceFrame',RF) возвращает complementaryFilter Объект системы, плавящий акселерометр, гироскоп и данные магнитометра для оценки ориентации устройства относительно опорного кадра RF. Определить RF как 'NED' (Север-Восток-вниз) или 'ENU' (Восток-Север-Вверх). Значение по умолчанию: 'NED'.

пример

FUSE = complementaryFilter(___,Name,Value) задает каждое свойство Name к указанному Value. Неопределенные свойства имеют значения по умолчанию.

Свойства

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

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

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

Дополнительные сведения об изменении значений свойств см. в разделе Проектирование системы в MATLAB с использованием системных объектов.

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

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

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

Коэффициент усиления акселерометра, заданный как действительный скаляр в диапазоне [0, 1]. Коэффициент усиления определяет, насколько измерение акселерометра является доверенным по сравнению с измерением гироскопа для оценки ориентации. Это свойство можно настроить.

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

Коэффициент усиления магнитометра, заданный как действительный скаляр в диапазоне [0, 1]. Коэффициент усиления определяет, насколько магнитометрическое измерение является доверенным по сравнению с измерением гироскопа для оценки ориентации. Это свойство можно настроить.

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

Включить вход магнитометра, указанный как true или false.

Типы данных: logical

Формат ориентации вывода, указанный как 'quaternion' или 'Rotation matrix'. Размер выходных данных зависит от формата ориентации выходных данных:

  • 'quaternion' - Вывод является N-by-1 quaternion.

  • 'Rotation matrix' - Вывод является матрицей ротации 3-by-3-by-N.

N - количество выборок.

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

Использование

Описание

пример

[orientation,angularVelocity] = FUSE(accelReadings,gyroReadings,magReadings) плавит акселерометр, гироскоп и данные магнитометра для вычисления ориентации и угловой скорости. Чтобы использовать этот синтаксис, установите HasMagnetometer свойство как true.

[orientation,angularVelocity] = FUSE(accelReadings,gyroReadings) плавит акселерометр и данные гироскопа для вычисления ориентации и угловой скорости. Чтобы использовать этот синтаксис, установите HasMagnetometer свойство как false.

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

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

Показания акселерометра в системе координат корпуса датчика в м/с2, указанные в виде матрицы N-by-3. N - количество выборок и три столбца accelReadings представляют измерения [x y z ]. Предполагается, что показания акселерометра соответствуют частоте выборки, указанной SampleRate собственность. В фильтре предполагается, что постоянная g силы тяжести равна 9.81 м/с2.

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

Показания гироскопа в системе координат корпуса датчика в рад/с, заданные в виде матрицы N-by-3. N - количество выборок и три столбца gyroReadings представляют измерения [x y z ]. Показания гироскопа принимаются соответствующими частоте выборки, заданной SampleRate собственность.

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

Показания магнитометра в системе координат корпуса датчика в мкТ, указанные в виде матрицы N-by-3. N - количество выборок и три столбца magReadings представляют измерения [x y z ]. Предполагается, что показания магнитометра соответствуют частоте дискретизации, указанной SampleRate собственность.

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

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

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

Ориентация, которая поворачивает величины от локальной навигационной системы координат к системе координат тела, возвращаемой в виде кватернионов или массива. Размер и тип orientation зависит от того, OrienationFormat свойство имеет значение 'quaternion' или 'Rotation matrix':

  • 'quaternion' - выход является N-by-1 вектором кватернионов, где N - число выборок.

  • 'Rotation matrix' - выходной сигнал представляет собой 3-by-3-by-N массив матриц вращения, где N - число выборок.

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

Угловая скорость, выраженная в системе координат тела датчика в рад/с, возвращается в виде матрицы N-by-3, где N - число выборок.

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

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

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

release(obj)

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

stepЗапустить алгоритм объекта System
releaseДеблокирование ресурсов и разрешение изменений значений свойств объекта системы и входных признаков
resetСброс внутренних состояний объекта System
cloneСоздать повторяющийся объект System
isLockedОпределить, используется ли объект System

Примеры

свернуть все

Загрузить rpy_9axis файл, содержащий записанные данные датчика акселерометра, гироскопа и магнитометра от устройства, колеблющегося по тангажу (вокруг оси y), затем по рысканию (вокруг оси z), а затем по крену (вокруг оси x). Файл также содержит частоту дискретизации записи.

ld = load('rpy_9axis.mat');
accel = ld.sensorData.Acceleration;
gyro = ld.sensorData.AngularVelocity;
mag = ld.sensorData.MagneticField;

Создайте дополнительный объект фильтра с частотой дискретизации, равной частоте данных.

Fs  = ld.Fs;  % Hz
fuse = complementaryFilter('SampleRate', Fs);

Плавкий акселерометр, гироскоп и данные магнитометра с помощью фильтра.

q = fuse(accel, gyro, mag);

Визуализация результатов.

plot(eulerd( q, 'ZYX', 'frame'));
title('Orientation Estimate');
legend('Z-rotation', 'Y-rotation', 'X-rotation');
ylabel('Degrees');

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

Ссылки

[1] Валенти, Р., И. Дряновски и Ж. Сяо. «Сохранение хорошего отношения: фильтр ориентации на основе кватерниона для IMU и MARG». Датчики. Том 15, номер 8, 2015, стр. 19302-19330.

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

Создание кода C/C + +
Создайте код C и C++ с помощью MATLAB ® Coder™

.

См. также

|

Представлен в R2019b