Сгенерируйте показания IMU нев центре

В этом примере показано, как сгенерировать показания инерциального измерительного блока (IMU) от датчика, который смонтирован на наземном транспортном средстве. В зависимости от местоположения датчика ускорения IMU отличаются.

Создайте траекторию

Задайте waypoint траекторию транспортного средства и вычислите положения транспортного средства с помощью lookupPose.

% Sampling rate.
Fs = 100;

% Waypoints and times of arrival.
waypoints = [1 1 1; 3 1 1; 3 0 0; 0 0 0];
t = [1; 10; 20; 30];

% Create trajectory and compute pose.
traj = waypointTrajectory(waypoints, t, "SampleRate", Fs);
[posVeh, orientVeh, velVeh, accVeh, angvelVeh] = lookupPose(traj, ...
    t(1):1/Fs:t(end));

Создайте датчик и задайте смещение

Создайте два imuSensor с 9 осями объекты состоят из акселерометра, гироскопа и датчиков магнитометра. Один imuSensor объект генерирует показания IMU, смонтированного в начале координат транспортного средства, и другой генерирует показания IMU, смонтированного в сиденье водителя. Затем задайте перемещение между источником транспортного средства и IMU, смонтированным в сиденье водителя. Вызовите helperPlotIMU визуализировать местоположения датчиков.

% IMU at vehicle origin.
imu = imuSensor("accel-gyro-mag", "SampleRate", Fs);

% IMU at driver's seat.
mountedIMU = imuSensor("accel-gyro-mag", "SampleRate", Fs);

% Position and orientation offset of the vehicle and the mounted IMU.
posVeh2IMU = [2.4 0.5 0.4];
orientVeh2IMU = quaternion([0 0 90], "eulerd", "ZYX", "frame");

% Visualization.
helperPlotIMU(posVeh(1,:), orientVeh(1,:), posVeh2IMU, orientVeh2IMU);

Вычислите траекторию IMU Используя траекторию транспортного средства

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

[posIMU, orientIMU, velIMU, accIMU, angvelIMU] = transformMotion( ...
    posVeh2IMU, orientVeh2IMU, ...
    posVeh, orientVeh, velVeh, accVeh, angvelVeh);

Сгенерируйте показания датчика

Сгенерируйте показания IMU и для IMU, смонтированного в начале координат транспортного средства и для IMU, смонтированного в сиденье водителя.

% IMU at vehicle origin.
[accel, gyro, mag] = imu(accVeh, angvelVeh, orientVeh);

% IMU at driver's seat.
[accelMounted, gyroMounted, magMounted] = mountedIMU( ...
    accIMU, angvelIMU, orientIMU);

Сравните показания акселерометра

Сравните показания акселерометра двух IMUs. Заметьте, что ускорение оси X отличается из-за нецентрального местоположения.

figure('Name', 'Accelerometer Comparison')
subplot(3, 1, 1)
plot([accel(:,1), accelMounted(:,1)])
legend('Aligned with Vehicle', 'Off-centered')
title('Accelerometer')
ylabel('x-axis (m/s^2)')
subplot(3, 1, 2)
plot([accel(:,2), accelMounted(:,2)])
ylabel('y-axis (m/s^2)')
subplot(3, 1, 3)
plot([accel(:,3), accelMounted(:,3)])
ylabel('z-axis (m/s^2)')

Сравните показания гироскопа

Сравните показания гироскопа двух IMUs.

figure('Name', 'Gyroscope Comparison')
subplot(3, 1, 1)
plot([gyro(:,1), gyroMounted(:,1)])
ylim([-0.22 0.1])
legend('Aligned with Vehicle', 'Off-centered')
title('Gyroscope')
ylabel('x-axis (rad/s)')
subplot(3, 1, 2)
plot([gyro(:,2), gyroMounted(:,2)])
ylabel('y-axis (rad/s)')
subplot(3, 1, 3)
plot([gyro(:,3), gyroMounted(:,3)])
ylabel('z-axis (rad/s)')

Сравните показания магнитометра

Сравните показания магнитометра двух IMUs.

figure('Name', 'Magnetometer Comparison')
subplot(3, 1, 1)
plot([mag(:,1), magMounted(:,1)])
legend('Aligned with Vehicle', 'Off-centered')
title('Magnetometer')
ylabel('x-axis (\muT)')
subplot(3, 1, 2)
plot([mag(:,2), magMounted(:,2)])
ylabel('y-axis (\muT)')
subplot(3, 1, 3)
plot([mag(:,3), magMounted(:,3)])
ylabel('z-axis (\muT)')

Для просмотра документации необходимо авторизоваться на сайте