gpsSensor
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 :
Créez l'objet
gpsSensor
et définissez ses propriétés.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
renvoie un GPS
= gpsSensorgpsSensor
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
renvoie un GPS
= gpsSensor('ReferenceFrame'
,RF
)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'
.
GPS = gpsSensor(___,
définit chaque propriété Name,Value
)Name
sur le Value
spécifié. Les propriétés non spécifiées ont des valeurs par défaut.
Propriétés
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.
SampleRate
— Taux de mise à jour du récepteur (Hz)
1
(par défaut) | scalaire réel positif
Taux de mise à jour du récepteur en Hz, spécifié comme un scalaire réel positif.
Types de données : single
| double
ReferenceLocation
— Origine du référentiel de navigation locale
[0 0 0]
(par défaut) | [latitude longitude altitude]
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
PositionInputFormat
— Format de saisie des coordonnées de position
'Local'
(par défaut) | 'Geodetic'
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éetruePosition
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éetrueVelocity
, 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éetruePosition
comme coordonnées géodésiques en latitude, longitude et altitude. De plus, lorsque vous spécifiez l'entréetrueVelocity
, vous devez la spécifier par rapport au cadre de navigation (NED ou ENU) dont l'origine correspond à l'entréetruePosition
. Lors de la définition de la propriété sur'Geodetic'
, l'objetgpsSensor
néglige la propriétéReferenceLocation
.
Types de données : character vector
HorizontalPositionAccuracy
— Précision de la position horizontale (m)
1.6
(par défaut) | scalaire réel non négatif
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
VerticalPositionAccuracy
— Précision de la position verticale (m)
3
(par défaut) | scalaire réel non négatif
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
VelocityAccuracy
— Précision de la vitesse (m/s)
0.1
(par défaut) | scalaire réel non négatif
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
DecayFactor
— Facteur de décroissance du bruit de la position globale
0.999
(par défaut) | scalaire dans la plage [0,1]
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
RandomStream
— Source de nombres aléatoires
'Global stream'
(par défaut) | 'mt19937ar with seed'
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
Seed
— Graine initiale
67
(par défaut) | scalaire entier non négatif
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
[
calcule les lectures du récepteur du système mondial de navigation par satellite à partir des entrées de position et de vitesse.position
,velocity
,groundspeed
,course
] = GPS(truePosition
,trueVelocity
)
Arguments en entrée
truePosition
— Position du récepteur GPS dans le système de coordonnées de navigation
N-matrice par 3
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écifieztruePosition
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écifieztruePosition
comme coordonnées géodésiques dans[latitude longitude altitude]
.Latitude
etlongitude
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
trueVelocity
— Vitesse du récepteur GPS dans le système de coordonnées de navigation (m/s)
N-matrice par 3
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éciseztrueVelocity
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éciseztrueVelocity
par rapport au frame de navigation (NED ou ENU) dont l'origine correspond à l'entréetruePosition
.
Types de données : single
| double
Arguments de sortie
position
— Position dans le système de coordonnées LLA
N-matrice par 3
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
velocity
— Vitesse dans le système de coordonnées de navigation local (m/s)
N-matrice par 3
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 auposition
Sortie .
Types de données : single
| double
groundspeed
— Ampleur de la vitesse horizontale dans le système de coordonnées de navigation local (m/s)
N vecteur colonne -par 1
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
course
— Direction de la vitesse horizontale dans le système de coordonnées de navigation local (°)
N vecteur colonne -par 1
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)
Exemples
Générer des mesures de position GPS à partir d'une entrée stationnaire
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)')
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
:
Réinitialisez l'objet
gps
.Définissez
DecayFactor
sur0.5
.Appelez
gps
avec des variables spécifiant une position stationnaire.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)')
Relation entre la vitesse sol et la précision du cap
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)')
Modèle de données du récepteur GPS
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
Il est recommandé de libérer les objets système une fois l'opération terminée.
release(GPS) release(trajectory)
Capacités étendues
Génération de code C/C++
Générez du code C et C++ avec MATLAB® Coder™.
Notes d'utilisation et limitations :
Voir System Objects in MATLAB Code Generation (MATLAB Coder).
Historique des versions
Introduit dans R2019b
Commande MATLAB
Vous avez cliqué sur un lien qui correspond à cette commande MATLAB :
Pour exécuter la commande, saisissez-la dans la fenêtre de commande de MATLAB. Les navigateurs web ne supportent pas les commandes 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)