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.

insSensor

Sistema de navegación inercial y modelo de simulación GNSS/GPS.

Descripción

El insSensor System object™ modela un dispositivo que fusiona mediciones de un sistema de navegación inercial (INS) y un sistema global de navegación por satélite (GNSS), como un GPS, y genera las mediciones fusionadas.

Para generar mediciones INS y GNSS fusionadas:

  1. Cree el objeto insSensor y configure sus propiedades.

  2. Llame al objeto con argumentos, como si fuera una función.

Para más información sobre el funcionamiento de los System objects, consulte ¿Qué son los System Objects?

Creación

Descripción

INS = insSensor devuelve un System object, INS, que modela un dispositivo que emite mediciones desde un INS y un GNSS.

ejemplo

INS = insSensor(Name,Value) establece propiedades utilizando uno o más pares nombre-valor. Las propiedades no especificadas tienen valores predeterminados. Encierre el nombre de cada propiedad entre comillas.

ejemplo

Propiedades

expandir todo

A menos que se indique lo contrario, las propiedades son no ajustables, lo que significa que no puede modificar sus valores después de llamar al objeto. Los objetos se bloquean cuando llama a ellos, y la función release los desbloquea.

Si una propiedad es ajustable, puede modificar su valor en cualquier momento.

Para obtener más información sobre cómo modificar los valores de las propiedades, consulte Diseñar sistemas en MATLAB utilizando System objects.

Ubicación del sensor en la plataforma, en metros, especificada como un vector de valor real de tres elementos con la forma [x y z]. El vector define el desplazamiento del origen del sensor desde el origen de la plataforma.

Ajustable: Yes

Tipos de datos: single | double

Precisión de la medición del balanceo del cuerpo del sensor, en grados, especificada como un escalar real no negativo.

Roll es la rotación alrededor del eje x del cuerpo del sensor. El ruido de balanceo se modela como un proceso de ruido blanco. RollAccuracy establece la desviación estándar del ruido de medición de balanceo.

Ajustable: Yes

Tipos de datos: single | double

Precisión de la medición del tono del cuerpo del sensor, en grados, especificada como un escalar real no negativo.

Paso es la rotación alrededor del eje y del cuerpo del sensor. El ruido de tono se modela como un proceso de ruido blanco. PitchAccuracy define la desviación estándar del ruido de medición de tono.

Ajustable: Yes

Tipos de datos: single | double

Precisión de la medición de la orientación del cuerpo del sensor, en grados, especificada como un escalar real no negativo.

Guiñada es la rotación alrededor del eje z del cuerpo del sensor. El ruido de guiñada se modela como un proceso de ruido blanco. YawAccuracy define la desviación estándar del ruido de medición de guiñada.

Ajustable: Yes

Tipos de datos: single | double

Precisión de la medición de la posición del cuerpo del sensor, en metros, especificada como un escalar real no negativo o un vector de valor real de tres elementos. Los elementos del vector establecen la precisión de las mediciones de posición x, y y z, respectivamente. Si especifica PositionAccuracy como un valor escalar, el objeto establece la precisión de las tres posiciones en este valor.

El ruido de posición se modela como un proceso de ruido blanco. PositionAccuracy define la desviación estándar del ruido de medición de posición.

Ajustable: Yes

Tipos de datos: single | double

Precisión de la medición de la velocidad del cuerpo del sensor, en metros por segundo, especificada como un escalar real no negativo.

El ruido de velocidad se modela como un proceso de ruido blanco. VelocityAccuracy define la desviación estándar del ruido de medición de velocidad.

Ajustable: Yes

Tipos de datos: single | double

Precisión de la medición de la aceleración del cuerpo del sensor, en metros por segundo, especificada como un escalar real no negativo.

El ruido de aceleración se modela como un proceso de ruido blanco. AccelerationAccuracy define la desviación estándar del ruido de medición de aceleración.

Ajustable: Yes

Tipos de datos: single | double

Precisión de la medición de la velocidad angular del cuerpo del sensor, en metros por segundo, especificada como un escalar real no negativo.

