Main Content

Cette page a été traduite par traduction automatique. Cliquez ici pour voir la dernière version en anglais.

gpsSensor

Modèle de simulation de récepteur GPS

Depuis R2019b

Description

Le gpsSensor System object™ modélise la sortie des données d'un récepteur GPS (Global Positioning System). L'objet modélise le bruit de position comme un processus Gauss Markov de premier ordre, dans lequel les valeurs sigma sont spécifiées dans les propriétés HorizontalPositionAccuracy et VerticalPositionAccuracy . L'objet modélise le bruit de vitesse sous forme de bruit gaussien avec sa valeur sigma spécifiée dans la propriété VelocityAccuracy .

Pour modéliser un récepteur GPS :

  1. Créez l'objet gpsSensor et définissez ses propriétés.

  2. Appelez l'objet avec des arguments, comme s'il s'agissait d'une fonction.

Pour en savoir plus sur le fonctionnement des objets système, voir What Are System Objects?

Création

Description

GPS = gpsSensor renvoie un gpsSensor System object qui calcule une lecture du récepteur du système de positionnement global en fonction d'un signal d'entrée de position et de vitesse locale. La position de référence par défaut en coordonnées géodésiques est

  • latitude: 0oN

  • longitude: 0oE

  • altitude: 0 m

GPS = gpsSensor('ReferenceFrame',RF) renvoie un gpsSensor System object qui calcule une lecture du récepteur du système de positionnement global par rapport au cadre de référence RF. Spécifiez RF comme 'NED' (Nord-Est-Bas) ou 'ENU' (Est-Nord-Up). La valeur par défaut est 'NED'.

exemple

GPS = gpsSensor(___,Name,Value) définit chaque propriété Name sur le Value spécifié. Les propriétés non spécifiées ont des valeurs par défaut.

Propriétés

développer tout

Sauf indication contraire, les propriétés sont non réglables , ce qui signifie que vous ne pouvez pas modifier leurs valeurs après avoir appelé l'objet. Les objets se verrouillent lorsque vous les appelez et la fonction release les déverrouille.

Si une propriété est ajustable , vous pouvez modifier sa valeur à tout moment.

Pour plus d'informations sur la modification des valeurs des propriétés, voir System Design in MATLAB Using System Objects.

Taux de mise à jour du récepteur en Hz, spécifié comme un scalaire réel positif.

Types de données : single | double

Emplacement de référence, spécifié sous la forme d'un vecteur ligne à 3 éléments en coordonnées géodésiques (latitude, longitude et altitude). L'altitude est la hauteur au-dessus du modèle ellipsoïde de référence, WGS84. L'emplacement de référence est dans [degrees degrees meters]. Le format des diplômes est le degré décimal (DD).

Types de données : single | double

Format d'entrée des coordonnées de position, spécifié comme 'Local' ou 'Geodetic'.

  • Si vous définissez la propriété sur 'Local', vous devez alors spécifier l'entrée truePosition comme coordonnées cartésiennes par rapport au cadre de navigation local dont l'origine est fixe et définie par le Propriété ReferenceLcation . De plus, lorsque vous spécifiez l'entrée trueVelocity , vous devez la spécifier par rapport à ce cadre de navigation local.

  • Si vous définissez la propriété sur 'Geodetic', vous devez alors spécifier l'entrée truePosition comme coordonnées géodésiques en latitude, longitude et altitude. De plus, lorsque vous spécifiez l'entrée trueVelocity , vous devez la spécifier par rapport au cadre de navigation (NED ou ENU) dont l'origine correspond à l'entrée truePosition . Lors de la définition de la propriété sur 'Geodetic', l'objet gpsSensor néglige la propriété ReferenceLocation .

Types de données : character vector

Précision de la position horizontale en mètres, spécifiée comme un scalaire réel non négatif. La précision de la position horizontale spécifie l'écart type du bruit dans la mesure de la position horizontale.

Ajustable : Yes

Types de données : single | double

Précision de la position verticale en mètres, spécifiée comme un scalaire réel non négatif. La précision de la position verticale spécifie l'écart type du bruit dans la mesure de la position verticale.

Ajustable : Yes

Types de données : single | double

Précision de la vitesse en mètres par seconde, spécifiée comme un scalaire réel non négatif. La précision de la vitesse spécifie l'écart type du bruit dans la mesure de la vitesse.

Ajustable : Yes

