insSensor
Système de navigation inertielle et modèle de simulation GNSS/GPS
Description
Le insSensor System object™ modélise un appareil qui fusionne les mesures d'un système de navigation inertielle (INS) et d'un système mondial de navigation par satellite (GNSS) tel qu'un GPS, et génère les valeurs fusionnées. des mesures.
Pour produire des mesures INS et GNSS fusionnées :
Créez l'objet
insSensoret 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 System object, INS = insSensorINS, qui modélise un appareil qui produit des mesures à partir d'un INS et d'un GNSS.
définit properties en utilisant une ou plusieurs paires nom-valeur. Les propriétés non spécifiées ont des valeurs par défaut. Mettez chaque nom de propriété entre guillemets.INS = insSensor(Name,Value)
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.
Emplacement du capteur sur la plate-forme, en mètres, spécifié sous la forme d'un vecteur à valeur réelle à trois éléments de la forme [x y z]. Le vecteur définit le décalage de l'origine du capteur par rapport à l'origine de la plateforme.
Ajustable : Yes
Types de données : single | double
Précision de la mesure du roulis du corps du capteur, en degrés, spécifiée comme un scalaire réel non négatif.
Le roulis est la rotation autour de l'axe x du corps du capteur. Le bruit de roulement est modélisé comme un processus de bruit blanc. RollAccuracy définit l’écart type du bruit de mesure de roulis.
Ajustable : Yes
Types de données : single | double
Précision de la mesure du pas du corps du capteur, en degrés, spécifiée comme un scalaire réel non négatif.
Le pas est la rotation autour de l' y du corps du capteur. Le bruit de pitch est modélisé comme un processus de bruit blanc. PitchAccuracy définit l’écart type du bruit de mesure de pitch.
Ajustable : Yes
Types de données : single | double
Précision de la mesure du lacet du corps du capteur, en degrés, spécifiée comme un scalaire réel non négatif.
Le lacet est la rotation autour de l' z du corps du capteur. Le bruit de lacet est modélisé comme un processus de bruit blanc. YawAccuracy définit l’écart type du bruit de mesure de lacet.
Ajustable : Yes
Types de données : single | double
Précision de la mesure de la position du corps du capteur, en mètres, spécifiée comme un scalaire réel non négatif ou un vecteur à valeur réelle à trois éléments. Les éléments du vecteur définissent respectivement la précision des mesures de position x-, y- et z -. Si vous spécifiez PositionAccuracy comme valeur scalaire, l'objet définit la précision des trois positions sur cette valeur.
Le bruit de position est modélisé comme un processus de bruit blanc. PositionAccuracy définit l’écart type du bruit de mesure de position.
Ajustable : Yes
Types de données : single | double
Précision de la mesure de la vitesse du corps du capteur, en mètres par seconde, spécifiée comme un scalaire réel non négatif.
Le bruit de vitesse est modélisé comme un processus de bruit blanc. VelocityAccuracy définit l’écart type du bruit de mesure de vitesse.
Ajustable : Yes
Types de données : single | double
Précision de la mesure de l'accélération du corps du capteur, en mètres par seconde, spécifiée comme un scalaire réel non négatif.
Le bruit d’accélération est modélisé comme un processus de bruit blanc. AccelerationAccuracy définit l’écart type du bruit de mesure d’accélération.
Ajustable : Yes
Types de données : single | double
Précision de la mesure de la vitesse angulaire du corps du capteur, en mètres par seconde, spécifiée comme un scalaire réel non négatif.
La vitesse angulaire est modélisée comme un processus de bruit blanc. AngularVelocityAccuracy définit l’écart type du bruit de mesure d’accélération.
Ajustable : Yes
Types de données : single | double
Activer la saisie du temps de simulation, spécifié comme un 0 (false) ou 1 (true). Définissez cette propriété sur true pour saisir le temps de simulation à l'aide de l'argument simTime .
Ajustable : No
Types de données : logical
Activez le correctif GNSS, spécifié comme un 1 logique (true) ou 0 (false). Définissez cette propriété sur false pour simuler la perte d'un correctif de récepteur GNSS. Lorsqu'un repère de récepteur GNSS est perdu, les mesures de position dérivent à un taux spécifié par la propriété PositionErrorFactor .
Ajustable : Yes
Dépendances
Pour activer cette propriété, définissez TimeInput sur true.
Types de données : logical
Facteur d'erreur de position sans correctif GNSS, spécifié sous forme de scalaire ou de vecteur 1 x 3 de scalaires.
Lorsque la propriété HasGNSSFix est définie sur false, l'erreur de position augmente à un taux quadratique en raison du biais constant de l'accéléromètre. L'erreur de position pour un composant de position E(t) peut être exprimée comme E(t) = 1/2α t 2, où α est le facteur d'erreur de position pour le correspondant composant et t est le temps écoulé depuis la perte du correctif GNSS. Pendant l'exécution, l'objet calcule t en fonction de l'entrée simTime . Les valeurs E(t) calculées pour les x, y et z Les composants sont ajoutés aux composants de position correspondants de l'entrée gTruth .
Ajustable : Yes
Dépendances
Pour activer cette propriété, définissez TimeInput sur true et HasGNSSFix sur false.
Types de données : single | double
Source de nombres aléatoires, spécifiée comme l'une de ces options :
'Global stream'–– Génère des nombres aléatoires en utilisant le flux de nombres aléatoires global actuel.'mt19937ar with seed'–– Générez des nombres aléatoires à 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 de l'algorithme générateur de nombres aléatoires mt19937ar, spécifiée comme un 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
modélise les données reçues d'une lecture de capteur INS et d'une lecture de capteur GNSS. La mesure de sortie est basée sur l'état de vérité fondamentale inertielle du corps du capteur, measurement = INS(gTruth)gTruth.
spécifie en outre l'heure de la simulation, measurement = INS(gTruth,simTime)simTime. Pour activer cette syntaxe, définissez la propriété TimeInput sur true.
Arguments en entrée
État de vérité inertielle du corps du capteur, en coordonnées cartésiennes locales, spécifié comme une structure contenant ces champs :
| Champ | Description |
|---|---|
'Position' | Position, en mètres, spécifiée comme une matrice réelle et finie N-par 3 de [x y z] vecteurs. N est le nombre d’échantillons dans la trame actuelle. |
'Velocity' | Vitesse (v), en mètres par seconde, spécifiée comme une matrice réelle et finie N-par 3 de [v x v et v z ] vecteur. N est le nombre d’échantillons dans la trame actuelle. |
'Orientation' | Orientation par rapport au système de coordonnées cartésiennes local, spécifié comme l'une de ces options :
Chaque quaternion ou matrice de rotation est une rotation de trame du système de coordonnées cartésiennes local vers le système de coordonnées actuel du corps du capteur. N est le nombre d’échantillons dans la trame actuelle. |
'Acceleration' | Accélération (a), en mètres par seconde carrée, spécifiée comme une matrice N réelle et finie -par 3 de [a x a y a z ] vecteurs. N est le nombre d’échantillons dans la trame actuelle. |
'AngularVelocity' | Vitesse angulaire (ω), en degrés par seconde carrée, spécifiée comme une matrice N réelle et finie -par 3 de [ω x ω y ω z ] vecteurs. N est le nombre d’échantillons dans la trame actuelle. |
Les valeurs des champs doivent être de type double ou single.
Les champs Position, Velocity et Orientation sont obligatoires. Les autres champs sont facultatifs.
Exemple : struct('Position',[0 0 0],'Velocity',[0 0 0],'Orientation',quaternion([1 0 0 0]))
Temps de simulation, en secondes, spécifié sous la forme d'un scalaire réel non négatif.
Types de données : single | double
Arguments de sortie
Mesure du mouvement du corps du capteur, en coordonnées cartésiennes locales, renvoyée sous la forme d'une structure contenant ces champs :
| Champ | Description |
|---|---|
'Position' | Position, en mètres, spécifiée comme une matrice réelle et finie N-par 3 de [x y z] vecteurs. N est le nombre d’échantillons dans la trame actuelle. |
'Velocity' | Vitesse (v), en mètres par seconde, spécifiée comme une matrice réelle et finie N-par 3 de [v x v et v z ] vecteur. N est le nombre d’échantillons dans la trame actuelle. |
'Orientation' | Orientation par rapport au système de coordonnées cartésiennes local, spécifié comme l'une de ces options :
Chaque quaternion ou matrice de rotation est une rotation de trame du système de coordonnées cartésiennes local vers le système de coordonnées actuel du corps du capteur. N est le nombre d’échantillons dans la trame actuelle. |
'Acceleration' | Accélération (a), en mètres par seconde carrée, spécifiée comme une matrice N réelle et finie -par 3 de [a x a y a z ] vecteurs. N est le nombre d’échantillons dans la trame actuelle. |
'AngularVelocity' | Vitesse angulaire (ω), en degrés par seconde carrée, spécifiée comme une matrice N réelle et finie -par 3 de [ω x ω y ω z ] vecteurs. N est le nombre d’échantillons dans la trame actuelle. |
Les valeurs de champ renvoyées sont de type double ou single et sont du même type que les valeurs de champ correspondantes dans l'entrée gTruth .
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)
perturbations | Perturbation définie sur l'objet |
perturb | Appliquer des perturbations à un objet |
Exemples
Créez une structure de mouvement qui définit une position stationnaire à l'origine locale nord-est-bas (NED). La plateforme étant stationnaire, vous ne devez définir qu’un seul échantillon. Supposons que le mouvement de la vérité terrain soit échantillonné pendant 10 secondes avec une fréquence d'échantillonnage de 100 Hz. Créez un System object™ insSensor par défaut™ . Pré-allouer des variables pour conserver la sortie de l'objet insSensor .
Fs = 100; duration = 10; numSamples = Fs*duration; motion = struct( ... 'Position',zeros(1,3), ... 'Velocity',zeros(1,3), ... 'Orientation',ones(1,1,'quaternion')); INS = insSensor; positionMeasurements = zeros(numSamples,3); velocityMeasurements = zeros(numSamples,3); orientationMeasurements = zeros(numSamples,1,'quaternion');
Dans une boucle, appelez INS avec la structure de mouvement stationnaire pour renvoyer les mesures de position, de vitesse et d'orientation dans le système de coordonnées NED local. Enregistrez les mesures de position, de vitesse et d’orientation.
for i = 1:numSamples measurements = INS(motion); positionMeasurements(i,:) = measurements.Position; velocityMeasurements(i,:) = measurements.Velocity; orientationMeasurements(i) = measurements.Orientation; end
Convertissez l'orientation des quaternions en angles d'Euler à des fins de visualisation. Tracez les mesures de position, de vitesse et d'orientation au fil du temps.
orientationMeasurements = eulerd(orientationMeasurements,'ZYX','frame'); t = (0:(numSamples-1))/Fs; subplot(3,1,1) plot(t,positionMeasurements) title('Position') xlabel('Time (s)') ylabel('Position (m)') legend('North','East','Down') subplot(3,1,2) plot(t,velocityMeasurements) title('Velocity') xlabel('Time (s)') ylabel('Velocity (m/s)') legend('North','East','Down') subplot(3,1,3) plot(t,orientationMeasurements) title('Orientation') xlabel('Time (s)') ylabel('Rotation (degrees)') legend('Roll', 'Pitch', 'Yaw')