La velocidad angular se modela como un proceso de ruido blanco. AngularVelocityAccuracy define la desviación estándar del ruido de medición de aceleración.

Ajustable: Yes

Tipos de datos: single | double

Habilitar la entrada de tiempo de simulación, especificado como un 0 (false) o 1 (true) lógico. Establezca esta propiedad en true para ingresar el tiempo de simulación utilizando el argumento simTime.

Ajustable: No

Tipos de datos: logical

Habilitar corrección GNSS, especificada como un 1 (true) o 0 (false) lógico. Establezca esta propiedad en false para simular la pérdida de la posición de un receptor GNSS. Cuando se pierde la posición de un receptor GNSS, las mediciones de posición se desplazan a una velocidad especificada por la propiedad PositionErrorFactor.

Ajustable: Yes

Dependencias

Para habilitar esta propiedad, establezca TimeInput en true.

Tipos de datos: logical

Factor de error de posición sin corrección GNSS, especificado como un escalar o un vector de escalares de 1 por 3.

Cuando la propiedad HasGNSSFix se establece en false, el error de posición crece a una tasa cuadrática debido al sesgo constante en el acelerómetro. El error de posición de un componente de posición E(t) se puede expresar como E(t) = 1/2 αt2, donde α es el factor de error de posición del componente correspondiente y t es el tiempo transcurrido desde que se perdió la posición GNSS. Mientras se ejecuta, el objeto calcula t en función de la entrada simTime. Los valores E(t) calculados para los componentes x, y y z se agregan a los componentes de posición correspondientes de la entrada gTruth.

Ajustable: Yes

Dependencias

Para habilitar esta propiedad, establezca TimeInput en true y HasGNSSFix en false.

Tipos de datos: single | double

Fuente de números aleatorios, especificada como una de estas opciones:

  • 'Global stream' –– Genera números aleatorios utilizando el flujo de números aleatorios global actual.

  • 'mt19937ar with seed' –– Genera números aleatorios utilizando el algoritmo mt19937ar, con la semilla especificada por la propiedad Seed.

Tipos de datos: char | string

Semilla inicial del algoritmo generador de números aleatorios mt19937ar, especificada como un entero no negativo.

Dependencias

Para habilitar esta propiedad, establezca RandomStream en 'mt19937ar with seed'.

Tipos de datos: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

Uso

Descripción

measurement = INS(gTruth) modela los datos recibidos de la lectura de un sensor INS y de una lectura de un sensor GNSS. La medición de salida se basa en el estado de ground-truth inercial del cuerpo del sensor, gTruth.

ejemplo

measurement = INS(gTruth,simTime) también especifica el tiempo de simulación, simTime. Para habilitar esta sintaxis, establezca la propiedad TimeInput en true.

Argumentos de entrada

expandir todo

Estado de verdad inercial del cuerpo del sensor, en coordenadas cartesianas locales, especificado como una estructura que contiene estos campos:

CampoDescripción
'Position'

Posición, en metros, especificada como una matriz real, finita, de N por 3, de vectores [x y z]. N es el número de muestras en el cuadro actual.

'Velocity'

Velocidad (v), en metros por segundo, especificada como una matriz real y finita de N por 3 del vector [vx vy vz]. N es el número de muestras en el cuadro actual.

'Orientation'

Orientación con respecto al sistema de coordenadas cartesiano local, especificada como una de estas opciones:

  • vector columna de elementos N de objetos quaternion

  • Arreglo de matrices de rotación de 3 por 3 por N

  • Matriz N por 3 de ángulos de [xbalanceo ycabeceo zguiñada] en grados

Cada cuaternión o matriz de rotación es una rotación de cuadro desde el sistema de coordenadas cartesianas local al sistema de coordenadas del cuerpo del sensor actual. N es el número de muestras en el cuadro actual.

'Acceleration'

Aceleración (a), en metros por segundo al cuadrado, especificada como una matriz real y finita de N por 3 de vectores [ax ay az]. N es el número de muestras en el cuadro actual.

'AngularVelocity'

Velocidad angular (ω), en grados por segundo al cuadrado, especificada como una matriz real y finita de N por 3 de vectores [ωx ωy ωz]. N es el número de muestras en el cuadro actual.

