Регистрируемое выравнивание данных о датчике для оценки ориентации

В этом примере показано, как выровнять и предварительно обработать регистрируемые данные о датчике. Это позволяет фильтрам сплава выполнять оценку ориентации как ожидалось. Записанные данные были собраны из акселерометра и гироскопа, смонтированного на наземном транспортном средстве.

Загрузите регистрируемые данные о датчике

Загрузите регистрируемые данные об инерционном модуле измерения (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 относительно фиксируются. Это совпадает с гироскопом и показаниями акселерометра. Therefoe, никакое отрицание оси или вращение требуются. Однако Угол Эйлера оси 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-файла в этом примере вы проверяли следующие аспекты на выравнивание:

  • Модули для акселерометра и гироскопа.

  • Выравнивания осей акселерометра и гироскопа.

  • Оператор вращения кватерниона ориентации (точка: или система координат:)

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