Введение в симуляцию измерений IMU

В этом примере показано, как симулировать измерения инерциального измерительного блока (IMU) с помощью imuSensor Системный объект. IMU может включать комбинацию отдельных датчиков, включая гироскоп, акселерометр и магнитометр. Можно задать свойства отдельных датчиков с помощью gyroparams, accelparams, и magparams, соответственно.

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

Параметры по умолчанию

Параметры по умолчанию для модели гироскопа симулируют идеальный сигнал. Учитывая синусоидальный вход, гироскоп вывел, должен соответствовать точно.

params = gyroparams
params = 
  gyroparams with properties:

    MeasurementRange: Inf             rad/s      
          Resolution: 0               (rad/s)/LSB
        ConstantBias: [0 0 0]         rad/s      
    AxesMisalignment: [3x3 double]    %          

       NoiseDensity: [0 0 0]    (rad/s)/√Hz
    BiasInstability: [0 0 0]    rad/s      
         RandomWalk: [0 0 0]    (rad/s)*√Hz

           TemperatureBias: [0 0 0]    (rad/s)/°C    
    TemperatureScaleFactor: [0 0 0]    %/°C          
          AccelerationBias: [0 0 0]    (rad/s)/(m/s²)

% Generate N samples at a sampling rate of Fs with a sinusoidal frequency
% of Fc.
N = 1000;
Fs = 100;
Fc = 0.25;

t = (0:(1/Fs):((N-1)/Fs)).';
acc = zeros(N, 3);
angvel = zeros(N, 3);
angvel(:,1) = sin(2*pi*Fc*t);

imu = imuSensor('SampleRate', Fs, 'Gyroscope', params);
[~, gyroData] = imu(acc, angvel);

figure
plot(t, angvel(:,1), '--', t, gyroData(:,1))
xlabel('Time (s)')
ylabel('Angular Velocity (rad/s)')
title('Ideal Gyroscope Data')
legend('x (ground truth)', 'x (gyroscope)')

Figure contains an axes object. The axes object with title Ideal Gyroscope Data contains 2 objects of type line. These objects represent x (ground truth), x (gyroscope).

Аппаратная настройка параметра

Следующие аппаратные ограничения модели параметров или дефекты. Некоторые могут быть откорректированы посредством калибровки.

MeasurementRange определяет максимальное абсолютное значение, о котором сообщает гироскоп. Насыщаются большие абсолютные значения. Эффект показывают путем установки области значений измерения на значение, меньшее, чем амплитуда синусоидальной скорости вращения основной истины.

imu = imuSensor('SampleRate', Fs, 'Gyroscope', params);
imu.Gyroscope.MeasurementRange = 0.5; % rad/s

[~, Gyrodata] = imu (acc, angvel);

фигура
график (t, angvel (: 1), '--', t, Gyrodata (: 1))
xlabel'Time (s)')
yLabel 'Angular Velocity (rad/s)')
заголовок'Saturated Gyroscope Data')
легенда'x (ground truth)', 'x (gyroscope)')

Figure contains an axes object. The axes object with title Saturated Gyroscope Data contains 2 objects of type line. These objects represent x (ground truth), x (gyroscope).

Resolution влияет на размер шага цифровых измерений. Используйте этот параметр, чтобы смоделировать эффекты квантования от аналого-цифрового конвертера (ADC). Эффект показывают путем увеличения параметра до намного большего значения, чем типично.

imu = imuSensor('SampleRate', Fs, 'Gyroscope', params);
imu.Gyroscope.Resolution = 0.5; % (rad/s)/LSB

[~, Gyrodata] = imu (acc, angvel);

фигура
график (t, angvel (: 1), '--', t, Gyrodata (: 1))
xlabel'Time (s)')
yLabel 'Angular Velocity (rad/s)')
заголовок'Quantized Gyroscope Data')
легенда'x (ground truth)', 'x (gyroscope)')

Figure contains an axes object. The axes object with title Quantized Gyroscope Data contains 2 objects of type line. These objects represent x (ground truth), x (gyroscope).