Los valores del campo deben ser del tipo double o single.

Los campos Position, Velocity y Orientation son obligatorios. Los otros campos son opcionales.

Ejemplo: struct('Position',[0 0 0],'Velocity',[0 0 0],'Orientation',quaternion([1 0 0 0]))

Tiempo de simulación, en segundos, especificado como un escalar real no negativo.

Tipos de datos: single | double

Argumentos de salida

expandir todo

La medición del movimiento del cuerpo del sensor, en coordenadas cartesianas locales, se devuelve como una estructura que contiene estos campos:

CampoDescripción
'Position'

Posición, en metros, especificada como una matriz real, finita, de N por 3, de vectores [x y z]. N es el número de muestras en el cuadro actual.

'Velocity'

Velocidad (v), en metros por segundo, especificada como una matriz real y finita de N por 3 del vector [vx vy vz]. N es el número de muestras en el cuadro actual.

'Orientation'

Orientación con respecto al sistema de coordenadas cartesiano local, especificada como una de estas opciones:

  • vector columna de elementos N de objetos quaternion

  • Arreglo de matrices de rotación de 3 por 3 por N

  • Matriz N por 3 de ángulos de [xbalanceo ycabeceo zguiñada] en grados

Cada cuaternión o matriz de rotación es una rotación de cuadro desde el sistema de coordenadas cartesianas local al sistema de coordenadas del cuerpo del sensor actual. N es el número de muestras en el cuadro actual.

'Acceleration'

Aceleración (a), en metros por segundo al cuadrado, especificada como una matriz real y finita de N por 3 de vectores [ax ay az]. N es el número de muestras en el cuadro actual.

'AngularVelocity'

Velocidad angular (ω), en grados por segundo al cuadrado, especificada como una matriz real y finita de N por 3 de vectores [ωx ωy ωz]. N es el número de muestras en el cuadro actual.

Los valores de campo devueltos son del tipo double o single y son del mismo tipo que los valores de campo correspondientes en la entrada gTruth.

Funciones del objeto

Para usar una función de objeto, especifique el System object como el primer argumento de entrada. Por ejemplo, para liberar recursos de sistema de un System object llamado obj, utilice la siguiente sintaxis:

release(obj)

expandir todo

perturbationsPerturbación definida en el objeto.
perturbAplicar perturbaciones al objeto.
stepEjecutar el algoritmo System object
cloneCreate duplicate System object
isLockedDetermine if System object is in use
resetReset internal states of System object
releaseRelease resources and allow changes to System object property values and input characteristics

Ejemplos

contraer todo

Cree una estructura de movimiento que defina una posición estacionaria en el origen local noreste hacia abajo (NED). Debido a que la plataforma es estacionaria, solo necesita definir una muestra. Supongamos que el movimiento ground-truth se muestrea durante 10 segundos con una frecuencia de muestreo de 100 Hz. Crea un insSensor System object ™ predeterminado. Preasigne variables para contener la salida del objeto insSensor.

Fs = 100;
duration = 10;
numSamples = Fs*duration;

motion = struct( ...
    'Position',zeros(1,3), ...
    'Velocity',zeros(1,3), ...
    'Orientation',ones(1,1,'quaternion'));

INS = insSensor;

positionMeasurements = zeros(numSamples,3);
velocityMeasurements = zeros(numSamples,3);
orientationMeasurements = zeros(numSamples,1,'quaternion');

En un bucle, llame a INS con la estructura de movimiento estacionario para devolver las mediciones de posición, velocidad y orientación en el sistema de coordenadas NED local. Registre las mediciones de posición, velocidad y orientación.

for i = 1:numSamples
    
    measurements = INS(motion);
    
    positionMeasurements(i,:) = measurements.Position;
    velocityMeasurements(i,:) = measurements.Velocity;
    orientationMeasurements(i) = measurements.Orientation;
    
end

Convierta la orientación de cuaterniones a ángulos de Euler para fines de visualización. Trazar las medidas de posición, velocidad y orientación a lo largo del tiempo.

