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

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

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

Загрузите регистрируемые данные об инерционном модуле измерения (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 уменьшается, в то время как чтение гироскопа положительно. Это означает, что регистрируемый кватернион ориентации, как ожидают, будет применен как оператор вращения точки ($v' = qvq^{*}$). Для того, чтобы иметь соответствие кватерниона ориентации фильтры ориентаций, такие как imufilter, кватернион должен быть применен как оператор вращения системы координат ($v' = q^{*}vq$). Это может быть сделано путем спряжения регистрируемого кватерниона ориентации.

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-файла в этом примере вы проверяли следующие аспекты на выравнивание:

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

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

  • Оператор вращения кватерниона ориентации (точка:$v' = qvq^{*}$ или система координат:$v' = q^{*}vq$)

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