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.

gpsSensor

Modelo de simulación del receptor GPS.

Descripción

Los modelos gpsSensor System object™ modelan la salida de datos de un receptor del Sistema de Posicionamiento Global (GPS). El objeto modela el ruido de posición como un proceso de Gauss Markov de primer orden, en el que los valores sigma se especifican en las propiedades HorizontalPositionAccuracy y VerticalPositionAccuracy. El objeto modela el ruido de velocidad como ruido gaussiano con su valor sigma especificado en la propiedad VelocityAccuracy.

Para modelar un receptor GPS:

  1. Cree el objeto gpsSensor 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

GPS = gpsSensor devuelve un gpsSensor System object que calcula una lectura del receptor del Sistema de Posicionamiento Global basándose en una señal de entrada de posición y velocidad local. La posición de referencia predeterminada en coordenadas geodésicas es

  • latitud: 0 o N

  • longitud: 0 o E

  • altitud: 0 metros

GPS = gpsSensor('ReferenceFrame',RF) devuelve un gpsSensor System object que calcula una lectura del receptor del sistema de posicionamiento global relativa al marco de referencia RF.

GPS = gpsSensor(___,Name=Value) establece una o más propiedades utilizando argumentos de nombre-valor además de cualquiera de los argumentos de entrada anteriores.

ejemplo

Argumentos de entrada

expandir todo

Marco de referencia de las entradas del sensor, especificado como 'NED' (Noreste-Abajo) o 'ENU' (Este-Norte-Arriba).

Tipos de datos: char | string

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.

Tasa de actualización del receptor en Hz, especificada como escalar real 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. La ubicación de referencia está en [degrees degrees meters]. El formato de grado es grados decimales (DD).

Tipos de datos: single | double

Formato de entrada de coordenadas de posición, especificado como 'Local' o 'Geodetic'.

  • Si establece la propiedad como 'Local', deberá especificar la entrada truePosition como coordenadas cartesianas con respecto al marco de navegación local cuyo origen es fijo y está definido por la propiedad ReferenceLcation. Además, cuando especifica la entrada trueVelocity, debe especificarla con respecto a este marco de navegación local.

  • Si establece la propiedad como 'Geodetic', deberá especificar la entrada truePosition como coordenadas geodésicas en latitud, longitud y altitud. Además, cuando se especifica la entrada trueVelocity, se debe especificar con respecto al marco de navegación (NED o ENU) cuyo origen corresponde a la entrada truePosition. Al establecer la propiedad como 'Geodetic', el objeto gpsSensor ignora la propiedad ReferenceLocation.

Tipos de datos: character vector

Precisión de la posición horizontal en metros, especificada como un escalar real no negativo. La precisión de la posición horizontal especifica la desviación estándar del ruido en la medición de la posición horizontal.

Ajustable: Yes

Tipos de datos: single | double

Precisión de la posición vertical en metros, especificada como un escalar real no negativo. La precisión de la posición vertical especifica la desviación estándar del ruido en la medición de la posición vertical.

Ajustable: Yes

Tipos de datos: single | double

Precisión de la velocidad en metros por segundo, especificada como un escalar real no negativo. La precisión de la velocidad especifica la desviación estándar del ruido en la medición de la velocidad.

Ajustable: Yes

Tipos de datos: single | double

Factor de caída del ruido de posición global, especificado como un escalar en el rango [0,1].

Un factor de caída de 0 modela el ruido de posición global como un proceso de ruido blanco. Un factor de caída de 1 modela el ruido de posición global como un proceso de caminata aleatoria.

Ajustable: Yes

Tipos de datos: single | double

Fuente de números aleatorios, especificada como un vector de caracteres o una cadena:

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

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

Tipos de datos: char | string

Semilla inicial de un algoritmo generador de números aleatorios mt19937ar, especificado como un escalar 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

[position,velocity,groundspeed,course] = GPS(truePosition,trueVelocity) calcula las lecturas del receptor del sistema de navegación por satélite global a partir de las entradas de posición y velocidad.

ejemplo

Argumentos de entrada

expandir todo

