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.

gpsSensor

Modelo de simulación del receptor GPS.

Descripción

El gpsSensor System object™ modela la salida de datos de un receptor del Sistema de Posicionamiento Global (GPS). El objeto modela el ruido de posición como un proceso 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 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

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

  • latitud: 0oN

  • longitud: 0oE

  • 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 Especifique RF como 'NED' (Noreste-Abajo) o 'ENU' (Este-Norte-Arriba). El valor predeterminado es 'NED'.

GPS = gpsSensor(___,Name,Value) establece cada propiedad Name al Value especificado. Las propiedades no especificadas tienen valores predeterminados.

ejemplo

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.

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', entonces necesita especificar la entrada truePosition como coordenadas cartesianas con respecto al marco de navegación local cuyo origen es fijo y definido por el ReferenceLcation propiedad. Además, cuando especifica la entrada trueVelocity , debe especificarla con respecto a este marco de navegación local.

  • Si configura la propiedad como 'Geodetic', entonces debe especificar la entrada truePosition como coordenadas geodésicas en latitud, longitud y altitud. Además, cuando especifica la entrada trueVelocity , debe especificarla 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 global por satélite 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 se fija 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 metros. 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 finita real 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 es fijo 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 se fija 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 al position salida.

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 finito real 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 una columna finita real 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 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

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

Cree 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 está configurado en 0.999, lo que se acerca a un proceso de paseo aleatorio. Para observar el efecto de la propiedad DecayFactor :

  1. Restablezca el objeto gps .

  2. Establezca DecayFactor en 0.5.

  3. Llame a gps con variables que especifican 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.

Cree 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. Cree un objeto waypointTrajectory para generar la trayectoria 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 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

Historial de versiones

Introducido en R2019b

Consulte también

Objetos