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:
Cree el objeto
gpsSensor
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 GPS
= gpsSensorgpsSensor
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
devuelve un GPS
= gpsSensor('ReferenceFrame'
,RF
)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(___,
establece cada propiedad Name,Value
)Name
al Value
especificado. Las propiedades no especificadas tienen valores predeterminados.
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.
SampleRate
— Tasa de actualización del receptor (Hz)
1
(predeterminado) | escalar real positivo
Tasa de actualización del receptor en Hz, especificada como escalar real positivo.
Tipos de datos: single
| double
ReferenceLocation
— Origen del marco de referencia de navegación local.
[0 0 0]
(predeterminado) | [latitude longitude altitude]
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
PositionInputFormat
— Formato de entrada de coordenadas de posición
'Local'
(predeterminado) | 'Geodetic'
Formato de entrada de coordenadas de posición, especificado como 'Local'
o 'Geodetic'
.
Si establece la propiedad como
'Local'
, entonces necesita especificar la entradatruePosition
como coordenadas cartesianas con respecto al marco de navegación local cuyo origen es fijo y definido por elReferenceLcation
propiedad. Además, cuando especifica la entradatrueVelocity
, debe especificarla con respecto a este marco de navegación local.Si configura la propiedad como
'Geodetic'
, entonces debe especificar la entradatruePosition
como coordenadas geodésicas en latitud, longitud y altitud. Además, cuando especifica la entradatrueVelocity
, debe especificarla con respecto al marco de navegación (NED o ENU) cuyo origen corresponde a la entradatruePosition
. Al establecer la propiedad como'Geodetic'
, el objetogpsSensor
ignora la propiedadReferenceLocation
.
Tipos de datos: character vector
HorizontalPositionAccuracy
— Precisión de posición horizontal (m)
1.6
(predeterminado) | escalar real no negativo
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
VerticalPositionAccuracy
— Precisión de posición vertical (m)
3
(predeterminado) | escalar real no negativo
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
VelocityAccuracy
— Precisión de velocidad (m/s)
0.1
(predeterminado) | escalar real no negativo
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
DecayFactor
— Factor de caída del ruido de posición global
0.999
(predeterminado) | escalar en el rango [0,1]
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
RandomStream
— fuente de números aleatorios
'Global stream'
(predeterminado) | 'mt19937ar with seed'
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 propiedadSeed
.
Tipos de datos: char
| string
Seed
— semilla inicial
67
(predeterminado) | escalar entero no negativo
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
[
calcula las lecturas del receptor del sistema de navegación global por satélite a partir de las entradas de posición y velocidad.position
,velocity
,groundspeed
,course
] = GPS(truePosition
,trueVelocity
)
Argumentos de entrada
truePosition
— Posición del receptor GPS en el sistema de coordenadas de navegación
N-por-3 matriz
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'
, especifiquetruePosition
como coordenadas cartesianas con respecto al marco de navegación local cuyo origen se fija enReferenceLocation
.Cuando la propiedad
PositionInputFormat
se especifica como'Geodetic'
, especifiquetruePosition
como coordenadas geodésicas en[latitude longitude altitude]
.Latitude
ylongitude
están en metros.altitude
es la altura sobre el modelo de elipsoide WGS84 en metros.
Tipos de datos: single
| double
trueVelocity
— Velocidad del receptor GPS en el sistema de coordenadas de navegación (m/s)
N-por-3 matriz
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'
, especifiquetrueVelocity
con respecto al marco de navegación local (NED o ENU) cuyo origen es fijo enReferenceLocation
.Cuando la propiedad
PositionInputFormat
se especifica como'Geodetic'
, especifiquetrueVelocity
con respecto al marco de navegación (NED o ENU) cuyo origen corresponde a la entradatruePosition
.
Tipos de datos: single
| double
Argumentos de salida
position
— Posición en el sistema de coordenadas LLA
N-por-3 matriz
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
velocity
— Velocidad en el sistema de coordenadas de navegación local (m/s)
N-por-3 matriz
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 enReferenceLocation
.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 alposition
salida.
Tipos de datos: single
| double
groundspeed
— Magnitud de la velocidad horizontal en el sistema de coordenadas de navegación local (m/s)
N-por-1 vector columna
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
course
— Dirección de la velocidad horizontal en el sistema de coordenadas de navegación local (°)
N-por-1 vector columna
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)
Ejemplos
Generar mediciones de posición GPS desde entrada estacionaria
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)')
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
:
Restablezca el objeto
gps
.Establezca
DecayFactor
en0.5
.Llame a
gps
con variables que especifican una posición estacionaria.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)')
Relación entre la velocidad terrestre y la precisión del rumbo
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)')
Modelo de datos del receptor GPS
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
Como práctica recomendada, libere los System objects cuando esté completo.
release(GPS) release(trajectory)
Capacidades ampliadas
Generación de código C/C++
Genere código C y C++ mediante MATLAB® Coder™.
Notas y limitaciones de uso:
Ver System Objects in MATLAB Code Generation (MATLAB Coder).
Historial de versiones
Introducido en R2019b
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)