Posición del receptor GPS en el sistema de coordenadas de navegación, especificada como una matriz real finita N por 3. N es el número de muestras en el cuadro actual.

  • Cuando la propiedad PositionInputFormat se especifica como 'Local', especifique truePosition como coordenadas cartesianas con respecto al marco de navegación local cuyo origen está fijo en ReferenceLocation.

  • Cuando la propiedad PositionInputFormat se especifica como 'Geodetic', especifique truePosition como coordenadas geodésicas en [latitude longitude altitude]. latitude y longitude están en grados. altitude es la altura sobre el modelo de elipsoide WGS84 en metros.

Tipos de datos: single | double

Velocidad del receptor GPS en el sistema de coordenadas de navegación en metros por segundo, especificada como una matriz real finita N por 3. N es el número de muestras en el cuadro actual.

  • Cuando la propiedad PositionInputFormat se especifica como 'Local', especifique trueVelocity con respecto al marco de navegación local (NED o ENU) cuyo origen está fijado en ReferenceLocation.

  • Cuando la propiedad PositionInputFormat se especifica como 'Geodetic', especifique trueVelocity con respecto al marco de navegación (NED o ENU) cuyo origen corresponde a la entrada truePosition.

Tipos de datos: single | double

Argumentos de salida

expandir todo

Posición del receptor GPS en el sistema de coordenadas geodésicas de latitud, longitud y altitud (LLA), devuelta como un arreglo finita real N por 3. La latitud y la longitud están en grados, siendo el norte y el este positivos. La altitud está en metros.

N es el número de muestras en el cuadro actual.

Tipos de datos: single | double

Velocidad del receptor GPS en el sistema de coordenadas de navegación local en metros por segundo, devuelta como un arreglo finito real N por 3. N es el número de muestras en el cuadro actual.

  • Cuando la propiedad PositionInputFormat se especifica como 'Local', la velocidad devuelta es con respecto al marco de navegación local cuyo origen está fijo en ReferenceLocation.

  • Cuando la propiedad PositionInputFormat se especifica como 'Geodetic', la velocidad devuelta es con respecto al marco de navegación (NED o ENU) cuyo origen corresponde a la salida position.

Tipos de datos: single | double

Magnitud de la velocidad horizontal del receptor GPS en el sistema de coordenadas de navegación local en metros por segundo, devuelta como un vector columna real finito N-por-1.

N es el número de muestras en el cuadro actual.

Tipos de datos: single | double

Dirección de la velocidad horizontal del receptor GPS en el sistema de coordenadas de navegación local en grados, devuelta como un vector columna real finito N por 1 de valores entre 0 y 360. El Norte corresponde a 360 grados y el Este corresponde a 90 grados.

N es el número de muestras en el cuadro actual.

Tipos de datos: single | double

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

stepEjecutar el algoritmo System object
releaseRelease resources and allow changes to System object property values and input characteristics
resetReset internal states of System object

Ejemplos

contraer todo

Crea un gpsSensor System object™ para modelar los datos del receptor GPS. Suponga una frecuencia de muestreo típica de un Hz y un tiempo de simulación de 1000 segundos. Definir la ubicación de referencia en términos de latitud, longitud y altitud (LLA) de Natick, MA (EE.UU.). Defina el sensor como estacionario especificando la verdadera posición y velocidad con ceros.

fs = 1;
duration = 1000;
numSamples = duration*fs;

refLoc = [42.2825 -71.343 53.0352];

truePosition = zeros(numSamples,3);
trueVelocity = zeros(numSamples,3);

gps = gpsSensor('SampleRate',fs,'ReferenceLocation',refLoc);

Llame a gps con los truePosition y trueVelocity especificados para simular la recepción de datos GPS para una plataforma estacionaria.

position = gps(truePosition,trueVelocity);

Trace la posición real y las lecturas del sensor GPS para la posición.

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

subplot(3, 1, 1)
plot(t, position(:,1), ...
     t, ones(numSamples)*refLoc(1))
title('GPS Sensor Readings')
ylabel('Latitude (degrees)')

subplot(3, 1, 2)
plot(t, position(:,2), ...
     t, ones(numSamples)*refLoc(2))
ylabel('Longitude (degrees)')