Types de données : single | double

Facteur de décroissance du bruit de position globale, spécifié sous forme de scalaire dans la plage [0,1].

Un facteur de décroissance de 0 modélise le bruit de position globale comme un processus de bruit blanc. Un facteur de décroissance de 1 modélise le bruit de position globale comme un processus de marche aléatoire.

Ajustable : Yes

Types de données : single | double

Source de nombres aléatoires, spécifiée sous forme de vecteur de caractères ou de chaîne :

  • 'Global stream' –– Des nombres aléatoires sont générés à l’aide du flux de nombres aléatoires global actuel.

  • 'mt19937ar with seed' –– Des nombres aléatoires sont générés à l'aide de l'algorithme mt19937ar avec la graine spécifiée par la propriété Seed .

Types de données : char | string

Graine initiale d'un algorithme générateur de nombres aléatoires mt19937ar, spécifié comme un scalaire entier non négatif.

Dépendances

Pour activer cette propriété, définissez RandomStream sur 'mt19937ar with seed'.

Types de données : single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

Utilisation

Description

exemple

[position,velocity,groundspeed,course] = GPS(truePosition,trueVelocity) calcule les lectures du récepteur du système mondial de navigation par satellite à partir des entrées de position et de vitesse.

Arguments en entrée

développer tout

Position du récepteur GPS dans le système de coordonnées de navigation, spécifiée comme une matrice réelle finie N-by-3. N est le nombre d’échantillons dans la trame actuelle.

  • Lorsque la propriété PositionInputFormat est spécifiée comme 'Local', spécifiez truePosition comme coordonnées cartésiennes par rapport au repère de navigation local dont l'origine est fixée à ReferenceLocation.

  • Lorsque la propriété PositionInputFormat est spécifiée comme 'Geodetic', spécifiez truePosition comme coordonnées géodésiques dans [latitude longitude altitude]. Latitude et longitude sont en mètres. altitude est la hauteur au-dessus du modèle ellipsoïde WGS84 en mètres.

Types de données : single | double

Vitesse du récepteur GPS dans le système de coordonnées de navigation en mètres par seconde, spécifiée comme une matrice réelle N-by-3. N est le nombre d’échantillons dans la trame actuelle.

  • Lorsque la propriété PositionInputFormat est spécifiée comme 'Local', précisez trueVelocity par rapport au référentiel de navigation local (NED ou ENU) dont l'origine est fixé à ReferenceLocation.

  • Lorsque la propriété PositionInputFormat est spécifiée comme 'Geodetic', précisez trueVelocity par rapport au frame de navigation (NED ou ENU) dont l'origine correspond à l'entrée truePosition .

Types de données : single | double

Arguments de sortie

développer tout

Position du récepteur GPS dans le système de coordonnées géodésiques de latitude, longitude et altitude (LLA), renvoyée sous la forme d'un tableau fini réel N-by-3. La latitude et la longitude sont en degrés, le Nord et l'Est étant positifs. L'altitude est en mètres.

N est le nombre d’échantillons dans la trame actuelle.

Types de données : single | double

Vitesse du récepteur GPS dans le système de coordonnées de navigation local en mètres par seconde, renvoyée sous la forme d'un tableau de réels fini N-by-3. N est le nombre d’échantillons dans la trame actuelle.

  • Lorsque la propriété PositionInputFormat est spécifiée comme 'Local', la vitesse renvoyée est par rapport au référentiel de navigation local dont l'origine est fixée à ReferenceLocation.

  • Lorsque la propriété PositionInputFormat est spécifiée comme 'Geodetic', la vitesse renvoyée est par rapport au référentiel de navigation (NED ou ENU) dont l'origine correspond au position Sortie .

Types de données : single | double

Amplitude de la vitesse horizontale du récepteur GPS dans le système de coordonnées de navigation local en mètres par seconde, renvoyée sous la forme d'un vecteur colonne réel fini N-par 1.

N est le nombre d’échantillons dans la trame actuelle.

Types de données : single | double

Direction de la vitesse horizontale du récepteur GPS dans le système de coordonnées de navigation local en degrés, renvoyée sous la forme d'une colonne réelle finie N-par-1 de valeurs comprises entre 0 et 360. Le Nord correspond à 360 degrés et l’Est correspond à 90 degrés.

N est le nombre d’échantillons dans la trame actuelle.

Types de données : single | double

Fonctions d'objet