Générez des mesures INS à l'aide de l'objet insSensor System object™. Utilisez waypointTrajectory pour générer le chemin de la vérité terrain.
Spécifiez une orientation de vérité terrain qui commence avec l’axe x du corps du capteur aligné avec le nord et se termine avec l’axe x du corps du capteur aligné avec l’est. Spécifiez des points de cheminement pour une trajectoire d'arc et un vecteur d'heure d'arrivée pour les points de cheminement correspondants. Utilisez une fréquence d'échantillonnage de 100 Hz. Créez un System object waypointTrajectory avec les contraintes de point de cheminement et définissez SamplesPerFrame pour que la trajectoire entière soit affichée en un seul appel.
eulerAngles = [0,0,0; ... 0,0,0; ... 90,0,0; ... 90,0,0]; orientation = quaternion(eulerAngles,'eulerd','ZYX','frame'); r = 20; waypoints = [0,0,0; ... 100,0,0; ... 100+r,r,0; ... 100+r,100+r,0]; toa = [0,10,10+(2*pi*r/4),20+(2*pi*r/4)]; Fs = 100; numSamples = floor(Fs*toa(end)); path = waypointTrajectory('Waypoints',waypoints, ... 'TimeOfArrival',toa, ... 'Orientation',orientation, ... 'SampleRate',Fs, ... 'SamplesPerFrame',numSamples);
Créez un System object insSensor pour modéliser la réception des données INS. Définissez le PositionAccuracy sur 0.1.
ins = insSensor('PositionAccuracy',0.1);Appelez l'objet de trajectoire du point de cheminement, path, pour générer le mouvement de vérité terrain. Appelez le simulateur INS, ins, avec le mouvement de vérité terrain pour générer des mesures INS.
[motion.Position,motion.Orientation,motion.Velocity] = path(); insMeas = ins(motion);
Convertissez l'orientation renvoyée par ins en angles d'Euler en degrés à des fins de visualisation. Tracez le chemin complet et l'orientation au fil du temps.
orientationMeasurementEuler = eulerd(insMeas.Orientation,'ZYX','frame'); subplot(2,1,1) plot(insMeas.Position(:,1),insMeas.Position(:,2)); title('Path') xlabel('North (m)') ylabel('East (m)') subplot(2,1,2) t = (0:(numSamples-1)).'/Fs; plot(t,orientationMeasurementEuler(:,1), ... t,orientationMeasurementEuler(:,2), ... t,orientationMeasurementEuler(:,3)); title('Orientation') legend('Yaw','Pitch','Roll') xlabel('Time (s)') ylabel('Rotation (degrees)')

Capacités étendues
Les fonctions d'objet, perturbations et perturb, ne prennent pas en charge la génération de code.
Notes d'utilisation et limitations :
Voir System Objects in MATLAB Code Generation (MATLAB Coder).
Historique des versions
Introduit dans R2020b
Voir aussi
Objets
Objets
MATLAB Command
You clicked a link that corresponds to this MATLAB command:
Run the command by entering it in the MATLAB Command Window. Web browsers do not support MATLAB commands.
Sélectionner un site web
Choisissez un site web pour accéder au contenu traduit dans votre langue (lorsqu'il est disponible) et voir les événements et les offres locales. D’après votre position, nous vous recommandons de sélectionner la région suivante : .
Vous pouvez également sélectionner un site web dans la liste suivante :
Comment optimiser les performances du site
Pour optimiser les performances du site, sélectionnez la région Chine (en chinois ou en anglais). Les sites de MathWorks pour les autres pays ne sont pas optimisés pour les visites provenant de votre région.
Amériques
- 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)