subplot(3, 1, 3)
plot(t, position(:,3), ...
     t, ones(numSamples)*refLoc(3))
ylabel('Altitude (m)')
xlabel('Time (s)')

Figure contains 3 axes objects. Axes object 1 with title GPS Sensor Readings, ylabel Latitude (degrees) contains 1001 objects of type line. Axes object 2 with ylabel Longitude (degrees) contains 1001 objects of type line. Axes object 3 with xlabel Time (s), ylabel Altitude (m) contains 1001 objects of type line.

Las lecturas de posición tienen ruido controlado por HorizontalPositionAccuracy, VerticalPositionAccuracy, VelocityAccuracy y DecayFactor. La propiedad DecayFactor controla la deriva en el modelo de ruido. De forma predeterminada, DecayFactor se establece en 0.999, lo que se aproxima a un proceso de caminata aleatoria. Para observar el efecto de la propiedad DecayFactor:

  1. Restablecer el objeto gps.

  2. Establezca DecayFactor en 0.5.

  3. Llamar a gps con variables que especifiquen una posición estacionaria.

  4. Represente los resultados.

Las lecturas de posición GPS ahora oscilan alrededor de la posición real.

reset(gps)
gps.DecayFactor = 0.5;
position = gps(truePosition,trueVelocity);

subplot(3, 1, 1)
plot(t, position(:,1), ...
     t, ones(numSamples)*refLoc(1))
title('GPS Sensor Readings - Decay Factor = 0.5')
ylabel('Latitude (degrees)')

subplot(3, 1, 2)
plot(t, position(:,2), ...
     t, ones(numSamples)*refLoc(2))
ylabel('Longitude (degrees)')

subplot(3, 1, 3)
plot(t, position(:,3), ...
     t, ones(numSamples)*refLoc(3))
ylabel('Altitude (m)')
xlabel('Time (s)')

Figure contains 3 axes objects. Axes object 1 with title GPS Sensor Readings - Decay Factor = 0.5, ylabel Latitude (degrees) contains 1001 objects of type line. Axes object 2 with ylabel Longitude (degrees) contains 1001 objects of type line. Axes object 3 with xlabel Time (s), ylabel Altitude (m) contains 1001 objects of type line.

Los receptores GPS logran una mayor precisión del rumbo a medida que aumenta la velocidad sobre el terreno. En este ejemplo, creará un objeto de simulación de receptor GPS y simulará los datos recibidos desde una plataforma que acelera desde una posición estacionaria.

Crea un gpsSensor System object ™ predeterminado para modelar los datos devueltos por un receptor GPS.

GPS = gpsSensor
GPS = 
  gpsSensor with properties:

                    SampleRate: 1                  Hz         
           PositionInputFormat: 'Local'                       
             ReferenceLocation: [0 0 0]            [deg deg m]
    HorizontalPositionAccuracy: 1.6                m          
      VerticalPositionAccuracy: 3                  m          
              VelocityAccuracy: 0.1                m/s        
                  RandomStream: 'Global stream'               
                   DecayFactor: 0.999                         

Cree matrices para describir la posición y la velocidad de una plataforma en el sistema de coordenadas NED. La plataforma comienza desde una posición estacionaria y acelera a 60 m/s al noreste durante 60 segundos, luego tiene una aceleración vertical a 2 m/s durante 2 segundos, seguida de una velocidad de ascenso de 2 m/s durante otros 8 segundos. Suponga una velocidad constante, tal que la velocidad sea la derivada simple de la posición.

duration = 70;
numSamples = duration*GPS.SampleRate;

