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.

insSensor

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

Desde R2020b

Descripción

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

Para generar mediciones INS y GNSS fusionadas:

  1. Cree el objeto insSensor y establezca sus propiedades.

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

Para obtener más información sobre cómo funcionan los System objects, consulte What Are System Objects?

Creación

Descripción

ejemplo

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

ejemplo

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

Propiedades

expandir todo

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

Si una propiedad es ajustable, puedes cambiar su valor en cualquier momento.

Para obtener más información sobre cómo cambiar los valores de las propiedades, consulte System Design in MATLAB Using System Objects.

Ubicación del sensor en la plataforma, en metros, especificada como un vector de valor real de tres elementos de 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.

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

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.

El paso es la rotación alrededor del 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 del 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.

La guiñada es la rotación alrededor del 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 valor escalar, entonces 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

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

Ajustable: No

Tipos de datos: logical

Habilite la corrección GNSS, especificada como 1 (true) o 0 (false). Establezca esta propiedad en false para simular la pérdida de una posición del receptor GNSS. Cuando se pierde una posición del receptor GNSS, las mediciones de posición se desvían 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 un ritmo cuadrático debido al sesgo constante en el acelerómetro. El error de posición para un componente de posición E(t) se puede expresar como E(t) = 1/2α t 2, donde α es el factor de error de posición para el correspondiente componente y t es el tiempo desde que se perdió la corrección GNSS. Mientras se ejecuta, el objeto calcula t en función de la entrada simTime . Los valores calculados de E(t) para x, y y z Los componentes 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 usando 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

ejemplo

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

measurement = INS(gTruth,simTime) especifica adicionalmente 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 y finita N-por 3 de [x y z] vectores. 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 N-por 3 de [v x v y v z ] vector. 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:

  • N-elemento vector columna de quaternion objetos

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

  • N-por-3 matriz de [x rollo y cabeceo z guiñada ] ángulos en grados

Cada cuaternión o matriz de rotación es una rotación de marco desde el sistema de coordenadas cartesiano local al sistema de coordenadas actual del cuerpo del sensor. 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 N-por 3 de [a x a y a z ] vectores. 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 N-por 3 de [ω x ω y ω z ] vectores. N es el número de muestras en el cuadro actual.

Los valores de los campos 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 y finita N-por 3 de [x y z] vectores. 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 N-por 3 de [v x v y v z ] vector. 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:

  • N-elemento vector columna de quaternion objetos

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

  • N-por-3 matriz de [x rollo y cabeceo z guiñada ] ángulos en grados

Cada cuaternión o matriz de rotación es una rotación de marco desde el sistema de coordenadas cartesianas local al sistema de coordenadas actual del cuerpo del sensor. 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 N-por 3 de [a x a y a z ] vectores. 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 N-por 3 de [ω x ω y ω z ] vectores. N es el número de muestras en el cuadro actual.

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

Funciones del objeto

Para utilizar una función de objeto, especifique System object como primer argumento de entrada. Por ejemplo, para liberar recursos del sistema de un System object llamado obj, use esta 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. Cree 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,'ZYX','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 de INS usando el 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 termine 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 System object waypointTrajectory con las restricciones del punto de ruta y configure SamplesPerFrame para que la trayectoria completa se genere 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 System object insSensor para modelar la recepción de datos del INS. Establezca PositionAccuracy en 0.1.

ins = insSensor('PositionAccuracy',0.1);

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

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

Convierta la orientación devuelta por ins a á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

Historial de versiones

Introducido en R2020b