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 :
Créez l'objet
insSensor
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 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.
MountingLocation
— Emplacement du capteur sur la plateforme (m)
[0 0 0]
(par défaut) | vecteur de forme à valeur réelle à trois éléments [x y z]
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
RollAccuracy
— Précision de la mesure du roulis (deg)
0.2
(par défaut) | scalaire réel non négatif
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
PitchAccuracy
— Précision de la mesure du pas (deg)
0.2
(par défaut) | scalaire réel non négatif
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
YawAccuracy
— Précision de la mesure du lacet (deg)
1
(par défaut) | scalaire réel non négatif
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
PositionAccuracy
— Précision de la mesure de position (m)
[1 1 1]
(par défaut) | scalaire réel non négatif | vecteur à valeur réelle à trois éléments
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
VelocityAccuracy
— Précision de la mesure de la vitesse (m/s)
0.05
(par défaut) | scalaire réel non négatif
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
AccelerationAccuracy
— Précision de la mesure de l'accélération (m/s2)
0
(par défaut) | scalaire réel non négatif
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
AngularVelocityAccuracy
— Précision de la mesure de la vitesse angulaire (deg/s)
0
(par défaut) | scalaire réel non négatif
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
TimeInput
— Activer la saisie du temps de simulation
false
ou 0
(par défaut) | true
ou 1
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
HasGNSSFix
— Activer le correctif GNSS
true
ou 1
(par défaut) | false
ou 0
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
PositionErrorFactor
— Facteur d'erreur de position sans correctif GNSS
[0 0 0]
(par défaut) | scalaire non négatif | Vecteur 1 par 3 de scalaires
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
RandomStream
— Source de nombres aléatoires
'Global stream'
(par défaut) | 'mt19937ar with seed'
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
Seed
— Graine initiale
67
(par défaut) | entier non négatif
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
gTruth
— État de vérité fondamentale inertielle du corps du capteur
structure
É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]))
simTime
— Temps de simulation
scalaire réel non négatif
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
measurement
— Mesure du mouvement du corps du capteur
structure
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)
Spécifique au insSensor
perturbations | Perturbation définie sur l'objet |
perturb | Appliquer des perturbations à un objet |
Exemples
Générer des mesures INS à partir d'une entrée stationnaire
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érer des mesures INS pour une plate-forme tournante
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
Génération de code C/C++
Générez du code C et C++ avec MATLAB® Coder™.
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
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)