AxesMisalignment сумма скоса в осях датчика. Этот скос обычно происходит, когда датчик смонтирован к PCB и может быть откорректирован посредством калибровки. Эффект показывают путем скоса оси X немного и графического вывода и оси X и оси Y.

imu = imuSensor('SampleRate', Fs, 'Gyroscope', params);
xMisalignment = 2; % percent
imu.Gyroscope.AxesMisalignment = [xMisalignment, 0, 0]; % percent

[~, Gyrodata] = imu (acc, angvel);

фигура
график (t, angvel (: 1:2), '--', t, Gyrodata (: 1:2))
xlabel'Time (s)')
yLabel 'Angular Velocity (rad/s)')
заголовок'Misaligned Gyroscope Data')
легенда'x (ground truth)', 'y (ground truth)', ...
    'x (gyroscope)', 'y (gyroscope)')

Figure contains an axes object. The axes object with title Misaligned Gyroscope Data contains 4 objects of type line. These objects represent x (ground truth), y (ground truth), x (gyroscope), y (gyroscope).

ConstantBias происходит в измерениях датчика из-за аппаратных дефектов. Поскольку это смещение не вызывается факторами окружающей среды, такими как температура, оно может быть откорректировано посредством калибровки.

imu = imuSensor('SampleRate', Fs, 'Gyroscope', params);
xBias = 0.4; % rad/s
imu.Gyroscope.ConstantBias = [xBias, 0, 0]; % rad/s

[~, Gyrodata] = imu (acc, angvel);

фигура
график (t, angvel (: 1), '--', t, Gyrodata (: 1))
xlabel'Time (s)')
yLabel 'Angular Velocity (rad/s)')
заголовок'Biased Gyroscope Data')
легенда'x (ground truth)', 'x (gyroscope)')

Figure contains an axes object. The axes object with title Biased Gyroscope Data contains 2 objects of type line. These objects represent x (ground truth), x (gyroscope).

Случайная шумовая настройка параметра

Следующая модель параметров случайный шум в измерениях датчика. Больше информации об этих параметрах может быть найдено в Инерционном Анализе Шума Датчика Используя пример Аллана Вэриэнса.

NoiseDensity сумма белого шума при измерении сенсором. Это иногда называется углом случайным обходом для гироскопов или скорости случайный обход для акселерометров.

rng('default')

imu = imuSensor('SampleRate', Fs, 'Gyroscope', params);
imu.Gyroscope.NoiseDensity = 0.0125; % (rad/s)/sqrt(Hz)

[~, Gyrodata] = imu (acc, angvel);

фигура
график (t, angvel (: 1), '--', t, Gyrodata (: 1))
xlabel'Time (s)')
yLabel 'Angular Velocity (rad/s)')
заголовок'White Noise Gyroscope Data')
легенда'x (ground truth)', 'x (gyroscope)')

Figure contains an axes object. The axes object with title White Noise Gyroscope Data contains 2 objects of type line. These objects represent x (ground truth), x (gyroscope).

BiasInstability количество гвоздики или шума мерцания при измерении сенсором.

imu = imuSensor('SampleRate', Fs, 'Gyroscope', params);
imu.Gyroscope.BiasInstability = 0.02; % rad/s

[~, Gyrodata] = imu (acc, angvel);

фигура
график (t, angvel (: 1), '--', t, Gyrodata (: 1))
xlabel'Time (s)')
yLabel 'Angular Velocity (rad/s)')
заголовок'Bias Instability Gyroscope Data')
легенда'x (ground truth)', 'x (gyroscope)')

Figure contains an axes object. The axes object with title Bias Instability Gyroscope Data contains 2 objects of type line. These objects represent x (ground truth), x (gyroscope).

RandomWalk количество броуновского шума при измерении сенсором. Это иногда называется случайным блужданием по скорости для гироскопов или случайным блужданием по ускорению для акселерометров.

