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.

insfilterMARG

Estimar la pose a partir de datos MARG y GPS

Descripción

El objeto insfilterMARG implementa la fusión de sensores de datos MARG y GPS para estimar la postura en el marco de referencia NED (o ENU). Los datos MARG (magnéticos, de velocidad angular y de gravedad) generalmente se derivan de sensores de magnetómetro, giroscopio y acelerómetro. El filtro utiliza un vector de estado de 22 elementos para rastrear el cuaternión de orientación, la velocidad, la posición, los sesgos del sensor MARG y el vector geomagnético. El objeto insfilterMARG utiliza un filtro Kalman extendido para estimar estas cantidades.

Creación

Descripción

filter = insfilterMARG crea un objeto insfilterMARG con valores de propiedad predeterminados.

ejemplo

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

filter = insfilterMARG(___,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 unidad de medida inercial (IMU) en Hz, especificada como 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

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 reales positivos.

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

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

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.

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

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

Tipos de datos: single | double

Ruido de proceso aditivo para el vector geomagnético en µT2, especificado como un vector fila escalar o de 3 elementos de números reales positivos.

  • Si GeomagneticVectorNoise se especifica como un vector fila, los elementos corresponden al ruido en los ejes x, y y z del vector geomagnético, respectivamente.

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

Tipos de datos: single | double

Ruido de proceso aditivo para polarización del magnetómetro en µT2, especificado como un escalar o un vector fila de 3 elementos.

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

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

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
Posición (NED o ENU)metro5:7
Velocidad (NED o ENU)EM8:10
Sesgo del ángulo delta (XYZ)rad11:13
Sesgo de velocidad delta (XYZ)EM14:16
Vector de campo geomagnético (NED o ENU)µT17:19
Polarización del magnetómetro (XYZ)µT20:22

Tipos de datos: single | double

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

Tipos de datos: single | double

Funciones del objeto

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

Ejemplos

contraer todo

Este ejemplo muestra cómo estimar la pose de un vehículo aéreo no tripulado (VANT) a partir de datos de sensores registrados y la pose ground-truth.

Cargue los datos del sensor registrados y la pose ground-truth de un VANT.

load uavshort.mat

Inicializar el objeto de filtro insfilterMARG.

f = insfilterMARG;
f.IMUSampleRate = imuFs;
f.ReferenceLocation = refloc;
f.AccelerometerBiasNoise = 2e-4;
f.AccelerometerNoise = 2;
f.GyroscopeBiasNoise = 1e-16;
f.GyroscopeNoise = 1e-5;
f.MagnetometerBiasNoise = 1e-10;
f.GeomagneticVectorNoise = 1e-12;
f.StateCovariance = 1e-9*ones(22);
f.State = initstate;
 
gpsidx = 1;
magFs = imuFs/2; % Hz
gpuFs = 1;       % Hz
N = size(accel,1);
p = zeros(N,3);
q = zeros(N,1,'quaternion');

Fusiona datos de acelerómetro, giroscopio, magnetómetro y GPS.

for ii = 1:size(accel,1)               % Fuse IMU
   f.predict(accel(ii,:), gyro(ii,:));
        
   if ~mod(ii,fix(imuFs/magFs))            % Fuse magnetometer
       f.fusemag(mag(ii,:),Rmag);
   end
  
   if ~mod(ii,imuFs/gpuFs)                   % Fuse GPS once per second
       f.fusegps(lla(gpsidx,:),Rpos,gpsvel(gpsidx,:),Rvel);
       gpsidx = gpsidx + 1;
   end
 
   [p(ii,:),q(ii)] = pose(f);           % Log estimated pose
end

Calcule y muestre errores RMS.

posErr = truePos - p;
qErr = rad2deg(dist(trueOrient,q));
pRMS = sqrt(mean(posErr.^2));
qRMS = sqrt(mean(qErr.^2));
fprintf('Position RMS Error\n\tX: %.2f, Y: %.2f, Z: %.2f (meters)\n\n',pRMS(1),pRMS(2),pRMS(3));
Position RMS Error
	X: 0.57, Y: 0.53, Z: 0.69 (meters)
    
fprintf('Quaternion Distance RMS Error\n\t%.2f (degrees)\n\n',qRMS);
Quaternion Distance RMS Error
	0.20 (degrees)

Algoritmos

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

insfilterMARG utiliza una estructura de filtro Kalman extendida de 22 ejes para estimar la pose en el marco de referencia NED. El estado se define como:

x=[q0q1q2q3positionNpositionEpositionDνNνEνDΔθbiasXΔθbiasYΔθbiasZΔνbiasXΔνbiasYΔνbiasZgeomagneticFieldVectorNgeomagneticFieldVectorEgeomagneticFieldVectorDmagbiasXmagbiasYmagbiasZ]

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.

  • 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.

  • Δ θbiasX, Δ θbiasY, Δ θbiasZ –– Sesgo en la lectura del giroscopio integrado.

  • Δ νbiasX, Δ νbiasY, Δ νbiasZ –– Sesgo en la lectura del acelerómetro integrado.

  • geomagneticFieldVectorN, geomagneticFieldVectorE, geomagneticFieldVectorD –– Estimación del vector del campo geomagnético en la ubicación de referencia.

  • magbiasX, magbiasY, magbiasZ –– Sesgo en las lecturas del magnetómetro.

Dada la formación convencional de la estimación del estado previsto,

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

uk está controlado por datos del acelerómetro y del giroscopio que se han convertido en velocidad delta y ángulo delta a través de integración trapezoidal. La estimación del estado previsto es:

xk|k1=[q0q0'q1q1'q2q2'q3q3'q1q0'+q0q1'q3q2'+q2q3'q2q0'+q3q1'+q0q2'q1q3'q3q0'q2q1'+q1q2'+q0q3'positionN+(Δt)(νN)positionE+(Δt)(νE)positionD+(Δt)(νD)νN+(Δt)(gN)+(ΔνXΔνbiasX)(q02+q12q22q32)2(ΔνYΔνbiasY)(q0q3q1q2)+2(ΔνZΔνbiasZ)(q0q2+q1q3)νE+(Δt)(gE)+(ΔνYΔνbiasY)(q02q12+q22q32)+2(ΔνXΔνbiasX)(q0q3+q1q2)2(ΔνZΔνbiasZ)(q0q1q2q3)νD+(Δt)(gD)+(ΔνZΔνbiasZ)(q02q12q22+q32)2(ΔνXΔνbiasX)(q0q2q1q3)+2(ΔνYΔνbiasY)(q0q1+q2q3)ΔθbiasXΔθbiasYΔθbiasZΔνbiasXΔνbiasYΔνbiasZgeomagneticFieldVectorNgeomagneticFieldVectorEgeomagneticFieldVectorDmagbiasXmagbiasYmagbiasZ]

En la ecuación, (q0', q1', q2', q3') es el cuaternión que explica el cambio de orientación de un paso al siguiente. Suponiendo que el cambio de orientación es pequeño, entonces el vector de rotación se puede aproximar como (Δ θX − Δ θbiasX, Δ θY − Δ θbiasY, Δ θZ − Δ θbiasZ), donde Δ θX, Δ θY, Δ θZ son las lecturas del giroscopio integrado. Luego se obtiene (q0', q1', q2', q3') convirtiendo el vector de rotación aproximado en un cuaternión. En cada cálculo, el cuaternión se normaliza de modo que su longitud sea 1 y su parte real q0 no sea negativa.

Además,

  • Δ νX, Δ νY, Δ νZ –– Lecturas del acelerómetro integrado.

  • Δ t –– Tiempo de muestreo de IMU.

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

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