Contenido principal

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

insfilterNonholonomic

Estimar la pose con restricciones no holonómicas.

Descripción

El objeto insfilterNonholonomic implementa la fusión de sensores de la unidad de medición inercial (IMU) y datos GPS para estimar la postura en el marco de referencia NED (o ENU). Los datos de IMU se derivan de datos de giroscopio y acelerómetro. El filtro utiliza un vector de estado de 16 elementos para rastrear los sesgos del cuaternión de orientación, la velocidad, la posición y el sensor IMU. El objeto insfilterNonholonomic utiliza un filtro Kalman extendido para estimar estas cantidades.

Creación

Descripción

filter = insfilterNonholonomic crea un objeto insfilterErrorState con valores de propiedad predeterminados.

ejemplo

filter = insfilterNonholonomic('ReferenceFrame',RF) le permite especificar el marco de referencia, RF, del filter.

filter = insfilterNonholonomic(___,Name=Value) establece una o más propiedades utilizando argumentos de nombre-valor además de cualquiera de los argumentos de entrada anteriores.

Argumentos de entrada

expandir todo

Sistema de coordenadas de navegación local, especificado como 'NED' (Noreste-Abajo) o 'ENU' (Este-Norte-Arriba).

Tipos de datos: char | string

Propiedades

expandir todo

Frecuencia de muestreo de la IMU en Hz, especificada como un escalar positivo.

Tipos de datos: single | double

Ubicación de referencia, especificada como un vector fila de 3 elementos en coordenadas geodésicas (latitud, longitud y altitud). La altitud es la altura sobre el modelo de elipsoide de referencia, WGS84. Las unidades de ubicación de referencia son [grados grados metros].

Tipos de datos: single | double

Factor de diezmado para la corrección de restricciones cinemáticas, especificado como un escalar entero positivo.

Tipos de datos: single | double

Varianza del ruido del proceso multiplicativo del giroscopio en (rad/s)2, especificada como un vector fila escalar o de 3 elementos de números finitos reales positivos.

  • Si GyroscopeNoise se especifica como un vector fila, los elementos corresponden al ruido en los ejes x, y y z del giroscopio, respectivamente.

  • Si GyroscopeNoise se especifica como un escalar, el elemento único se aplica a los ejes x, y y z del giroscopio.

Tipos de datos: single | double

Variación del ruido del proceso multiplicativo a partir del sesgo del giroscopio en (rad/s)2, especificado como un vector fila escalar o de 3 elementos de números finitos reales positivos. El sesgo del giroscopio se modela como un proceso de ruido blanco filtrado de paso bajo.

  • Si GyroscopeBiasNoise se especifica como un vector fila, los elementos corresponden al ruido en los ejes x, y y z del giroscopio, respectivamente.

  • Si GyroscopeBiasNoise se especifica como un escalar, el elemento único se aplica a los ejes x, y y z del giroscopio.

Tipos de datos: single | double

Factor de caída para el sesgo del giroscopio, especificado como un escalar en el rango [0,1]. Un factor de decaimiento de 0 modela el sesgo del giroscopio como un proceso de ruido blanco. Un factor de decaimiento de 1 modela el sesgo del giroscopio como un proceso de caminata aleatoria.

Tipos de datos: single | double

Varianza del ruido del proceso multiplicativo del acelerómetro en (m/s2)2, especificada como un vector fila escalar o de 3 elementos de números finitos reales positivos.

  • Si AccelerometerNoise se especifica como un vector fila, los elementos corresponden al ruido en los ejes x, y y z del acelerómetro, respectivamente.

  • Si AccelerometerNoise se especifica como escalar, el elemento individual se aplica a cada eje.

Tipos de datos: single | double

Variación del ruido del proceso multiplicativo a partir del sesgo del acelerómetro en (m/s2)2, especificada como un vector fila escalar o de 3 elementos de números reales positivos. El sesgo del acelerómetro se modela como un proceso de ruido blanco filtrado de paso bajo.

  • Si AccelerometerBiasNoise se especifica como un vector fila, los elementos corresponden al ruido en los ejes x, y y z del acelerómetro, respectivamente.

  • Si AccelerometerBiasNoise se especifica como escalar, el elemento individual se aplica a cada eje.

