complementaryFilter

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

Описание

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

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

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

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

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

Создание

Описание

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

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.

Типы данных: логический

Выведите формат ориентации в виде 'quaternion' или 'Rotation matrix'. Размер выхода зависит от выходного формата ориентации:

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

  • 'Rotation matrix' – Выход является 3 3 N матрицей вращения.

N является количеством отсчетов.

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

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

Описание

пример

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Скорость вращения описала в системе координат корпуса датчика в rad/s, возвращенном как N-by-3 массив, где N является количеством отсчетов.

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

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

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

release(obj)

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

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

Примеры

свернуть все

Загрузите 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 object. The axes object with title Orientation Estimate contains 3 objects of type line. These objects represent Z-rotation, Y-rotation, X-rotation.

Ссылки

[1] Валенти, R. i. Дряновский и Цз. Сяо. "Сохраняя хорошее отношение: основанная на кватернионе ориентация фильтрует для IMUs и MARGs". Датчики. Издание 15, Номер 8, 2015, стр 19302-19330.

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

Генерация кода C/C++
Генерация кода C и C++ с помощью MATLAB® Coder™.

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

|

Введенный в R2019b