Main Content

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

insSensor

Système de navigation inertielle et modèle de simulation GNSS/GPS

Depuis R2020b

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 :

  1. Créez l'objet insSensor 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

exemple

INS = insSensor renvoie un System object, INS, qui modélise un appareil qui produit des mesures à partir d'un INS et d'un GNSS.

exemple

INS = insSensor(Name,Value) 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.

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.

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

exemple

measurement = INS(gTruth) 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, gTruth.

measurement = INS(gTruth,simTime) spécifie en outre l'heure de la simulation, simTime. Pour activer cette syntaxe, définissez la propriété TimeInput sur true.

Arguments en entrée

développer tout

État de vérité inertielle du corps du capteur, en coordonnées cartésiennes locales, spécifié comme une structure contenant ces champs :

ChampDescription
'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 :

  • N-élément vecteur colonne des objets quaternion

  • 3-by-3-by- N tableau de matrices de rotation

  • N-matrice par 3 de [x roulis y pas z lacet ] angles en degrés

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

développer tout

Mesure du mouvement du corps du capteur, en coordonnées cartésiennes locales, renvoyée sous la forme d'une structure contenant ces champs :

ChampDescription
'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 :

  • N-élément vecteur colonne des objets quaternion

  • 3-by-3-by- N tableau de matrices de rotation

  • N-matrice par 3 de [x roulis y pas z lacet ] angles en degrés

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)

développer tout

perturbationsPerturbation définie sur l'objet
perturbAppliquer des perturbations à un objet
stepRun System object algorithm
cloneCreate duplicate System object
isLockedDetermine if System object is in use
resetReset internal states of System object
releaseRelease resources and allow changes to System object property values and input characteristics

Exemples

réduire tout

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

Figure contains 3 axes objects. Axes object 1 with title Position, xlabel Time (s), ylabel Position (m) contains 3 objects of type line. These objects represent North, East, Down. Axes object 2 with title Velocity, xlabel Time (s), ylabel Velocity (m/s) contains 3 objects of type line. These objects represent North, East, Down. Axes object 3 with title Orientation, xlabel Time (s), ylabel Rotation (degrees) contains 3 objects of type line. These objects represent 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)')

Figure contains 2 axes objects. Axes object 1 with title Path, xlabel North (m), ylabel East (m) contains an object of type line. Axes object 2 with title Orientation, xlabel Time (s), ylabel Rotation (degrees) contains 3 objects of type line. These objects represent Yaw, Pitch, Roll.

Capacités étendues

Historique des versions

Introduit dans R2020b