Factor de caída para el sesgo del acelerómetro, especificado como un escalar en el rango [0,1]. Un factor de decaimiento de 0 modela el sesgo del acelerómetro como un proceso de ruido blanco. Un factor de decaimiento de 1 modela el sesgo del acelerómetro como un proceso de caminata aleatoria.

Tipos de datos: single | double

Vector de estado del filtro de Kalman extendido. Los valores estatales representan:

EstadoUnidadesÍndice
Orientación (partes del cuaternión)N / A1:4
Polarización del giroscopio (XYZ)rad/s5:7
Posición (NED o ENU)metro8:10
Velocidad (NED o ENU)EM11:13
Polarización del acelerómetro (XYZ)m/s214:16

Tipos de datos: single | double

Covarianza de error de estado para el filtro de Kalman extendido, especificada como una matriz de 16 por 16 elementos o números reales.

Tipos de datos: single | double

Restricciones de velocidad de ruido en (m/s)2, especificado como un escalar no negativo.

Tipos de datos: single | double

Funciones del objeto

correctEstados correctos utilizando mediciones de estado directas para insfilterNonholonomic
residualResiduos y covarianzas residuales de mediciones de estado directas para insfilterNonholonomic
fusegpsEstados correctos utilizando datos GPS para insfilterNonholonomic
residualgpsResiduos y covarianza residual de las mediciones GPS para insfilterNonholonomic
poseEstimación de la orientación y posición actual para insfilterNonholonomic
predictActualizar estados utilizando datos del acelerómetro y giroscopio para insfilterNonholonomic
resetRestablecer estados internos para insfilterNonholonomic
stateinfoMostrar información del vector de estado para insfilterNonholonomic
tuneAjuste los parámetros insfilterNonholonomic para reducir el error de estimación
copyCrear copia de insfitlerNonholonomic

Ejemplos

contraer todo

Este ejemplo muestra cómo estimar la pose de un vehículo terrestre a partir de las mediciones registradas de los sensores IMU y GPS y la orientación y posición ground-truth.

Cargue los datos registrados de un vehículo terrestre siguiendo una trayectoria circular.

load('loggedGroundVehicleCircle.mat','imuFs','localOrigin','initialState','initialStateCovariance','accelData',...
      'gyroData','gpsFs','gpsLLA','Rpos','gpsVel','Rvel','trueOrient','truePos');

Inicializar el objeto insfilterNonholonomic.

filt = insfilterNonholonomic;
filt.IMUSampleRate = imuFs;
filt.ReferenceLocation = localOrigin;
filt.State = initialState;
filt.StateCovariance = initialStateCovariance;
    
imuSamplesPerGPS = imuFs/gpsFs;

Registre datos para el cálculo de métricas finales. Utilice la función de objeto predict para estimar el estado del filtro según los datos del acelerómetro y del giroscopio. Luego corrija el estado del filtro según los datos del GPS.

numIMUSamples = size(accelData,1);
estOrient = quaternion.ones(numIMUSamples,1);
estPos = zeros(numIMUSamples,3);
    
gpsIdx = 1;

for idx = 1:numIMUSamples
    predict(filt,accelData(idx,:),gyroData(idx,:));       %Predict filter state
    
    if (mod(idx,imuSamplesPerGPS) == 0)                   %Correct filter state
        fusegps(filt,gpsLLA(gpsIdx,:),Rpos,gpsVel(gpsIdx,:),Rvel);
        gpsIdx = gpsIdx + 1;
    end
    
    [estPos(idx,:),estOrient(idx,:)] = pose(filt);        %Log estimated pose
end

Calcule y muestre errores RMS.

posd = estPos - truePos;
quatd = rad2deg(dist(estOrient,trueOrient));
msep = sqrt(mean(posd.^2));

fprintf('Position RMS Error\n\tX: %.2f, Y: %.2f, Z: %.2f (meters)\n\n',msep(1),msep(2),msep(3));   
Position RMS Error
	X: 0.15, Y: 0.11, Z: 0.01 (meters)
    
fprintf('Quaternion Distance RMS Error\n\t%.2f (degrees)\n\n',sqrt(mean(quatd.^2)));
Quaternion Distance RMS Error
	0.26 (degrees)

Algoritmos

Nota: El siguiente algoritmo sólo se aplica a un marco de referencia NED.

insfilterNonholonomic utiliza una estructura de filtro Kalman de estado de error de 16 ejes para estimar la pose en el marco de referencia NED. El estado se define como:

x=[q0q1q2q3gyrobiasXgyrobiasYgyrobiasZpositionNpositionEpositionDvNvEvDaccelbiasXaccelbiasYaccelbiasZ]

donde

  • q0, q1, q2, q3 –– Partes del cuaternión de orientación. El cuaternión de orientación representa una rotación del marco desde la orientación actual de la plataforma hasta el sistema de coordenadas NED local.

  • gyrobiasX, gyrobiasY, gyrobiasZ –– Sesgo en la lectura del giroscopio.

  • positionN, positionE, positionD –– Posición de la plataforma en el sistema de coordenadas NED local.

  • νN, νE, νD –– Velocidad de la plataforma en el sistema de coordenadas NED local.

  • accelbiasX, accelbiasY, accelbiasZ –– Sesgo en la lectura del acelerómetro.

Dada la formulación convencional de la función de transición de estado,

xk|k1=f(x^k1|k1)

la estimación del estado previsto es:

xk|k1=[q0+Δtq1(gyrobiasX/2gyroX/2)+Δtq2(gyrobiasY/2gyroY/2)+Δtq3(gyrobiasZ/2gyroZ/2)q1Δtq0(gyrobiasX/2gyroX/2)+Δtq3(gyrobiasY/2gyroY/2)Δtq2(gyrobiasZ/2gyroZ/2)q2Δtq3(gyrobiasX/2gyroX/2)Δtq0(gyrobiasY/2gyroY/2)+Δtq1(gyrobiasZ/2gyroZ/2)q3+Δtq2(gyrobiasX/2gyroX/2)Δtq1(gyrobiasY/2gyroY/2)Δtq0(gyrobiasZ/2gyroZ/2)gryobiasX(Δtλgyro1)gryobiasY(Δtλgyro1)gryobiasZ(Δtλgyro1)positionN+ΔtvNpositionE+ΔtvEpositionD+ΔtvDvN+Δt{q0(q0(accelbiasXaccelX)q3(accelbiasYaccelY)+q2(accelbiasZaccelZ))gN+q2(q1(accelbiasYaccelY)q2(accelbiasXaccelX)+q0(accelbiasZaccelZ))+q1(q1(accelbiasXaccelX)+q2(accelbiasYaccelY)+q3(accelbiasZaccelZ))q3(q3(accelbiasXaccelX)+q0(accelbiasYaccelY)q1(accelbiasZaccelZ))}vE+Δt{q0(q3(accelbiasXaccelX)+q0(accelbiasYaccelY)q1(accelbiasZaccelZ))gEq1(q1(accelbiasYaccelY)q2(accelbiasXaccelX)+q0(accelbiasZaccelZ))+q2(q1(accelbiasXaccelX)+q2(accelbiasYaccelY)+q3(accelbiasZaccelZ))+q3(q0(accelbiasXaccelX)q3(accelbiasYaccelY)+q2(accelbiasZaccelZ))}vD+Δt{q0(q1(accelbiasYaccelY)q2(accelbiasXaccelX)+q0(accelbiasZaccelZ))gD+q1(q3(accelbiasXaccelX)+q0(accelbiasYaccelY)q1(accelbiasZaccelZ))q2(q0(accelbiasXaccelX)q3(accelbiasYaccelY)+q2(accelbiasZaccelZ))+q3(q1(accelbiasXaccelX)+q2(accelbiasYaccelY)+q3(accelbiasZaccelZ))}accelbiasX(Δtλaccel1)accelbiasY(Δtλaccel1)accelbiasZ(Δtλaccel1)]

dónde

  • Δ t –– Tiempo de muestreo de IMU.

  • gN, gE, gD –– Vector de gravedad constante en el marco NED.

  • accelX, accelY, accelZ –– Vector de aceleración en el bastidor de la carrocería.

  • gyroX, gyroY, gyroZ –– Componentes de velocidad angular en el bastidor de la carrocería.

  • λaccel –– Factor de disminución de la polarización del acelerómetro.

  • λgyro –– Factor de decaimiento de sesgo del giroscopio.

Referencias

[1] Munguía, R. "A GPS-Aided Inertial Navigation System in Direct Configuration." Journal of applied research and technology. Vol. 12, Number 4, 2014, pp. 803 – 814.

Capacidades ampliadas

expandir todo

Generación de código C/C++
Genere código C y C++ mediante MATLAB® Coder™.

Historial de versiones

Introducido en R2018b