ecompass
Orientation à partir des lectures du magnétomètre et de l'accéléromètre
Syntaxe
Description
renvoie un orientation
= ecompass(accelerometerReading
,magnetometerReading
)quaternion
qui peut faire pivoter les quantités d'un cadre parent (NED) vers un cadre enfant (capteur).
spécifie le format d'orientation comme orientation
= ecompass(accelerometerReading
,magnetometerReading
,orientationFormat
)quaternion
ou matrice de rotation.
permet également de spécifier le référentiel orientation
= ecompass(accelerometerReading
,magnetometerReading
,orientationFormat
,'ReferenceFrame'
,RF)RF
de la sortie orientation
. Spécifiez RF
comme 'NED'
(Nord-Est-Bas) ou 'ENU'
(Est-Nord-Haut). La valeur par défaut est 'NED'
.
Exemples
Arguments d'entrée
Arguments de sortie
Algorithmes
La fonction ecompass
renvoie un quaternion ou une matrice de rotation qui peut faire pivoter les quantités d'une image parent (NED par exemple) vers une image enfant (capteur). Pour les deux formats d'orientation de sortie, l'opérateur de rotation est déterminé en calculant la matrice de rotation.
La matrice de rotation est d'abord calculée avec un intermédiaire :
puis normalisé par colonne. a et m sont respectivement l'entrée accelerometerReading
et l'entrée magnetometerReading
.
Pour comprendre le calcul de la matrice de rotation, considérons un point arbitraire sur la Terre et son repère NED local correspondant. Supposons un cadre de corps de capteur, [x, y, z], avec la même origine.
Rappelons que l'orientation d'un corps de capteur est définie comme l'opérateur de rotation (matrice de rotation ou quaternion) nécessaire pour faire pivoter une quantité d'un cadre parent (NED) vers un cadre enfant (corps du capteur) :
où
R est une matrice de rotation 3x3, qui peut être interprétée comme l'orientation du cadre enfant.
p parent est un vecteur 3 par 1 dans le cadre parent.
p child est un vecteur 3 par 1 dans le cadre enfant.
Pour un corps de capteur stable, un accéléromètre renvoie l'accélération due à la gravité. Si le corps du capteur est parfaitement aligné avec le système de coordonnées NED, toute accélération due à la gravité se fait le long de l'axe z et l'accéléromètre indique [0 0 1]. Considérons la matrice de rotation requise pour faire pivoter une quantité du système de coordonnées NED vers une quantité indiquée par l'accéléromètre.
La troisième colonne de la matrice de rotation correspond à la lecture de l'accéléromètre :
Une lecture du magnétomètre pointe vers le nord magnétique et se trouve dans le plan N- D . Encore une fois, considérons un cadre de corps de capteur aligné avec le système de coordonnées NED.
Par définition, l'axe E est perpendiculaire au plan N- D , donc D ⨯ N = E, dans une certaine mise à l'échelle d'amplitude. Si le cadre du corps du capteur est aligné avec NED, le vecteur d'accélération de l'accéléromètre et le vecteur de champ magnétique du magnétomètre se trouvent dans le plan N- D . Par conséquent a ⨯ m = y, encore une fois avec une certaine mise à l'échelle d'amplitude.
Considérez la matrice de rotation requise pour faire pivoter NED vers le cadre enfant, [x y z].
La deuxième colonne de la matrice de rotation correspond au produit vectoriel de la lecture de l'accéléromètre et de la lecture du magnétomètre :
Par définition d'une matrice de rotation, la colonne 1 est le produit croisé des colonnes 2 et 3 :
Enfin, la matrice de rotation est normalisée par colonne :
Remarque
L'algorithme ecompass
utilise le nord magnétique, et non le nord vrai, pour le système de coordonnées NED.
Références
[1] Open Source Sensor Fusion. https://github.com/memsindustrygroup/Open-Source-Sensor-Fusion/tree/master/docs
Capacités étendues
Historique des versions
Introduit dans R2018b