imu = imuSensor('SampleRate', Fs, 'Gyroscope', params);
imu.Gyroscope.RandomWalk = 0.091; % (rad/s)*sqrt(Hz)

[~, Gyrodata] = imu (acc, angvel);

фигура
график (t, angvel (: 1), '--', t, Gyrodata (: 1))
xlabel'Time (s)')
yLabel 'Angular Velocity (rad/s)')
заголовок'Random Walk Gyroscope Data')
легенда'x (ground truth)', 'x (gyroscope)')

Figure contains an axes object. The axes object with title Random Walk Gyroscope Data contains 2 objects of type line. These objects represent x (ground truth), x (gyroscope).

Экологическая настройка параметра

Следующие параметры моделируют шум, который возникает из-за изменений окружающей среды датчика.

TemperatureBias смещение, добавленное к измерениям датчика из-за перепада температур от рабочей температуры по умолчанию. Большинство таблиц данных датчика перечисляет рабочую температуру по умолчанию как 25 градусов Цельсия. Это смещение показывают путем установки параметра на ненулевое значение и установки рабочей температуры на значение выше 25 градусов Цельсия.

imu = imuSensor('SampleRate', Fs, 'Gyroscope', params);
imu.Gyroscope.TemperatureBias = 0.06; % (rad/s)/(degrees C)
imu.Temperature = 35;

[~, Gyrodata] = imu (acc, angvel);

фигура
график (t, angvel (: 1), '--', t, Gyrodata (: 1))
xlabel'Time (s)')
yLabel 'Angular Velocity (rad/s)')
заголовок'Temperature-Biased Gyroscope Data')
легенда'x (ground truth)', 'x (gyroscope)')

Figure contains an axes object. The axes object with title Temperature-Biased Gyroscope Data contains 2 objects of type line. These objects represent x (ground truth), x (gyroscope).

TemperatureScaleFactor ошибка в масштабном коэффициенте датчика из-за изменений в рабочей температуре. Это вызывает ошибки в масштабировании измерения; другими словами, меньшие идеальные значения имеют меньше ошибки, чем большие значения. Эту ошибку показывают путем линейного увеличения температуры.

imu = imuSensor('SampleRate', Fs, 'Gyroscope', params);
imu.Gyroscope.TemperatureScaleFactor = 3.2; % %/(degrees C)

standardTemperature = 25; % degrees C
temperatureSlope = 2; % (degrees C)/s

температура = temperatureSlope*t + standardTemperature;

Gyrodata = нули (N, 3);
for i = 1:N
    imu.Temperature = температура (i);
    [~, Gyrodata (i, :)] = imu (acc (i, :), angvel (i, :));
end

фигура
график (t, angvel (: 1), '--', t, Gyrodata (: 1))
xlabel'Time (s)')
yLabel 'Angular Velocity (rad/s)')
заголовок'Temperature-Scaled Gyroscope Data')
легенда'x (ground truth)', 'x (gyroscope)')

Figure contains an axes object. The axes object with title Temperature-Scaled Gyroscope Data contains 2 objects of type line. These objects represent x (ground truth), x (gyroscope).

AccelerationBias смещение, добавленное к измерению гироскопа из-за линейных ускорений. Этот параметр характерен для гироскопа. Это смещение показывают путем установки параметра на ненулевое значение и использования ненулевого входного ускорения.

imu = imuSensor('SampleRate', Fs, 'Gyroscope', params);
imu.Gyroscope.AccelerationBias = 0.3; % (rad/s)/(m/s^2)

acc (: 1) = 1;

[~, Gyrodata] = imu (acc, angvel);

фигура
график (t, angvel (: 1), '--', t, Gyrodata (: 1))
xlabel'Time (s)')
yLabel 'Angular Velocity (rad/s)')
заголовок'Acceleration-Biased Gyroscope Data')
легенда'x (ground truth)', 'x (gyroscope)')

Figure contains an axes object. The axes object with title Acceleration-Biased Gyroscope Data contains 2 objects of type line. These objects represent x (ground truth), x (gyroscope).