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:
Cree el objeto
insSensor
y establezca sus propiedades.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
devuelve un System object, INS
= insSensorINS
, que modela un dispositivo que genera mediciones desde un INS y GNSS.
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.INS
= insSensor(Name,Value
)
Propiedades
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.
MountingLocation
— Ubicación del sensor en la plataforma (m)
[0 0 0]
(predeterminado) | vector de valor real de tres elementos de la forma [x y z]
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
RollAccuracy
— Precisión de la medición del rollo (grados)
0.2
(predeterminado) | escalar real no negativo
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
PitchAccuracy
— Precisión de la medición del tono (grados)
0.2
(predeterminado) | escalar real no negativo
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
YawAccuracy
— Precisión de la medición de guiñada (grados)
1
(predeterminado) | escalar real no negativo
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
PositionAccuracy
— Precisión de la medición de posición (m)
[1 1 1]
(predeterminado) | escalar real no negativo | vector de valor real de tres elementos
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
VelocityAccuracy
— Precisión de la medición de la velocidad (m/s)
0.05
(predeterminado) | escalar real no negativo
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
AccelerationAccuracy
— Precisión de la medición de la aceleración (m/s2)
0
(predeterminado) | escalar real no negativo
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
AngularVelocityAccuracy
— Precisión de la medición de la velocidad angular (grados/s)
0
(predeterminado) | escalar real no negativo
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
TimeInput
— Habilitar la entrada del tiempo de simulación.
false
o 0
(predeterminado) | true
o 1
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
HasGNSSFix
— Habilitar corrección GNSS
true
o 1
(predeterminado) | false
o 0
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
PositionErrorFactor
— Factor de error de posición sin corrección GNSS
[0 0 0]
(predeterminado) | escalar no negativo | Vector de escalares 1 por 3
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
RandomStream
— fuente de números aleatorios
'Global stream'
(predeterminado) | 'mt19937ar with seed'
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 propiedadSeed
.
Tipos de datos: char
| string
Seed
— semilla inicial
67
(predeterminado) | entero no negativo
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 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, measurement
= INS(gTruth
)gTruth
.
especifica adicionalmente el tiempo de simulación, measurement
= INS(gTruth
,simTime
)simTime
. Para habilitar esta sintaxis, establezca la propiedad TimeInput
en true
.
Argumentos de entrada
gTruth
— Estado ground-truth inercial del cuerpo del sensor
estructura
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 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:
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]))
simTime
— tiempo de simulación
escalar real no negativo
Tiempo de simulación, en segundos, especificado como un escalar real no negativo.
Tipos de datos: single
| double
Argumentos de salida
measurement
— Medición del movimiento del cuerpo del sensor.
estructura
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 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:
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)
Específico para insSensor
perturbations | Perturbación definida en el objeto. |
perturb | Aplicar perturbaciones al objeto. |
Ejemplos
Generar mediciones INS desde entrada estacionaria
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')
Generar medidas INS para una plataforma giratoria
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)')
Capacidades ampliadas
Generación de código C/C++
Genere código C y C++ mediante MATLAB® Coder™.
Las funciones de objeto, perturbations
y perturb
, no admiten la generación de código.
Notas y limitaciones de uso:
Ver System Objects in MATLAB Code Generation (MATLAB Coder).
Historial de versiones
Introducido en R2020b
Consulte también
Objetos
Objetos
Comando de MATLAB
Ha hecho clic en un enlace que corresponde a este comando de MATLAB:
Ejecute el comando introduciéndolo en la ventana de comandos de MATLAB. Los navegadores web no admiten comandos de MATLAB.
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list:
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- 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)