В этом примере показано, как выровнять и предварительно обработать регистрируемые данные о датчике. Это позволяет фильтрам сплава выполнять оценку ориентации как ожидалось. Записанные данные были собраны из акселерометра и гироскопа, смонтированного на наземном транспортном средстве.
Загрузите регистрируемые данные об инерциальном измерительном блоке (IMU) и извлеките отдельные данные о датчике и метки времени.
load('imuData', 'imuTT') time = imuTT.Time; accel = imuTT.LinearAcceleration; gyro = imuTT.AngularVelocity; orient = imuTT.Orientation;
Из области значений показаний скорости вращения регистрируемые данные о гироскопе исчисляются в радианах в секунду вместо степеней в секунду. Кроме того, большие значения оси z и маленький x-и значения оси Y указывают что устройство, вращаемое вокруг оси z только.
figure plot(time, gyro) title('Gyroscope') ylabel('rad/s') legend('x-axis', 'y-axis', 'z-axis')

Поскольку чтение оси z акселерометра - приблизительно 10, записанные данные исчисляется в метрах в секунду в квадрате вместо g's.
figure plot(time, accel) title('Accelerometer') ylabel('m/s^2') legend('x-axis', 'y-axis', 'z-axis')

Преобразуйте регистрируемые данные о кватернионе ориентации в Углы Эйлера в градусах. Ось z изменяется, в то время как x-и ось Y относительно фиксируются. Это совпадает с гироскопом и показаниями акселерометра. Поэтому никакое отрицание оси или вращение не требуются. Однако Угол Эйлера оси z уменьшается, в то время как чтение гироскопа положительно. Это означает, что регистрируемый кватернион ориентации, как ожидают, будет применен как оператор вращения точки (
). Для того, чтобы иметь соответствие кватерниона ориентации фильтры ориентаций, такие как imufilter, кватернион должен быть применен как оператор вращения системы координат (
). Это может быть сделано путем спряжения регистрируемого кватерниона ориентации.
figure plot(time, eulerd(orient, 'ZYX', 'frame')) title('Euler Angles') ylabel('\circ') % Degrees symbol. legend('z-axis', 'y-axis', 'x-axis')

Оценка частоты дискретизации может быть получена путем взятия среднего значения различия между метками времени. Заметьте, что существуют некоторые отклонения в разнице во времени. Поскольку отклонения малы для этого записанные данные, среднее значение разницы во времени может использоваться. В качестве альтернативы данные о датчике могли быть интерполированы с помощью меток времени и равномерно распределенных меток времени как точки запроса.
deltaTimes = seconds(diff(time)); sampleRate = 1/mean(deltaTimes); figure plot([deltaTimes, repmat(mean(deltaTimes), numel(deltaTimes), 1)]) title('Time Differences') ylabel('s') legend('differences', 'mean')

imufilter КватернионСпрягайте регистрируемый кватернион ориентации прежде, чем сравнить его с предполагаемым кватернионом ориентации от imufilter. Из графика ниже, в оценке Угла Эйлера оси z существует все еще постоянное смещение. Это вызвано тем, что imufilter принимает, что начальная ориентация устройства выравнивается с системой координат навигации.
loggedOrient = conj(orient); filt = imufilter('SampleRate', sampleRate); estOrient = filt(accel, gyro); figure subplot(2, 1, 1) plot(time, eulerd(loggedOrient, 'ZYX', 'frame'), '--') title('Logged Euler Angles') ylabel('\circ') % Degrees symbol. legend('z-axis', 'y-axis', 'x-axis') subplot(2, 1, 2) plot(time, eulerd(estOrient, 'ZYX', 'frame')) title('|imufilter| Euler Angles') ylabel('\circ') % Degrees symbol. legend('z-axis', 'y-axis', 'x-axis')

imufilter ОриентацияВыровняйте imufilter кватернион ориентации с регистрируемым кватернионом ориентации путем применения систематической ошибки с помощью первого регистрируемого кватерниона ориентации. Для кватернионов постоянное смещение вращения может быть применено путем предварительного умножения вращений системы координат или постумножения вращений точки. Начиная с imufilter кватернионы отчетов как операторы вращения системы координат, предполагаемые кватернионы ориентации предварительно умножаются на первый регистрируемый кватернион ориентации.
alignedEstOrient = loggedOrient(1) .* estOrient; figure subplot(2, 1, 1) plot(time, eulerd(loggedOrient, 'ZYX', 'frame'), '--') title('Logged Euler Angles') ylabel('\circ') % Degrees symbol. legend('z-axis', 'y-axis', 'x-axis') subplot(2, 1, 2) plot(time, eulerd(alignedEstOrient, 'ZYX', 'frame')) title('Aligned |imufilter| Euler Angles') ylabel('\circ') % Degrees symbol. legend('z-axis', 'y-axis', 'x-axis')

Для MAT-файла в этом примере вы проверяли следующие аспекты на выравнивание:
Модули для акселерометра и гироскопа.
Выравнивания осей акселерометра и гироскопа.
Оператор вращения кватерниона ориентации (точка:
или система координат:
)
Различные модульные преобразования, выравнивания осей и преобразования кватерниона, возможно, должны быть применены в зависимости от формата записанных данных.