Pour utiliser une fonction objet, spécifiez le System object comme premier argument d'entrée. Par exemple, pour libérer les ressources système d'un System object nommé obj, utilisez cette syntaxe :

release(obj)

développer tout

stepRun System object algorithm
releaseRelease resources and allow changes to System object property values and input characteristics
resetReset internal states of System object

Exemples

réduire tout

Créez un gpsSensor System object™ pour modéliser les données du récepteur GPS. Supposons une fréquence d'échantillonnage typique d'un Hz et un temps de simulation de 1 000 secondes. Définir le lieu de référence en termes de latitude, de longitude et d'altitude (LLA) de Natick, MA (USA). Définissez le capteur comme stationnaire en spécifiant la position et la vitesse réelles avec des zéros.

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);

Appelez gps avec les truePosition et trueVelocity spécifiés pour simuler la réception de données GPS pour une plate-forme stationnaire.

position = gps(truePosition,trueVelocity);

Tracez la position réelle et les lectures du capteur GPS pour la position.

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.

Les lectures de position ont un bruit contrôlé par HorizontalPositionAccuracy, VerticalPositionAccuracy, VelocityAccuracy et DecayFactor. La propriété DecayFactor contrôle la dérive dans le modèle de bruit. Par défaut, DecayFactor est défini sur 0.999, ce qui se rapproche d'un processus de marche aléatoire. Pour observer l'effet de la propriété DecayFactor :

  1. Réinitialisez l'objet gps .

  2. Définissez DecayFactor sur 0.5.

  3. Appelez gps avec des variables spécifiant une position stationnaire.

  4. Tracez les résultats.

Les lectures de position GPS oscillent désormais autour de la position réelle.

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.

Les récepteurs GPS obtiennent une plus grande précision de cap à mesure que la vitesse sol augmente. Dans cet exemple, vous créez un objet de simulation de récepteur GPS et simulez les données reçues d'une plate-forme qui accélère à partir d'une position stationnaire.

Créez un System object™ gpsSensor par défaut pour modéliser les données renvoyées par un récepteur 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                         

Créez des matrices pour décrire la position et la vitesse d'une plate-forme dans le système de coordonnées NED. La plate-forme part d'une position stationnaire et accélère jusqu'à 60 m/s vers le nord-est en 60 secondes, puis a une accélération verticale jusqu'à 2 m/s en 2 secondes, suivie d'un taux de montée de 2 m/s pendant 8 secondes supplémentaires. Supposons une vitesse constante, telle que la vitesse soit la simple dérivée de la position.

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];

Modélisez les données de mesure GPS en appelant l'objet GPS avec vos matrices de vitesse et de position.

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

Tracez la vitesse sol et la différence entre la trajectoire réelle et la trajectoire renvoyée par le simulateur GPS.

À mesure que la vitesse sol augmente, la précision du cap augmente. Notez que l'augmentation de la vitesse au cours des dix dernières secondes n'a aucun effet, car la vitesse supplémentaire n'est pas dans le plan du sol.

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.

Simulez les données GPS reçues lors d'un trajet de la ville de Natick, MA, à Boston, MA.

Définissez le degré décimal de latitude et de longitude pour la ville de Natick, MA USA, et Boston, MA USA. Pour plus de simplicité, réglez l’altitude des deux emplacements sur zéro.

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

Définissez un mouvement qui peut transporter une plate-forme de Natick à Boston en 20 minutes. Définissez l'origine du système de coordonnées NED local sur Natick. Créez un objet waypointTrajectory pour générer la trajectoire 10 échantillons à la fois.

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);

Créez un objet gpsSensor pour modéliser la réception des données GPS pour la plateforme. Réglez le HorizontalPositionalAccuracy sur 25 et le DecayFactor sur 0.25 pour accentuer le bruit. Définissez le ReferenceLocation sur les coordonnées Natick dans LLA.

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

Ouvrez une figure et tracez la position de Natick et Boston dans LLA. Ignorez l'altitude par souci de simplicité.

Dans une boucle, appelez l'objet gpsSensor avec la trajectoire de vérité terrain pour simuler les données GPS reçues. Tracez la trajectoire de la vérité terrain et le modèle des données GPS reçues.

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.

Il est recommandé de libérer les objets système une fois l'opération terminée.

release(GPS)
release(trajectory)

Capacités étendues

Historique des versions

Introduit dans R2019b