orientationMeasurements = eulerd(orientationMeasurements,'XYZ','frame');

t = (0:(numSamples-1))/Fs;

subplot(3,1,1)
plot(t,positionMeasurements)
title('Position')
xlabel('Time (s)')
ylabel('Position (m)')
legend('North','East','Down')

subplot(3,1,2)
plot(t,velocityMeasurements)
title('Velocity')
xlabel('Time (s)')
ylabel('Velocity (m/s)')
legend('North','East','Down')

subplot(3,1,3)
plot(t,orientationMeasurements)
title('Orientation')
xlabel('Time (s)')
ylabel('Rotation (degrees)')
legend('Roll', 'Pitch', 'Yaw')

Figure contains 3 axes objects. Axes object 1 with title Position, xlabel Time (s), ylabel Position (m) contains 3 objects of type line. These objects represent North, East, Down. Axes object 2 with title Velocity, xlabel Time (s), ylabel Velocity (m/s) contains 3 objects of type line. These objects represent North, East, Down. Axes object 3 with title Orientation, xlabel Time (s), ylabel Rotation (degrees) contains 3 objects of type line. These objects represent Roll, Pitch, Yaw.

Genere mediciones INS utilizando insSensor System object ™. Utilice waypointTrajectory para generar la ruta de ground-truth .

Especifique una orientación de ground-truth que comience con el eje x del cuerpo del sensor alineado con el Norte y finalice con el eje x del cuerpo del sensor alineado con el Este. Especifique puntos de referencia para una trayectoria de arco y un vector de tiempo de llegada para los puntos de referencia correspondientes. Utilice una frecuencia de muestreo de 100 Hz. Cree un waypointTrajectory System object con las restricciones de puntos de referencia y configure SamplesPerFrame para que la trayectoria completa se muestre con una sola llamada.

eulerAngles = [0,0,0; ...
               0,0,0; ...
               90,0,0; ...
               90,0,0];
orientation = quaternion(eulerAngles,'eulerd','ZYX','frame');

r = 20;
waypoints = [0,0,0; ...
             100,0,0; ...
             100+r,r,0; ...
             100+r,100+r,0];

toa = [0,10,10+(2*pi*r/4),20+(2*pi*r/4)];

Fs = 100;
numSamples = floor(Fs*toa(end));

path = waypointTrajectory('Waypoints',waypoints, ...
    'TimeOfArrival',toa, ...
    'Orientation',orientation, ...
    'SampleRate',Fs, ...
    'SamplesPerFrame',numSamples);

Cree un insSensor System object para modelar la recepción de datos INS. Establezca PositionAccuracy en 0.1.

ins = insSensor('PositionAccuracy',0.1);

Llame al objeto de trayectoria del punto de referencia, path, para generar el movimiento de ground-truth . Llame al simulador INS, ins, con el movimiento de ground-truth para generar mediciones INS.

[motion.Position,motion.Orientation,motion.Velocity] = path();
insMeas = ins(motion);

Convierte la orientación devuelta por ins en ángulos de Euler en grados para fines de visualización. Traza la ruta completa y la orientación a lo largo del tiempo.

orientationMeasurementEuler = eulerd(insMeas.Orientation,'ZYX','frame');

subplot(2,1,1)
plot(insMeas.Position(:,1),insMeas.Position(:,2));
title('Path')
xlabel('North (m)')
ylabel('East (m)')

subplot(2,1,2)
t = (0:(numSamples-1)).'/Fs;
plot(t,orientationMeasurementEuler(:,1), ...
     t,orientationMeasurementEuler(:,2), ...
     t,orientationMeasurementEuler(:,3));
title('Orientation')
legend('Yaw','Pitch','Roll')
xlabel('Time (s)')
ylabel('Rotation (degrees)')

Figure contains 2 axes objects. Axes object 1 with title Path, xlabel North (m), ylabel East (m) contains an object of type line. Axes object 2 with title Orientation, xlabel Time (s), ylabel Rotation (degrees) contains 3 objects of type line. These objects represent Yaw, Pitch, Roll.

Capacidades ampliadas

expandir todo

Historial de versiones

Introducido en R2020b