course = 45*ones(duration,1);
groundspeed = [(1:60)';60*ones(10,1)];

Nvelocity   = groundspeed.*sind(course);
Evelocity   = groundspeed.*cosd(course);
Dvelocity   = [zeros(60,1);-1;-2*ones(9,1)];
NEDvelocity = [Nvelocity,Evelocity,Dvelocity];

Ndistance   = cumsum(Nvelocity);
Edistance   = cumsum(Evelocity);
Ddistance   = cumsum(Dvelocity);
NEDposition = [Ndistance,Edistance,Ddistance];

Modele los datos de medición del GPS llamando al objeto GPS con sus matrices de velocidad y posición.

[~,~,groundspeedMeasurement,courseMeasurement] = GPS(NEDposition,NEDvelocity);

Trace la velocidad terrestre y la diferencia entre el rumbo real y el rumbo devuelto por el simulador GPS.

A medida que aumenta la velocidad sobre el terreno, aumenta la precisión del rumbo. Tenga en cuenta que el aumento de velocidad durante los últimos diez segundos no tiene ningún efecto, porque la velocidad adicional no está en el plano del suelo.

t = (0:numSamples-1)/GPS.SampleRate;

subplot(2,1,1)
plot(t,groundspeed);
ylabel('Speed (m/s)')
title('Relationship Between Groundspeed and Course Accuracy')

subplot(2,1,2)
courseAccuracy = courseMeasurement - course;
plot(t,courseAccuracy)
xlabel('Time (s)');
ylabel('Course Accuracy (degrees)')

Figure contains 2 axes objects. Axes object 1 with title Relationship Between Groundspeed and Course Accuracy, ylabel Speed (m/s) contains an object of type line. Axes object 2 with xlabel Time (s), ylabel Course Accuracy (degrees) contains an object of type line.

Simule los datos de GPS recibidos durante una trayectoria desde la ciudad de Natick, MA, hasta Boston, MA.

Defina la latitud y longitud en grados decimales para la ciudad de Natick, MA, EE. UU., y Boston, MA, EE. UU. Para simplificar, establezca la altitud de ambas ubicaciones en cero.

NatickLLA = [42.27752809999999, -71.34680909999997, 0];
BostonLLA = [42.3600825, -71.05888010000001, 0];

Defina un movimiento que pueda llevar una plataforma de Natick a Boston en 20 minutos. Establezca el origen del sistema de coordenadas NED local como Natick. Crea un objeto waypointTrajectory para generar la trayectoria de 10 muestras a la vez.

fs = 1;
duration = 60*20;

bearing = 68; % degrees
distance = 25.39e3; % meters
distanceEast = distance*sind(bearing);
distanceNorth = distance*cosd(bearing);

NatickNED = [0,0,0];
BostonNED = [distanceNorth,distanceEast,0];

trajectory = waypointTrajectory( ...
    'Waypoints', [NatickNED;BostonNED], ...
    'TimeOfArrival',[0;duration], ...
    'SamplesPerFrame',10, ...
    'SampleRate',fs);

Cree un objeto gpsSensor para modelar la recepción de datos GPS para la plataforma. Establezca HorizontalPositionalAccuracy en 25 y DecayFactor en 0.25 para enfatizar el ruido. Establezca ReferenceLocation en las coordenadas de Natick en LLA.

GPS = gpsSensor( ...
    'HorizontalPositionAccuracy',25, ...
    'DecayFactor',0.25, ...
    'SampleRate',fs, ...
    'ReferenceLocation',NatickLLA);

Abra una figura y trace la posición de Natick y Boston en LLA. Ignore la altitud por simplicidad.

En un bucle, llame al objeto gpsSensor con la trayectoria de ground-truth para simular los datos GPS recibidos. Trazar la trayectoria ground-truth y el modelo de los datos GPS recibidos.

figure(1)
plot(NatickLLA(1),NatickLLA(2),'ko', ...
     BostonLLA(1),BostonLLA(2),'kx')
xlabel('Latitude (degrees)')
ylabel('Longitude (degrees)')
title('GPS Sensor Data for Natick to Boston Trajectory')
hold on

while ~isDone(trajectory)
    [truePositionNED,~,trueVelocityNED] = trajectory();
    reportedPositionLLA = GPS(truePositionNED,trueVelocityNED);

    figure(1)
    plot(reportedPositionLLA(:,1),reportedPositionLLA(:,2),'r.')
end

Figure contains an axes object. The axes object with title GPS Sensor Data for Natick to Boston Trajectory, xlabel Latitude (degrees), ylabel Longitude (degrees) contains 122 objects of type line.

Como práctica recomendada, libere los System objects cuando esté completo.

release(GPS)
release(trajectory)

Capacidades ampliadas

expandir todo

Historial de versiones

Introducido en R2019b

Consulte también

Objetos