Main Content

Esta página se ha traducido mediante traducción automática. Haga clic aquí para ver la última versión en inglés.

tune

Ajuste los parámetros ahrs10filter para reducir el error de estimación

Desde R2021a

Descripción

tunedMeasureNoise = tune(filter,measureNoise,sensorData,groundTruth) ajusta las propiedades del objeto de filtro ahrs10filter , filter y los ruidos de medición para reducir la raíz cuadrática media (RMS) error de estimación de estado entre los datos del sensor fusionado y de ground-truth. La función también devuelve el ruido de medición ajustado, tunedMeasureNoise. La función utiliza los valores de propiedad en el filtro y el ruido de medición proporcionado en la estructura measureNoise como estimación inicial para el algoritmo de optimización.

ejemplo

tunedMeasureNoise = tune(___,config) especifica la configuración de ajuste basada en un objeto tunerconfig , config.

Ejemplos

contraer todo

Cargue los datos registrados del sensor y los datos ground-truth.

load('ahrs10filterTuneData.mat');

Cree tablas para los datos del sensor y los datos de verdad.

sensorData = table(Accelerometer,Gyroscope,...
    Magnetometer,Altimeter);
groundTruth = table(Orientation, Altitude);

Cree un objeto de filtro ahrs10filter .

filter = ahrs10filter('State', initialState, ...
    'StateCovariance', initialStateCovariance);      

Cree un objeto de configuración de ajustador para el filtro. Establezca las iteraciones máximas en diez y establezca el límite objetivo en 0,001.

cfg = tunerconfig('ahrs10filter','MaxIterations',10,...
          'ObjectiveLimit',1e-3);

Utilice la función de ruido del ajustador para obtener un conjunto de ruidos de sensores iniciales utilizados en el filtro

measNoise = tunernoise('ahrs10filter')
measNoise = struct with fields:
    MagnetometerNoise: 1
       AltimeterNoise: 1

Ajuste el filtro y obtenga los parámetros ajustados.

tunedNoise = tune(filter, measNoise, sensorData, ...
    groundTruth, cfg);
    Iteration    Parameter                 Metric
    _________    _________                 ______
    1            AccelerometerNoise        0.0526
    1            GyroscopeNoise            0.0526
    1            MagnetometerNoise         0.0523
    1            AltimeterNoise            0.0515
    1            AccelerometerBiasNoise    0.0510
    1            GyroscopeBiasNoise        0.0510
    1            GeomagneticVectorNoise    0.0510
    1            MagnetometerBiasNoise     0.0508
    2            AccelerometerNoise        0.0508
    2            GyroscopeNoise            0.0508
    2            MagnetometerNoise         0.0504
    2            AltimeterNoise            0.0494
    2            AccelerometerBiasNoise    0.0490
    2            GyroscopeBiasNoise        0.0490
    2            GeomagneticVectorNoise    0.0490
    2            MagnetometerBiasNoise     0.0487
    3            AccelerometerNoise        0.0487
    3            GyroscopeNoise            0.0487
    3            MagnetometerNoise         0.0482
    3            AltimeterNoise            0.0472
    3            AccelerometerBiasNoise    0.0467
    3            GyroscopeBiasNoise        0.0467
    3            GeomagneticVectorNoise    0.0467
    3            MagnetometerBiasNoise     0.0463
    4            AccelerometerNoise        0.0463
    4            GyroscopeNoise            0.0463
    4            MagnetometerNoise         0.0456
    4            AltimeterNoise            0.0446
    4            AccelerometerBiasNoise    0.0442
    4            GyroscopeBiasNoise        0.0442
    4            GeomagneticVectorNoise    0.0442
    4            MagnetometerBiasNoise     0.0437
    5            AccelerometerNoise        0.0437
    5            GyroscopeNoise            0.0437
    5            MagnetometerNoise         0.0428
    5            AltimeterNoise            0.0417
    5            AccelerometerBiasNoise    0.0413
    5            GyroscopeBiasNoise        0.0413
    5            GeomagneticVectorNoise    0.0413
    5            MagnetometerBiasNoise     0.0408
    6            AccelerometerNoise        0.0408
    6            GyroscopeNoise            0.0408
    6            MagnetometerNoise         0.0397
    6            AltimeterNoise            0.0385
    6            AccelerometerBiasNoise    0.0381
    6            GyroscopeBiasNoise        0.0381
    6            GeomagneticVectorNoise    0.0381
    6            MagnetometerBiasNoise     0.0375
    7            AccelerometerNoise        0.0375
    7            GyroscopeNoise            0.0375
    7            MagnetometerNoise         0.0363
    7            AltimeterNoise            0.0351
    7            AccelerometerBiasNoise    0.0347
    7            GyroscopeBiasNoise        0.0347
    7            GeomagneticVectorNoise    0.0347
    7            MagnetometerBiasNoise     0.0342
    8            AccelerometerNoise        0.0342
    8            GyroscopeNoise            0.0342
    8            MagnetometerNoise         0.0331
    8            AltimeterNoise            0.0319
    8            AccelerometerBiasNoise    0.0316
    8            GyroscopeBiasNoise        0.0316
    8            GeomagneticVectorNoise    0.0316
    8            MagnetometerBiasNoise     0.0313
    9            AccelerometerNoise        0.0313
    9            GyroscopeNoise            0.0313
    9            MagnetometerNoise         0.0313
    9            AltimeterNoise            0.0301
    9            AccelerometerBiasNoise    0.0298
    9            GyroscopeBiasNoise        0.0298
    9            GeomagneticVectorNoise    0.0298
    9            MagnetometerBiasNoise     0.0296
    10           AccelerometerNoise        0.0296
    10           GyroscopeNoise            0.0296
    10           MagnetometerNoise         0.0296
    10           AltimeterNoise            0.0285
    10           AccelerometerBiasNoise    0.0283
    10           GyroscopeBiasNoise        0.0283
    10           GeomagneticVectorNoise    0.0283
    10           MagnetometerBiasNoise     0.0282

