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:
Cree el objeto
insSensor
y configure sus propiedades.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
devuelve un System object, INS
= insSensorINS
, que modela un dispositivo que emite mediciones desde un INS y un GNSS.
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.INS
= insSensor(Name,Value
)
Propiedades
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 propiedadSeed
.
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
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, measurement
= INS(gTruth
)gTruth
.
también especifica el tiempo de simulación, measurement
= INS(gTruth
,simTime
)simTime
. Para habilitar esta sintaxis, establezca la propiedad TimeInput
en true
.
Argumentos de entrada
Estado de verdad inercial del cuerpo del sensor, en coordenadas cartesianas locales, especificado como una estructura que contiene estos campos:
Campo | Descripció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:
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
La medición del movimiento del cuerpo del sensor, en coordenadas cartesianas locales, se devuelve como una estructura que contiene estos campos:
Campo | Descripció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:
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)
perturbations | Perturbación definida en el objeto. |
perturb | Aplicar perturbaciones al objeto. |
Ejemplos
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')
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)')
Capacidades ampliadas
Las funciones de objeto, perturbations
y perturb
, no admiten la generación de código.
Indicaciones y limitaciones de uso:
Consulte System Objects in MATLAB Code Generation (MATLAB Coder).
Historial de versiones
Introducido en R2020b
Consulte también
Objetos
Objetos
MATLAB Command
You clicked a link that corresponds to this MATLAB command:
Run the command by entering it in the MATLAB Command Window. Web browsers do not support MATLAB commands.
Seleccione un país/idioma
Seleccione un país/idioma para obtener contenido traducido, si está disponible, y ver eventos y ofertas de productos y servicios locales. Según su ubicación geográfica, recomendamos que seleccione: .
También puede seleccionar uno de estos países/idiomas:
Cómo obtener el mejor rendimiento
Seleccione China (en idioma chino o inglés) para obtener el mejor rendimiento. Los sitios web de otros países no están optimizados para ser accedidos desde su ubicación geográfica.
América
- América Latina (Español)
- Canada (English)
- United States (English)
Europa
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)