Fusione los datos del sensor utilizando el filtro ajustado.

N = size(sensorData,1);
qEstTuned = quaternion.zeros(N,1);
altEstTuned = zeros(N,1);
for ii=1:N
    predict(filter,Accelerometer(ii,:),Gyroscope(ii,:));
    if all(~isnan(Magnetometer(ii,1)))
        fusemag(filter, Magnetometer(ii,:),tunedNoise.MagnetometerNoise);
    end
    if ~isnan(Altimeter(ii))
        fusealtimeter(filter, Altimeter(ii),tunedNoise.AltimeterNoise);
    end
    [altEstTuned(ii), qEstTuned(ii)] = pose(filter);
end

Calcule los errores RMS.

orientationErrorTuned = rad2deg(dist(qEstTuned, Orientation));
rmsOrientationErrorTuned = sqrt(mean(orientationErrorTuned.^2))
rmsOrientationErrorTuned = 2.2899
positionErrorTuned = altEstTuned - Altitude;
rmsPositionErrorTuned = sqrt(mean( positionErrorTuned.^2))
rmsPositionErrorTuned = 0.0199

Visualiza los resultados.

figure;
t = (0:N-1)./ filter.IMUSampleRate;
subplot(2,1,1)
plot(t, positionErrorTuned, 'b');
title("Tuned ahrs10filter" + newline + ...
    "Altitude Error")
xlabel('Time (s)');
ylabel('Position Error (meters)')
subplot(2,1,2)
plot(t, orientationErrorTuned, 'b');
title("Orientation Error")
xlabel('Time (s)');
ylabel('Orientation Error (degrees)');

Figure contains 2 axes objects. Axes object 1 with title Tuned ahrs10filter Altitude Error, xlabel Time (s), ylabel Position Error (meters) contains an object of type line. Axes object 2 with title Orientation Error, xlabel Time (s), ylabel Orientation Error (degrees) contains an object of type line.

Argumentos de entrada

contraer todo

Objeto de filtro, especificado como objeto ahrs10filter .

Ruido de medición, especificado como estructura. La función utiliza la entrada de ruido de medición como estimación inicial para ajustar el ruido de medición. La estructura debe contener estos campos:

Nombre del campoDescripción
MagnetometerNoiseVariación del ruido del magnetómetro, especificada como escalar en (μT) 2
AltimeterNoiseVariación del ruido del altímetro, especificada como escalar en m2

Datos del sensor, especificados como table. En cada fila, los datos del sensor se especifican como:

  • Accelerometer — Datos del acelerómetro, especificados como un vector de escalares de 1 por 3 en m2/s.

  • Gyroscope— Datos del giroscopio, especificados como un vector de escalares de 1 por 3 en rad/s.

  • Magnetometer — Datos del magnetómetro, especificados como un vector de escalares de 1 por 3 en μT.

  • Altimeter — Datos del altímetro, especificados como escalar en metros.

Si el magnetómetro no produce mediciones, especifique la entrada correspondiente como NaN. Si establece la propiedad Cost de la entrada de configuración del ajustador, config, en Custom, entonces puede usar otros tipos de datos para sensorData entrada según su elección.

Datos ground-truth, especificados como table. En cada fila, la tabla puede contener opcionalmente cualquiera de estas variables:

  • Orientation — Orientación desde el marco de navegación hasta el marco del cuerpo, especificada como quaternion o una matriz de rotación de 3 por 3.

  • Altitude — Altitud, especificada como escalar en metros.

  • VertialVelocity — Velocidad en la dirección vertical, especificada como un escalar en m/s.

  • DeltaAngleBias — Sesgo del ángulo delta, especificado como un vector de escalares de 1 por 3 en radianes.

  • DeltaVelocityBias — Sesgo de velocidad delta, especificado como un vector de escalares de 1 por 3 en m/s.

  • GeomagneticFieldVector — Vector de campo geomagnético en el marco de navegación, especificado como un vector de escalares de 1 por 3.

  • MagnetometerBias — Sesgo del magnetómetro en la estructura del cuerpo, especificado como un vector de escalares de 1 por 3 en μT.

La función procesa cada fila de las tablas sensorData y groundTruth secuencialmente para calcular la estimación del estado y el error RMS a partir de ground-truth. Las variables de estado que no están presentes en la entrada groundTruth se ignoran para la comparación. Las tablas sensorData y groundTruth deben tener el mismo número de filas.

Si establece la propiedad Cost de la entrada de configuración del ajustador, config, en Custom, entonces puede usar otros tipos de datos para groundTruth entrada según su elección.

Configuración del ajustador, especificada como un objeto tunerconfig .

Argumentos de salida

contraer todo

Ruido de medición ajustado, devuelto como una estructura. La estructura contiene estos campos.

Nombre del campoDescripción
MagnetometerNoiseVarianza del ruido del magnetómetro, especificada como escalar en (μT) 2
AltimeterNoiseVariación del ruido del altímetro, especificada como escalar en m2

Referencias

[1] Abbeel, P., Coates, A., Montemerlo, M., Ng, A.Y. and Thrun, S. Discriminative Training of Kalman Filters. In Robotics: Science and systems, Vol. 2, pp. 1, 2005.

Historial de versiones

Introducido en R2021a

Consulte también

|