PSINS-Toolbox-Lernen (2) Konzept und Konvertierung von Haltungsmatrix, Quaternion, Euler-Winkel und äquivalentem Rotationsvektor


Die Haltung des Trägers bezieht sich auf die Orientierungsbeziehung zwischen dem Trägerkoordinatensystem und dem Navigationskoordinatensystem , und die direkte Orientierungsbeziehung zwischen den beiden Koordinatensystemen kann dem Problem der Festpunktrotation starrer Körper in der Mechanik entsprechen. In der Festpunktrotationstheorie starrer Körper gehören zu den traditionellen Methoden zur Beschreibung der Orientierungsbeziehung des sich bewegenden Koordinatensystems relativ zum Referenzkoordinatensystem die Euler-Winkel-Methode , die Richtungskosinus-Methode und die Quaternion-Methode . Sowohl die traditionelle Richtungskosinusmethode als auch die Quaternionmethode gehen davon aus, dass sich der Körper auf einer festen Achse bewegt, und in diesem Fall liegt kein Nichtkommutabilitätsfehler vor . Beim Strapdown-Trägheitsnavigationssystem ist das Trägheitsgerät jedoch direkt am Körper installiert und folgt der Bewegung des Körpers, sodass es für die tatsächliche Umgebung nicht geeignet ist, davon auszugehen, dass die Bewegung des Körpers eine feste Achse ist. Daher gilt: Für hochdynamische Umgebungen gibt es eine Haltungslösung mit höherer Genauigkeit. Berechnungsmethode: Äquivalente Rotationsvektormethode .

Da das Strapdown-Trägheitsnavigationssystem die durch die Berechnung der Lagematrix festgelegte mathematische Plattform übernimmt, hat der Lagealgorithmus im Aktualisierungsalgorithmus der Lage, Geschwindigkeit und Position des Strapdown-Trägheitsnavigationssystems den größten Einfluss auf die Genauigkeit des Ganzen System, und es ist der Kernpunkt der Algorithmusforschung und des Algorithmusdesigns .

Ziel der Lagelösung: Kennen Sie die anfänglichen Lageparameter und geben Sie die Lageparameter gemäß der Messung des Gyroskops in Echtzeit aus :

Fügen Sie hier eine Bildbeschreibung ein

1. Grundkonzepte

1. Definition des Koordinatensystems

Das Trägheitsnavigationskoordinatensystem kann entsprechend der Position und Achse des Ursprungs in vier Kategorien unterteilt werden:

1. Trägheitskoordinatensystem (i-System)

Auch als ECI bekannt, liegt der Ursprung im Massenmittelpunkt der Erde und die Koordinatenachse dreht sich nicht mit der Erde (die Z-Achse zeigt auf den Nordpol und die X-Achse zeigt auf die Frühlings-Tagundnachtgleiche). Darauf basiert die Ausgabe des Trägheitssensors. Obwohl es vom Gravitationsfeld der Sonne beeinflusst wird, gibt es 6 ∗ 1 0 − 7 g 6*10^{-7}g61 07 gorbitale Zentripetalkraft; wenn jedoch die Erde als Trägheitsnavigationsreferenz auf der Erdoberfläche verwendet wird, befinden sich der bewegte Träger und die Erde ungefähr im gleichen solaren Gravitationsfeld, und sein Einfluss kann ignoriert werden.

2. Erdzentriertes erdfestes Koordinatensystem (e-System)

Auch als ECEF bekannt, liegt der Ursprung im Massenmittelpunkt der Karte und die Koordinatenachse dreht sich mit der Erde (die Z-Achse zeigt auf den Nordpol und die X-Achse zeigt auf den Schnittpunkt von Äquator und Nullmeridian). ). Dieses Koordinatensystem wird am häufigsten von GNSS-Systemen verwendet. Die Winkelbewegung von ECEF relativ zu ECI ist die Winkelgeschwindigkeit der Erdrotation ω, also \omega_{ie}Ohich e

3. Navigationskoordinatensystem (n-System)

Auch als lokales horizontales Koordinatensystem bekannt. Der Ursprung liegt am Träger und die Koordinatenachse ändert sich nicht mit dem Träger . Es gibt zwei Beschreibungen: North East Earth (NED) und North East Heaven (ENU). Es ist das Koordinatensystem, das von der Trägheitsnavigation zur Lösung der Parameter verwendet wird. Bei der Berechnung der Trägheitsnavigation geht es insbesondere um die Erdbeschleunigung, die in diesem Koordinatensystem angezeigt werden kann.

4. Trägerkoordinatensystem (b-System)

Der Ursprung liegt am Träger und die Koordinatenachse ändert sich mit dem Träger . Im Vergleich zum Navigationskoordinatensystem gibt es auch zwei Beschreibungen: vorne unten rechts (FRD) und rechts vorne oben (RFU). Es gibt viele B-Serien in einem Navigationssystem: B-Serie von IMU, B-Serie von Trägern, B-Serie von Kameras und so weiter. Die Azimutbeziehung zwischen B-System und I-System kann durch einen Satz Euler-Winkel beschrieben werden.

In PSINS: Navigationskoordinatensystem (n): Ost E-Nord N-Tag U, Fahrzeugkoordinatensystem (b): rechts R-vorne F-oben U

Fügen Sie hier eine Bildbeschreibung ein

2. Antisymmetrisches Array

( V × ) = [ 0 − V z V y V z 0 − V x − V y V x 0 ] (\boldsymbol{V} \times)=\left[\begin{array}{ccc} 0 & -V_ {z} & V_{y} \\ V_{z} & 0 & -V_{x} \\ -V_{y} & V_{x} & 0 \end{array}\right]( V × )= 0VzVyVz0VxVyVx0

Antisymmetriepunkte::

  1. Beide sind auf der Diagonale 0 und der obere und untere Teil sind symmetrisch und entgegengesetzt, das heißt: ( V × ) = − ( V × ) T (V \times)=-(V\times)^{T}( V × )=( V × )T , daher spricht man von einer antisymmetrischen Matrix.

  2. Das Kreuzprodukt eines Vektors mit einem anderen Vektor ist gleich dem Punktprodukt der antisymmetrischen Matrix eines anderen Vektors, und das Kreuzprodukt wird in ein Punktprodukt umgewandelt .

  3. 反对称阵的幂方通式:
    ( V × ) i = { ( − 1 ) ( i − 1 ) / 2 vi − 1 ( V × ) i = 1 , 3 , 5 , ⋯ ( − 1 ) ( i − 2 ) / 2 vi − 2 ( V × ) 2 i = 2 , 4 , 6 , ⋯ (\boldsymbol{V} \times)^{i}=\left\{\begin{array}{ll} (-1 )^{(i-1) / 2} v^{i-1}(\boldsymbol{V} \times) & i=1,3,5, \cdots \\ (-1)^{(i-2 ) / 2} v^{i-2}(\boldsymbol{V} \times)^{2} & i=2,4,6, \cdots \end{array}\right.( V × )ich={ ( 1 )( i 1 ) /2 vi 1 (V×)( 1 )( i 2 ) /2 vi 2 (V×)2ich=1 ,3 ,5 ,ich=2 ,4 ,6 ,

3. Euler-Winkel

A = [ θ γ ψ ] T \ball symbol{A}=\left[\begin{array}{lll}\theta & \gamma & \psi\end{array}\right]^{\mathrm{T}} ;A=[ichCP]T

Der Euler-Winkel ist eine klassische Methode zur Beschreibung der relativen Lage zwischen zwei Koordinatensystemen durch den um die Koordinatenachse transformierten Winkel . Die physikalische Bedeutung ist intuitiv und leicht zu verstehen, insbesondere zur Beschreibung der Bewegung des Trägerkoordinatensystems relativ zur lokalen Navigationskoordinate System .

Euler-Winkel stellen Rotation dar : Im dreidimensionalen Raum kann die Orientierungsbeziehung eines rechteckigen Koordinatensystems relativ zu einem anderen rechteckigen Koordinatensystem durch drei aufeinanderfolgende Drehungen beschrieben werden , und die Koordinatenachse um jede Drehung ist orthogonal zur vorderen und hinteren Rotationsachse. Euler hat bewiesen, dass die relative Orientierungsbeziehung zwischen zwei beliebigen orthogonalen Koordinatensystemen durch einen Satz von Winkeln von mindestens 3 beschrieben werden kann und die Drehwinkel dieser drei Drehungen als Satz von Euler-Winkeln (Euler-Winkelgruppe) bezeichnet werden .

Fügen Sie hier eine Bildbeschreibung ein

Euler-Winkel stellen die Lage dar : Um die Lage des Trägers zu beschreiben, können Sie ein Referenzkoordinatensystem angeben und dann einen Satz Euler-Winkel verwenden, um die Drehung des Koordinatensystems, das mit dem Träger und dem Festkörper verbunden ist, relativ zu beschreiben Referenzkoordinatensystem. Bei erdnahen Navigationsanwendungen wählt das Referenzkoordinatensystem im Allgemeinen standardmäßig das lokale geografische Koordinatensystem aus, während das bewegliche Koordinatensystem ein fest mit dem Fahrzeug verbundenes Koordinatensystem ist.

Fügen Sie hier eine Bildbeschreibung ein

  • Kurswinkel : Der Winkel zwischen der Projektion der positiven Längsachse des Trägers auf die lokale horizontale Ebene und der lokalen geografischen Nordrichtung. Er wird oft als positiv von Nord nach Ost angenommen, im Allgemeinen dargestellt durch ψ, und der Winkelbereich beträgt 0 ∼ 360◦ oder −180◦ ∼ +180◦ .
  • Neigungswinkel : Der Winkel zwischen der positiven Richtung der Längsachse des Trägers und seiner horizontalen Projektionslinie. Er wird als positiv definiert, wenn der Träger „seinen Kopf hebt“, im Allgemeinen dargestellt durch θ, und sein Wert liegt im Bereich von –90◦ bis 90◦.
  • Rollwinkel : Der Winkel zwischen der positiven Richtung der vertikalen Achse des Trägers und der vertikalen Ebene, in der sich die Längsachse des Trägers befindet. Wenn der Träger nach rechts neigt (z. B. wenn der rechte Flügel des Flugzeugs nach unten gedrückt wird) , es ist positiv. Verwenden Sie ϕ \ phiϕ gibt an, dass der Wertebereich −180◦ ∼ +180◦ beträgt.

Grundlagen der Eulerschen Winkel::

  1. Die relative Orientierungsbeziehung zwischen zwei orthogonalen Koordinatensystemen kann durch einen Satz Euler-Winkel beschrieben werden. Bei einem Satz Euler-Winkel muss gleichzeitig die entsprechende Rotationsachsenreihenfolge angegeben werden. PSINS verwendet den Nordosthimmel, 312 Euler-Winkel
  2. Der Navigationslagewinkel, einschließlich Kurswinkel, Nickwinkel und Rollwinkel, hängt eng mit der physischen Achse des Fahrzeugs zusammen und hat nichts mit dem ausgewählten mathematischen Koordinatensystem des Fahrzeugs zu tun.
  3. Wenn der Steigungswinkel ± 9 0 ∘ \pm 90^{\circ} beträgt± 9 0Wenn ∘ , gibt es einen singulären Wert in der Euler-Winkeltransformation, und der Rollwinkel und der Kurswinkel können derzeit nicht unterschieden werden. Daher kann die Euler-Winkelmethode nicht für Navigationsanwendungen in voller Flughöhe verwendet werden.
  4. Sätze von Euler-Winkeln können nicht direkt addiert werden, um die Zusammensetzung zweier Rotationen darzustellen.

4. Rotationsmatrix/Richtungskosinusmatrix

C = [ cxxcxycxzcyxcyycyzczx czyczz ] \boldsymbol{C}=\left[\begin{array}{lll}c_{xx} & c_{xy} & c_{xz} \\ c_{yx} & c_{yy} & c_ {yz} \\ c_{zx} & c_{zy} & c_{zz}\end{array}\right]C= CxxCy xCz xCx yCjjCzyCx zCyzCzz

Die Richtungskosinusmatrix (Direction Cosine Matrix, DCM) ist eine Lagematrix, die durch den Richtungskosinus des Vektors dargestellt wird und häufig zur Beschreibung der relativen Lage zweier Koordinatensysteme verwendet wird. Im Vergleich zum Euler-Winkel ist die Richtungskosinusmatrix viel abstrakter, aber die Projektionstransformation von Vektoren ist sehr praktisch .

Wir wissen, dass die drei Projektionswerte des Vektors im Raum die Koordinaten sind und derselbe Vektor in ii isti -Serie undBBDas b- System hat zwei Koordinatensätze und ihre Beziehung kann ausgedrückt werden als:
V = V xiii + V yiji + V ziki = V xbib + V ybjb + V zbkb \boldsymbol{V}=V_{x}^{i} \boldsymbol{ i}_{i}+V_{y}^{i} \boldsymbol{j}_{i}+V_{z}^{i} \boldsymbol{k}_{i}=V_{x} ^{b } \boldsymbol{i}_{b}+V_{y}^{b} \boldsymbol{j}_{b}+V_{z}^{b} \boldsymbol{k}_{b}V=VXichichich+VjichJich+Vzichkich=VXbichb+VjbJb+Vzbkb
[ iijiki ] [ V xi V yi V zi ] = [ ibjbkb ] [ V xb V yb V zb ] = [ iijiki ] P [ V xb V yb V zb ] \left[\begin{array}{lll}\boldsymbol {i}_{i} & \boldsymbol{j}_{i} & \boldsymbol{k}_{i}\end{array}\right]\left[\begin{array}{c}V_{x} ^{i} \\ V_{y}^{i} \\ V_{z}^{i}\end{array}\right]=\left[\begin{array}{lll}\boldsymbol{i}_ {b} & \boldsymbol{j}_{b} & \boldsymbol{k}_{b}\end{array}\right]\left[\begin{array}{c}V_{x}^{b} \\ V_{y}^{b} \\ V_{z}^{b}\end{array}\right]=\left[\begin{array}{lll}\boldsymbol{i}_{i} & \boldsymbol{j}_{i} & \boldsymbol{k}_{i}\end{array}\right] \boldsymbol{P}\left[\begin{array}{c}V_{x}^{b } \\ V_{y}^{b} \\ V_{z}^{b}\end{array}\right][ichichJichkich] VXichVjichVzich =[ichbJbkb] VXbVjbVzb =[ichichJichkich]P VXbVjbVzb

有:
[ V xi V yi V zi ] = P [ V xb V yb V zb ] \left[\begin{array}{c}V_{x}^{i} \\ V_{y}^{i} \ \ V_{z}^{i}\end{array}\right]=\boldsymbol{P}\left[\begin{array}{c}V_{x}^{b} \\ V_{y}^{ b} \\ V_{z}^{b}\end{array}\right] VXichVjichVzich =P VXbVjbVzb
记为V i = PV b = C bi V b \boldsymbol{V}^{i}=\boldsymbol{P} \boldsymbol{V}^{b}=\boldsymbol{C}_{b}^{i} \boldsymbol{V}^{b}Vich=P VB=CBichVbC bi C_b^iCBichSie wird als Koordinatensystemtransformationsmatrix (i->b) oder Koordinatentransformationsmatrix (b->i) bezeichnet, auch bekannt als Richtungskosinusmatrix und Übergangsmatrix .

Grundlagen des Richtungs-Kosinus-Arrays::

  1. Da es sich bei allen um Einheitsarrays handelt, stellt jedes Element im Richtungskosinusarray den Kosinuswert des Winkels zwischen den Koordinatenachsen der beiden Sätze von Koordinatensystemen dar, daher der Name.
  2. Unterscheiden Sie zwischen der Koordinatensystemtransformationsmatrix und der Koordinatentransformationsmatrix .
  3. Obwohl das Richtungskosinus-Array 9 Parameter hat, enthält es 6 Einschränkungen, das heißt, der Modul des Zeilenvektors beträgt 1 und jedes Paar ist orthogonal und nur 3 Parameter sind unabhängig.
  4. Die Richtungskosinusmatrix ist eine orthogonale Matrix , ( C α β ) − 1 = ( C α β ) T \left(\mathbf{C}_{\alpha}^{\beta}\right)^{-1 }=\ left(\mathbf{C}_{\alpha}^{\beta}\right)^{\mathrm{T}}( CAB)1=( CAB)T. _ Mehrere aufeinanderfolgende Rotationen können durch Multiplikation entsprechender Kosinusmatrizen mit mehreren Richtungen dargestellt werden:C ad = C bd C ab \mathbf{C}_{a}^{d}=\mathbf{C}_{b}^{ d} \ mathbf{C}_{a}^{b}CAd=CBdCAb
  5. Wenn sich der Träger bewegt, ändert sich die relative Lage zwischen den beiden Koordinatensystemen mit der Zeit und die entsprechende Richtungskosinusmatrix C b R ( t ) \mathbf{C}_{b}^{R}(t)CBR( t ) ist eine zeitveränderliche Matrix und ihre Differentialgleichung lautetC ˙ b R = C b R ( ω R bb × ) \dot{\mathrm{C}}_{b}^{R}=\mathbf{ C }_{b}^{R}\left(\boldsymbol{\omega}_{R b}^{b} \times\right)C˙BR=CBR( ohR bb× )
  6. Die Picard-Iterationsmethode kann verwendet werden , um die Differentialgleichung der Richtungskosinusmatrix zu lösen, und man erhält eine Reihe, die durch ein unendlich wiederholtes Integral dargestellt wird, die auch Picard-Reihe genannt wird. Die obige Reihe ist geschlossen, aber nur in der „festen“ Form Achsendrehung " Nur in einem Sonderfall kann die geschlossene Lösung der folgenden Form erhalten werden: C b R ( t ) = C ( 0 ) exp ⁡ ( ∫ 0 t Ω ( τ ) d τ ) \mathbf{C}_{ b}^{R}( t)=\mathbf{C}(0) \exp \left(\int_{0}^{t} \boldsymbol{\Omega}(\tau) d \tau\right)CBR( t )=C ( 0 )exp( 0tΩ (τ)dτ ) .
  7. 姿态手机公式: C b ( k ) i = C b ( k − 1 ) i C b ( k ) b ( k − 1 ) \mathbf{C}_{b(k)}^{i}=\mathbf{ C}_{b(k-1)}^{i} \mathbf{C}_{b(k)}^{b(k-1)}Cb ( k )ich=Cb(k1)iCb(k)b(k1) C b ( k ) b ( k − 1 ) = I + sin ⁡ Δ θ k Δ θ k [ Δ θ k × ] + 1 − cos ⁡ Δ θ k Δ θ k 2 [ Δ θ k × ] 2 \mathbf{C}_{b(k)}^{b(k-1)}=\mathbf{I}+\frac{\sin \Delta \theta_{k}}{\Delta \theta_{k}}\left[\Delta \boldsymbol{\theta}_{k} \times\right]+\frac{1-\cos \Delta \theta_{k}}{\Delta \theta_{k}^{2}}\left[\Delta \boldsymbol{\theta}_{k} \times\right]^{2} Cb(k)b(k1)=I+ΔθksinΔθk[Δθk×]+Δθk21cosΔθk[Δθk×]2
  8. Für gängige Trägheitsnavigationsanwendungen, bbDie Annahme einer festen Achsenrotation des B -Systems ist im Allgemeinen nicht gültig. Wenn diese Bedingung nicht erfüllt ist, wird das vom Kreisel ausgegebene Winkelinkrement weiterhin auf die Formel für die rekursive Berechnung der Lageaktualisierung angewendet, was zu einem führtDas irreversible Problem bei der Lösung der Einstellungsaktualisierung. Sexueller Fehler,der äquivalente Rotationsvektor kann zur Lösung dieses Problems verwendet werden.

5. Quaternionen

Q = q 0 + q 1 i + q 2 j + q 3 k = q 0 + qv \boldsymbol{Q}=q_{0}+q_{1} \boldsymbol{i}+q_{2} \boldsymbol{j }+q_{3} \boldsymbol{k}=q_{0}+\boldsymbol{q}_{v}Q=Q0+Q1ich+Q2J+Q3k=Q0+Qv

Wir wissen, dass komplexe Zahlen als Vektoren auf der komplexen Ebene, also als zweidimensionale Vektoren, betrachtet werden können. Durch Erweiterung des Konzepts komplexer Zahlen können Quaternionen erhalten werden, um Vektoren im dreidimensionalen Raum zu beschreiben.

Quaternion-Grundlagen::

  1. Quaternionen haben hauptsächlich die folgenden Darstellungen: q = q 0 + q 1 i + q 2 j + q 3 k \boldsymbol{q}=q_{0}+q_{1} \boldsymbol{i}+q_{2} \boldsymbol {j}+q_{3} \boldsymbol{k}Q=Q0+Q1ich+Q2J+Q3k , Vektorkoordinatenformq = [ q 0 , q 1 , q 2 , q 3 ] T \boldsymbol{q}=\left[q_{0}, q_{1}, q_{2}, q_{3}\ rechts]^{\mathrm{T}}Q=[ q0,Q1,Q2,Q3]Tq = qs + qv \boldsymbol{q}=q_{s}+\boldsymbol{q}_{v}Q=Qs+QvOder die trigonometrische Form q = cos ⁡ θ 2 + u sin ⁡ θ 2 \boldsymbol{q}=\cos \frac{\theta}{2}+\boldsymbol{u} \sin \frac{\theta}{2}Q=cos2ich+uSünde2ich(Bezogen auf den äquivalenten Rotationsvektor, normalisiert, beträgt der Modul eins)

  2. Die Multiplikation zwischen imaginären Einheiten einer Quaternion weist die folgenden Merkmale auf: Wenn die Einheit mit sich selbst multipliziert wird, ist die Leistung dieselbe wie bei komplexen Zahlen, und die Multiplikation zwischen zwei Paaren ist dieselbe wie das äußere Produkt (Kreuzprodukt) von drei -dimensionale Vektoren.
    { i ∘ i = j ∘ j = k ∘ k = − 1 i ∘ j = k , j ∘ k = i , k ∘ i = j , j ∘ i = − k , k ∘ j = − i , i ∘ k = − j \left\{\begin{array}{l}\boldsymbol{i} \circ \boldsymbol{i}=\boldsymbol{j} \circ \boldsymbol{j}=\boldsymbol{k} \circ \boldsymbol {k}=-1 \\ \boldsymbol{i} \circ \boldsymbol{j}=\boldsymbol{k}, \quad \boldsymbol{j} \circ \boldsymbol{k}=\boldsymbol{i}, \quad \boldsymbol{k} \circ \boldsymbol{i}=\boldsymbol{j}, \quad \boldsymbol{j} \circ \boldsymbol{i}=-k, \quad k \circ \boldsymbol{j}=-i , \quad \boldsymbol{i} \circ \boldsymbol{k}=-\boldsymbol{j}\end{array}\right.{ ichich=JJ=kk=1ichJ=k ,Jk=ich ,kich=j ,Jich=k ,kJ=ich ,ichk= j

  3. Die Koordinatentransformation des dreidimensionalen Vektors kann mithilfe des Rotationstransformationsoperators der Quaternion realisiert werden: v R = qb R ∘ vb ∘ qb R ∗ \boldsymbol{v}^{R}=\boldsymbol{q}_{ b}^{R } \circ \boldsymbol{v}^{b} \circ \boldsymbol{q}_{b}^{R^{*}}vR=QBRvBQBR

  4. Trigonometrische Notation der Einheitsquaternion : Q = q 0 + qv = cos ⁡ ϕ 2 + u sin ⁡ ϕ 2 \boldsymbol{Q}=q_{0}+\boldsymbol{q}_{v}=\cos \frac {\phi }{2}+\boldsymbol{u} \sin \frac{\phi}{2}Q=Q0+Qv=cos2ϕ+uSünde2ϕhat eine klare physikalische Bedeutung. Rechts von der Quaternion wird häufig ein Index hinzugefügt, geschrieben als Q bi \boldsymbol{Q}_{b}^{i}QBich,中u \boldsymbol{u}u stellt das bewegte Koordinatensystem dar (bbb- System) relativ zum Referenzkoordinatensystem (iii -System) die Einheitsdrehachse,ϕ \phiϕ gibt die Größe des Drehwinkels an,ϕ u \phi \boldsymbol{u}ϕ u stellt den äquivalenten Rotationsvektor dar. Nach der Verwendung von Indizes kann die konjugierte Quaternion wie folgt geschrieben werden:Q ib = ( Q bi ) ∗ \boldsymbol{Q}_{i}^{b}=\left(\boldsymbol{Q}_{b}^{i }\ rechts)^{*}Qichb=( QBich) , was der Darstellung der Matrixtransposition ähnelt, wie etwaC ib = ( C bi ) T \boldsymbol{C}_{i}^{b}=\left(\boldsymbol{C}_{b}^{ i }\right)^{\mathrm{T}}Cichb=( CBich)T. _

  5. Differentialgleichung für Quaternionen: q ˙ b R = 1 2 qb R ∘ [ 0 ω R bb ] \dot{\boldsymbol{q}}_{b}^{R}=\frac{1}{2} \boldsymbol{ q}_{b}^{R} \circ\left[\begin{array}{c}0 \\ \boldsymbol{\omega}_{R b}^{b}\end{array}\right ]Q˙BR=21QBR[0OhR bb] , oder in Matrixform:q ˙ b R = 1 2 W qb R \dot{\boldsymbol{q}}_{b}^{R}=\frac{1}{2} \mathbf{W} \boldsymbol {q}_{b}^{R}Q˙BR=21W qBR. Damit wird der Zusammenhang zwischen dem Quaternion und der Rotationswinkelgeschwindigkeit hergestellt.

  6. Lösen Sie Differentialgleichungen für Quaternionen, wenn bbWenn das System b die Bedingung der „Rotation fester Achse“ erfüllt, kann die analytische Lösung erhalten werden:qb R ( t ) = \boldsymbol{q}_{b}^{R}(t)=QBR( t )= [ I cos ⁡ Δ θ 2 + Θ Δ θ sin ⁡ Δ θ 2 ] qb R ( 0 ) \left[\mathbf{I} \cos \frac{\Delta \theta}{2}+\frac{\Theta }{\Delta\theta}\sin\frac{\Delta\theta}{2}\right] \bold symbol{q}_{b}^{R}(0)[ Ichcos2D i+D iThSünde2D i]QBR( 0 )

  7. Es gibt auch Oktonionen, die zur Beschreibung von Spiralbewegungen, Drahtbewegungen und Winkelbewegungen verwendet werden.

6. Äquivalenter Rotationsvektor

Euler schlug erstmals das Konzept des äquivalenten Rotationsvektors vor, als er die Bewegung starrer Körper untersuchte. Er wies darauf hin, dass jede endliche Fixpunktrotation eines starren Körpers äquivalent durch eine Drehung um eine Achse realisiert werden kann, die durch den Fixpunkt verläuft . Und die Transformationsformel des Einheitsvektors auf dem starren Körper vor und nach der Drehung wird erstellt. Der Schlüssel zur Erforschung des modernen Strapdown-Trägheitsnavigations- Lageaktualisierungsalgorithmus liegt darin, wie der Messwert des Gyroskops verwendet werden kann, um den entsprechenden äquivalenten Rotationsvektor zu konstruieren , um den nicht austauschbaren Fehler im Lageaktualisierungsalgorithmus zu minimieren oder zu beseitigen . Die anschließende Verwendung des äquivalenten Rotationsvektors zur Berechnung der Lageänderung, beispielsweise ausgedrückt durch eine Richtungskosinusmatrix oder eine Quaternion, wird sehr einfach.

Verwenden Sie die Abtastwerte mehrerer Winkelinkremente, um einen äquivalenten Rotationsvektor gemäß verschiedenen Beispielalgorithmen zu berechnen, und verwenden Sie dann den berechneten äquivalenten Rotationsvektor, um die Richtungskosinusmatrix und die Quaternion zu aktualisieren.

Fügen Sie hier eine Bildbeschreibung ein

Raumvektor rrr Rotationsachsenvektoruuu rotiereϕ \phiϕ , der durch Rotation erhaltener ′ r^{'}R' . Die vier Größen müssen direkt einen funktionalen Zusammenhang habenr ′ = f ( r , u , ϕ ) r^{'}=f(r,u,\phi)R'=f ( r ,du ,ϕ ) ,利用一些几何关系,可以推导得到:
r ′ = ( u ⋅ r ) u + ( u × r ) × u ​​cos ⁡ ϕ + u × r sin ⁡ ϕ = [ I + ( u × ) 2 ] r − ( u × ) 2 r cos ⁡ ϕ + u × r sin ⁡ ϕ = [ I + sin ⁡ ϕ ( u × ) + ( 1 − cos ⁡ ϕ ) ( u × ) 2 ] r = D r \begin{aligned } \boldsymbol{r}^{\prime} & =(\boldsymbol{u} \cdot \boldsymbol{r}) \boldsymbol{u}+(\boldsymbol{u} \times \boldsymbol{r}) \times \ Boldsymbol{u} \cos \phi+\boldsymbol{u} \times \boldsymbol{r} \sin \phi \\ & =\left[\boldsymbol{I}+(\boldsymbol{u} \times)^{2} \right] \boldsymbol{r}-(\boldsymbol{u} \times)^{2} \boldsymbol{r} \cos \phi+\boldsymbol{u} \times \boldsymbol{r} \sin \phi \\ & =\left[\boldsymbol{I}+\sin \phi(\boldsymbol{u} \times)+(1-\cos \phi)(\boldsymbol{u} \times)^{2}\right] \boldsymbol {r}=\boldsymbol{D} \boldsymbol{r}\end{aligned}R'=( ur)u+(u×r)×ucosϕ+u×rsinϕ=[I+(u×)2]r(u×)2rcosϕ+u×rsinϕ=[I+sinϕ(u×)+(1cosϕ)(u×)2]r=Dr
可记 D = I + sin ⁡ ϕ ( u × ) + ( 1 − cos ⁡ ϕ ) ( u × ) 2 \boldsymbol{D}=\boldsymbol{I}+\sin \phi(\boldsymbol{u} \times)+(1-\cos \phi)(\boldsymbol{u} \times)^{2} D=I+sinϕ(u×)+(1cosϕ)(u×)2 ,此公式称为罗德里格旋转公式 r ′ r' r 转到 r r r 中间乘的矩阵称为罗德里格旋转矩阵,和转轴 u u u 及转角 ϕ \phi ϕ hängt zusammen.

Durch Anwendung der Rotationsformel von Rodrigue auf die Einheitskoordinatenachse des kartesischen Koordinatensystems kann das Referenzkoordinatensystem auf das bewegte Koordinatensystem übertragen werden:
ib = D iijb = D jikb = D ki } \left.\begin{array}{c} \boldsymbol{i}_{b}=\boldsymbol{D} \boldsymbol{i}_{i} \\ \boldsymbol{j}_{b}=\boldsymbol{D} \boldsymbol{j}_{i} \ \ \boldsymbol{k}_{b}=\boldsymbol{D} \boldsymbol{k}_{i}\end{array}\right\}ichb=Sag _ichJb=Dj _ichkb=D kich

{ Basisrotationstransformationsbeziehung: [ ibjbkb ] = D [ iijiki ] Basisprojektionstransformationsbeziehung: [ ibjbkb ] = [ iijiki ] P \left\{\begin{array}{c} Basisrotationstransformationsbeziehung: \left[\begin{ array}{lll}\boldsymbol{i}_{b} & \boldsymbol{j}_{b} & \boldsymbol{k}_{b}\end{array}\right]=\boldsymbol{D}\left [\begin{array}{lll}\boldsymbol{i}_{i} & \boldsymbol{j}_{i} & \boldsymbol{k}_{i}\end{array}\right] \\ Basisprojektion Transformationsbeziehung: {\left[\begin{array}{lll}\boldsymbol{i}_{b} & \boldsymbol{j}_{b} & \boldsymbol{k}_{b}\end{array}\ right]=\left[\begin{array}{lll}\boldsymbol{i}_{i} & \boldsymbol{j}_{i} & \boldsymbol{k}_{i}\end{array}\right ] \boldsymbol{P}} \\ \end{array}\right.{ Beziehung zur Basisrotationstransformation:[ichbJbkb]=D[ichichJichkich]Basisprojektionstransformationsbeziehung: [ichbJbkb]=[ichichJichkich]P

在 i 系投影: [ ibijbikbi ] = D [ iiijiikii ] = DI [ ibijbikbi ] = [ iiijiikii ] P = IP } D = P = C bi 在 i 系投影:\left.\begin{array}{l}{\ left[\begin{array}{lll}\boldsymbol{i}_{b}^{i} & \boldsymbol{j}_{b}^{i} & \boldsymbol{k}_{b}^{i }\end{array}\right]=\boldsymbol{D}\left[\begin{array}{lll}\boldsymbol{i}_{i}^{i} & \boldsymbol{j}_{i}^ {i} & \boldsymbol{k}_{i}^{i}\end{array}\right]=\boldsymbol{D} \boldsymbol{I}} \\ {\left[\begin{array}{lll }\boldsymbol{i}_{b}^{i} & \boldsymbol{j}_{b}^{i} & \boldsymbol{k}_{b}^{i}\end{array}\right] =\left[\begin{array}{lll}\boldsymbol{i}_{i}^{i} & \boldsymbol{j}_{i}^{i} & \boldsymbol{k}_{i}^ {i}\end{array}\right] \boldsymbol{P}=\boldsymbol{IP}}\end{array}\right\} \quad \boldsymbol{D}=\boldsymbol{P}=\boldsymbol{C }_{b}^{i}Projektion im i- System:[ichBichJBichkBich]=D[ichichichJichichkichich]=D I[ichBichJBichkBich]=[ichichichJichichkichich]P=IP}D=P=CBich

P = DP=DP=D zeigt, dass die Rodrigue-RotationsmatrixDD istD ist genau vom Referenzrahmen (iii -System) zum bewegten Koordinatensystem (bbb -Reihe) Übergangsmatrix, die ebenfalls ausbbb bisiiDie Koordinatentransformationsmatrix des i- Systems. Daher kann die Rodrigue-Rotationsformel in Form einer Richtungsmatrix umgeschrieben werden:
C bi = I + sin ⁡ ϕ ( u × ) + ( 1 − cos ⁡ ϕ ) ( u × ) 2 \boldsymbol{C}_{b } ^{i}=\boldsymbol{I}+\sin \phi(\boldsymbol{u} \times)+(1-\cos \phi)(\boldsymbol{u} \times)^{2}CBich=ICH+Sündeϕ ( u × )+( 1cosϕ ) ( u × )2
Wenn außerdem Datensatzϕ = ϕ u \boldsymbol{\phi}=\phi \boldsymbol{u}ϕ=ϕ uϕ = ∣ ϕ ∣ \phi=|\boldsymbol{\phi}|ϕ=ϕ , dannu = ϕ / ϕ \boldsymbol{u}=\boldsymbol{\phi} / {\phi}u=ϕ / ϕ,得:
C bi = I + sin ⁡ ϕ ϕ ( ϕ × ) + 1 − cos ⁡ ϕ ϕ 2 ( ϕ × ) 2 \boldsymbol{C}_{b}^{i}=\boldsymbol{I }+\frac{\sin \phi}{\phi}(\boldsymbol{\phi} \times)+\frac{1-\cos \phi}{\phi^{2}}(\boldsymbol{\phi} \times)^{2}CBich=ICH+ϕSündeϕ( ϕ × )+ϕ21cosϕ( ϕ × )2Hier ϕ \boldsymbol{\phi
}ϕ heißtäquivalenter Rotationsvektor(RV, auch Rotationsvektor genannt)

Äquivalente Rotationsvektor-Grundlagen::

  1. Endliche Drehungen starrer Körper sind nicht kommutativ. Eine endliche Fixpunktrotation eines starren Körpers kann durch eine Drehung um eine Achse realisiert werden, die durch den Fixpunkt verläuft.
  2. Seine Vektorrichtung stellt die Drehrichtung dar, und die Größe des Moduls stellt die Größe des Drehwinkels dar.
  3. 当载体的角速度方向随时间变化而不是做 “定轴转动” 时, 直接将传感器角增量测量值代入方向余弦矩阵或四元数微分方程的求解计算式中,则会带来 “不可交换性误差”。
  4. Bortz 方程 ϕ ˙ = ω + 1 2 ( ϕ × ω ) + 1 ϕ 2 [ 1 − ϕ sin ⁡ ϕ 2 ( 1 − cos ⁡ ϕ ) ] ϕ × ( ϕ × ω ) \dot{\phi}=\boldsymbol{\omega}+\frac{1}{2}(\phi \times \omega)+\frac{1}{\phi^{2}}\left[1-\frac{\phi \sin \phi}{2(1-\cos \phi)}\right] \boldsymbol{\phi} \times(\boldsymbol{\phi} \times \boldsymbol{\omega}) ϕ˙=ω+21(ϕ×ω)+ϕ21[12(1cosϕ)ϕsinϕ]ϕ×(ϕ×ω) 。是一种常用的等效旋转矢量微分方程,利用等效旋转矢量进行转动不可交换误差补偿。
  5. 等效旋转矢量的双子样求解式: ϕ k = Δ θ k + 1 12 Δ θ k − 1 × Δ θ k \phi_{k}=\Delta \theta_{k}+\frac{1}{12} \Delta \theta_{k-1} \times \Delta \theta_{k} ϕk=Δθk+121Δθk1×Δθk

二、PSINS中的表示转换

1、姿态阵/姿态四元数/欧拉角的表示 Cnb/qnb/att

  • 有角标的符号书写一般遵从规律是从左到右从上到下

  • 姿态阵:Cnb,表示从 b 系到 n 系的坐标变换矩阵。对应姿态四元数写为qnb

  • 欧拉角:att=[俯仰pitch; 横滚roll; 方位yaw]。没有按照转到顺序来写,如果按转动顺序,东北天坐标系转到右前下坐标系,常见先转方位角、然后俯仰角、横滚角

    Fügen Sie hier eine Bildbeschreibung ein

2、四元数计算

1. 四元数共轭:qconj

实部不变,虚部取反。

function qo = qconj(qi)
    qo = [qi(1); -qi(2:4)];

性质:

  • 加的共轭等于共轭的加: ( P + Q ) ∗ = P ∗ + Q ∗ (\boldsymbol{P}+Q)^{*}=P^{*}+Q^{*} (P+Q)=P+Q
  • 乘的共轭等于共轭的和: ( P ∘ Q ) ∗ = Q ∗ ∘ P ∗ (\boldsymbol{P} \circ Q)^{*}=Q^{*} \circ P^{*} (PQ)=QP

2. 四元数归一化:qconj

function qnb = qnormlz(qnb)
    qnb = qnb/norm(qnb);

3. Quaternion-Multiplikation: qmual

{ i ∘ i = j ∘ j = k ∘ k = − 1 i ∘ j = k , j ∘ k = i , k ∘ i = j , j ∘ i = − k , k ∘ j = − i , i ∘ k = − j \left\{\begin{array}{l}\boldsymbol{i} \circ \boldsymbol{i}=\boldsymbol{j} \circ \boldsymbol{j}=\boldsymbol{k} \circ \boldsymbol {k}=-1 \\ \boldsymbol{i} \circ \boldsymbol{j}=\boldsymbol{k}, \quad \boldsymbol{j} \circ \boldsymbol{k}=\boldsymbol{i}, \quad \boldsymbol{k} \circ \boldsymbol{i}=\boldsymbol{j}, \quad \boldsymbol{j} \circ \boldsymbol{i}=-k, \quad k \circ \boldsymbol{j}=-i , \quad \boldsymbol{i} \circ \boldsymbol{k}=-\boldsymbol{j}\end{array}\right.{ ichich=JJ=kk=1ichJ=k ,Jk=ich ,kich=j ,Jich=k ,kJ=ich ,ichk= j

Der Wechselkurs wird nicht eingehalten. i, j, ki, j, kDie Vorwärtsmultiplikation von i , j , k ist gleich dem letztgenannten Element, und das negative Vorzeichen sollte zur Rückwärtsmultiplikation hinzugefügt werden.

Fügen Sie hier eine Bildbeschreibung ein

function q = qmul(q1, q2)
    if length(q2)==3, q2=[0; q2]; end  % 0-scale quaternion
    q = [ q1(1) * q2(1) - q1(2) * q2(2) - q1(3) * q2(3) - q1(4) * q2(4);
          q1(1) * q2(2) + q1(2) * q2(1) + q1(3) * q2(4) - q1(4) * q2(3);
          q1(1) * q2(3) + q1(3) * q2(1) + q1(4) * q2(2) - q1(2) * q2(4);
          q1(1) * q2(4) + q1(4) * q2(1) + q1(2) * q2(3) - q1(3) * q2(2) ];

AI-Erklärung :
Diese Funktion implementiert die Multiplikationsoperation zweier Quaternionen. Eine Quaternion ist ein mathematisches Objekt, das zur Darstellung von Rotationen und affinen Transformationen verwendet wird. In dieser Funktion sind q1 und q2 zwei Quaternionen, die Funktion multipliziert sie und speichert das Ergebnis in der Variablen q.

  1. Zunächst prüft die Funktion, ob die Länge von q2 3 beträgt. Wenn ja, wird q2 zu einer Quaternion der Länge 4 erweitert, wobei ein Element auf 0 gesetzt ist. Dadurch soll bei nachfolgenden Berechnungen eine Division durch 0 vermieden werden.
  2. Als nächstes berechnet die Funktion das Ergebnis mithilfe der Multiplikationsformel für Quaternionen. Die Multiplikation von Quaternionen kann durch entsprechende Multiplikation der Komponenten zweier Quaternionen und anschließende Addition der Produkte erreicht werden.
  3. Abschließend speichert die Funktion das berechnete Ergebnis in der Variablen q und gibt diese Variable als Funktionsausgabe zurück.

4. Quaternion-Multiplikationsvektor (Koordinatentransformation eines dreidimensionalen Vektors): qmulv

Unter der Annahme eines 3D-Vektors rrr , im Trägerkoordinatensystem (bbb- System) und Referenzkoordinatensystem (iiDie Projektionen im i- System sind: rb = [ rxbrybrzb ] T \boldsymbol{r}^{b}=\left[\begin{array}{lll}r_{x}^{b} & r_{y}^ {b} & r_{z}^{b}\end{array}\right]^{\mathrm{T}}RB=[RXbRjbRzb]Tri = [ rxiryirzi ] T \boldsymbol{r}^{i}=\left[\begin{array}{lll}r_{x}^{i} & r_{y}^{i} & r_{z }^{i}\end{array}\right]^{\mathrm{T}}Rich=[RXichRjichRzich]T , nun für den Vektorrb \boldsymbol{r}^{b}Rb (als nullskalare Quaternion behandelt) implementiert die folgende Quaternion-Multiplikationsoperation:
Q bi ∘ rb ∘ Q ib = MQ bi ( rb ∘ Q ib ) = MQ bi ( MQ ib ′ [ 0 rb ] ) = MQ bi MQ ib ′ [ 0 rb ] = [ q 0 − q 1 − q 2 − q 3 q 1 q 0 − q 3 q 2 q 2 q 3 q 0 − q 1 q 3 − q 2 q 1 q 0 ] [ q 0 q 1 q 2 q 3 − q 1 q 0 − q 3 q 2 − q 2 q 3 q 0 − q 1 − q 3 − q 2 q 1 q 0 ] [ 0 rxbrybrzb ] = [ 1 0 0 0 0 q 0 2 + q 1 2 − q 2 2 − q 3 2 2 ( q 1 q 2 − q 0 q 3 ) 2 ( q 1 q 3 + q 0 q 2 ) 0 2 ( q 1 q 2 + q 0 q 3 ) q 0 2 − q 1 2 + q 2 2 − q 3 2 2 ( q 2 q 3 − q 0 q 1 ) 0 2 ( q 1 q 3 − q 0 q 2 ) 2 ( q 2 q 3 + q 0 q 1 ) q 0 2 − q 1 2 − q 2 2 + q 3 2 ] [ 0 rxbrybrzb ] \begin{aligned} \boldsymbol{Q}_{b}^{i} \circ \boldsymbol{r}^{b} \circ \boldsymbol{Q}_{i}^{b}= & \boldsymbol{M}_{Q_{b}^{i}}\left(\boldsymbol{r}^{b} \circ \boldsymbol{Q}_{i}^{b}\right)=\boldsymbol{ M}_{Q_{b}^{i}}\left(\boldsymbol{M}_{Q_{i}^{b}}^{\prime}\left[\begin{array}{c}0 \ \\boldsymbol{r}^{b}\end{array}\right]\right)=\boldsymbol{M}_{Q_{b}^{i}} \boldsymbol{M}_{Q_{i}^{ b}}^{\prime}\left[\begin{array}{c}0 \\ \boldsymbol{r}^{b}\end{array}\right]= \\ & {\left[\begin{ array}{ccccc}q_{0} & -q_{1} & -q_{2} & -q_{3} \\ q_{1} & q_{0} & -q_{3} & q_{2} \ \ q_{2} & q_{3} & q_{0} & -q_{1} \\ q_{3} & -q_{2} & q_{1} & q_{0}\end{array}\right ]\left[\begin{array}{cccc}q_{0} & q_{1} & q_{2} & q_{3} \\ -q_{1} & q_{0} & -q_{3} & q_{2} \\ -q_{2} & q_{3} & q_{0} & -q_{1} \\ -q_{3} & -q_{2} & q_{1} & q_{0} \end{array}\right]\left[\begin{array}{c}0 \\ r_{x}^{b} \\ r_{y}^{b} \\ r_{z}^{b} \end{array}\right]=} \\ & {\left[\begin{array}{ccccc}1 & 0 & 0 & 0 \\ 0 & q_{0}^{2}+q_{1}^ {2}-q_{2}^{2}-q_{3}^{2} & 2\left(q_{1} q_{2}-q_{0}q_{3}\right) & 2\left(q_{1} q_{3}+q_{0} q_{2}\right) \\ 0 & 2\left(q_{1} q_{2}+q_ {0} q_{3}\right) & q_{0}^{2}-q_{1}^{2}+q_{2}^{2}-q_{3}^{2} & 2\left (q_{2} q_{3}-q_{0} q_{1}\right) \\ 0 & 2\left(q_{1} q_{3}-q_{0} q_{2}\right) & 2\left(q_{2} q_{3}+q_{0} q_{1}\right) & q_{0}^{2}-q_{1}^{2}-q_{2}^{2 }+q_{3}^{2}\end{array}\right]\left[\begin{array}{c}0 \\ r_{x}^{b} \\ r_{y}^{b} \\ r_{z}^{b}\end{array}\right] }\end{aligned}r_{z}^{b}\end{array}\right] }\end{aligned}r_{z}^{b}\end{array}\right] }\end{aligned}QBichRBQichb=MQBich( rBQichb)=MQBich( MQichb'[0Rb] )=MQBichMQichb'[0Rb]= Q0Q1Q2Q3q1Q0Q3q2q2q3Q0Q1q3Q2q1Q0 Q0q1q2q3Q1Q0Q3q2Q2q3Q0Q1Q3Q2q1Q0 0RXbRjbRzb = 10000Q02+Q12Q22Q322( q1Q2+Q0Q3)2( q1Q3Q0Q2)02( q1Q2Q0Q3)Q02Q12+Q22Q322( q2Q3+Q0Q1)02( q1Q3+Q0Q2)2( q2Q3Q0Q1)Q02Q12Q22+Q32 0RXbRjbRzb
Es kann festgestellt werden, dass die Diagonalblockmatrix dritter Ordnung in der unteren rechten Ecke der Matrix genau die Einstellungsmatrix ist, die wie folgt abgekürzt werden kann:
Q bi ∘ rb ∘ Q ib = [ 1 0 1 × 3 0 3 × 1 C bi ] [ 0 rb ] = [ 0 C bilb ] = [ 0 ri ] \boldsymbol{Q}_{b}^{i} \circ \boldsymbol{r}^{b} \circ \boldsymbol{Q }_{i}^{b}=\ left[\begin{array}{cc}1 & \mathbf{0}_{1 \times 3} \\ \mathbf{0}_{3 \times 1} & \boldsymbol{C}_{b}^{ i}\end{array}\right]\left[\begin{array}{c}0 \\ \boldsymbol{r}^{b}\end{array}\ right]=\left[\begin{array} {c}0 \\ \boldsymbol{C}_{b}^{i} \boldsymbol{r}^{b}\end{array}\right]=\left [\begin{array}{c}0 \ \ \boldsymbol{r}^{i}\end{array}\right]QBichRBQichb=[103 × 101 × 3CBich][0Rb]=[0CBichRb]=[0Rich]
Dies zeigt, dassQ bi ∘ rb ∘ Q ib Q_{b}^{i} \circ \boldsymbol{r}^{b} \circ \boldsymbol{Q}_{i}^{b}QBichRBQichbDas Ergebnis ist ebenfalls eine nullskalare Quaternion, deren Imaginärteil genau der Koordinatentransformation ri = C birb \boldsymbol{r}^{i}=\boldsymbol{C}_{b}^{i} \boldsymbol{r entspricht }^{b}Rich=CBichRb . Um prägnant zu schreiben, kann ähnlich wie bei der Koordinatentransformationsausdrucksgewohnheit der Matrix die Multiplikationsoperation zwischen der Quaternion und dem dreidimensionalen Vektor definiert werden, dh die Quaternionkoordinatentransformationsformel: ri = Q bi ⊗ rbr^{ i}
=Q_{b}^{ i} \otimes r^{b}Rich=QBichRDie Bedeutung von b
besteht darin, zuerst eine Quaternion-Multiplikation durchzuführen und dann den Imaginärteil des Ergebnisses zu extrahieren.

function vo = qmulv(q, vi)
    qo1 =              - q(2) * vi(1) - q(3) * vi(2) - q(4) * vi(3);
    qo2 = q(1) * vi(1)                + q(3) * vi(3) - q(4) * vi(2);
    qo3 = q(1) * vi(2)                + q(4) * vi(1) - q(2) * vi(3);
    qo4 = q(1) * vi(3)                + q(2) * vi(2) - q(3) * vi(1);
    vo = vi;
    vo(1) = -qo1 * q(2) + qo2 * q(1) - qo3 * q(4) + qo4 * q(3);
    vo(2) = -qo1 * q(3) + qo3 * q(1) - qo4 * q(2) + qo2 * q(4);
    vo(3) = -qo1 * q(4) + qo4 * q(1) - qo2 * q(3) + qo3 * q(2);

5. Quaternion plus Fehlausrichtungswinkelfehler: qaddphi

Vom echten Navigationssystem ( nnn -System) zum rechnerischen Navigationssystem (n ′ n^{\prime}N -System) beträgt der Fehlausrichtungswinkelϕ \boldsymbol{\phi}ϕ umgekehrt ausn ′ n^{\prime}N' ist annnDer Fehlausrichtungswinkel des n- Systems sollte − ϕ -\boldsymbol{\phi}ϕ , wenn− ϕ -\phiϕ wird als äquivalenter Rotationsvektor betrachtet, dann ist die entsprechende TransformationsquaternionQ nn ′ Q_{n}^{n^{\prime}}QNN'. Im Programm repräsentieren die Variablen qpb, , Q bn ′ , Q bn Q_{b}^{n^{\prime}} bzw. Q_{b}^{n}qnbphiQBN',QBnund ϕ \phiϕ .

function qpb = qaddphi(qnb, phi)
    qpb = qmul(rv2q(-phi),qnb);

6. Quaternion minus Fehlausrichtungsfehler: qdelphi

Entsprechend der Formel Q bn = Q n ′ n ∘ Q b ′ Q_{b}^{n}=Q_{n^{\prime}}^{n}{ }^{\circ} Q_{b}^{ \prime}QBn=QN'n FB', was bedeutet: Nach Abzug des Fehlausrichtungswinkels bei der Berechnung der Lagequaternion erhält man die tatsächliche (genauere) Lagequaternion.

function qnb = qdelphi(qpb, phi)
    qnb = qmul(rv2q(phi), qpb);

7. Berechnen Sie den Fehlausrichtungswinkelfehler aus der Quaternion und der realen Quaternion: qq2phi

Erstens gemäß der Formel Q n ′ n = Q bn ∘ ( Q bn ′ ) ∗ Q_{n^{\prime}}^{n}=Q_{b}^{n} \circ\left(Q_{b }^{ n^{\prime}}\right){ }^{*}QN'n=QBn( QBN') Ermitteln Sie die FehlerquaternionQ n ′ n Q_{n^{\prime}}^{n}QN'n, und dann durch Q n ′ n Q_{n^{\prime}}^{n}QN'nAuflösen nach dem Fehlausrichtungswinkel ϕ \boldsymbol{\phi}ϕ .

function phi = qq2phi(qpb, qnb)
    qnp = qmul(qnb, qconj(qpb));
    phi = q2rv(qnp);

3. Konvertierung verschiedener Gestendarstellungen

Fügen Sie hier eine Bildbeschreibung ein

1. Euler-Winkel -> Lagematrix: a2mat

Der Euler-Winkel verwendet drei Auswahlen, um die Lageänderung darzustellen, und die drei Auswahlmatrizen werden multipliziert, um die Richtungskosinusmatrix (Lagematrix) zu erhalten, und die Rotationsreihenfolge ist entscheidend.
C bt = C ψ CCC γ = [ c ψ − s ψ 0 s ψ ̇ c ψ 0 0 0 1 ] [ 1 0 0 0 c θ − s θ 0 s θ c θ ] [ c γ 0 s γ − s γ 0 c γ ] = [ c ψ c γ − s ψ s θ s γ − s ψ c θ c ψ s γ + s ψ s θ c γ s ψ c γ + c ψ s θ s γ c ψ c θ s ψ s γ − c ψ s θ c γ − c θ s γ s θ c θ c γ ] = [ C 11 C 12 C 13 C 21 C 22 C 23 C 31 C 32 C 33 ] \begin{array}; {l } \ballsymbol{C}_{b}^{t}= \ballsymbol{C}_{\psi} \ballsymbol{C}_{\ballsymbol{C}} \ballsymbol{C}_{\gamma} =\ left[\begin{array}{ccc}c_{\psi}&-s_{\psi}&0\\s_{\dot{\psi}}&c_{\psi}&0\\0&0 &1\end{array}\ right]\left[\begin{array}{ccc}1&0&0\\0&c_{\theta}&-s_{\theta}\\0&s_{\theta } &c_{\theta}\end{array}\right]\left [\begin{array}{ccc}c_{\gamma}&0&s_{\gamma}\\0&1&0\\-s_ {\gamma} & 0 & c_{\gamma}\end{array}\right]= \\{\left[\begin{array}{ccc}c_{\psi} c_{\gamma}-s_{\psi} s_{\theta} s_{\gamma} & -s_{\psi} c_{\theta} & c_{\psi} s_{\gamma}+s_{\psi} s_{\theta} c_{\gamma} \\ s_{\psi} c_{\gamma}+c_{\psi} s_{\theta} s_{\gamma} & c_{\psi} c_{\theta} & s_{\psi} s_{\gamma}-c_{\psi} s_{\theta} c_{\gamma} \\ -c_{\theta } s_{\gamma} & s_{\theta} & c_{\theta} c_{\gamma}\end{array}\right]=\left[\begin{array}{ccc}C_{11} & C_{ 12} & C_{13} \\ C_{21} & C_{22} & C_{23} \\ C_{31} & C_{32} & C_{33}\end{array}\right] }\end {Array}s_{\theta} & c_{\theta} c_{\gamma}\end{array}\right]=\left[\begin{array}{ccc}C_{11} & C_{12} & C_{13} \\ C_{21} & C_{22} & C_{23} \\ C_{31} & C_{32} & C_{33}\end{array}\right] }\end{array}s_{\theta} & c_{\theta} c_{\gamma}\end{array}\right]=\left[\begin{array}{ccc}C_{11} & C_{12} & C_{13} \\ C_{21} & C_{22} & C_{23} \\ C_{31} & C_{32} & C_{33}\end{array}\right] }\end{array}CBt=CPCCCC= CPSP˙0sPCP0001 1000CichSich0sichCich CC0sC010SC0CC = CPCCSPSichSCSPCC+CPSichSCcichSCsPCichCPCichSichCPSC+SPSichCCSPSCCPSichCCCichCC = C11C21C31C12C22C32C13C23C33

function [Cnb, Cnbr] = a2mat(att)
% Convert Euler angles to direction cosine matrix(DCM).
% 欧拉角->姿态阵
% Prototype: [Cnb, Cnbr] = a2mat(att)
% Input: att - att=[pitch; roll; yaw] in radians
% Outputs: Cnb - DCM from navigation-frame(n) to body-frame(b), in yaw->pitch->roll
%                (3-1-2) rotation sequence
%          Cnbr - DCM in yaw->roll->pitch (3-2-1) rotation sequence
    s = sin(att); c = cos(att);
    si = s(1); sj = s(2); sk = s(3); 
    ci = c(1); cj = c(2); ck = c(3);
    Cnb = [ cj*ck-si*sj*sk, -ci*sk,  sj*ck+si*cj*sk;
            cj*sk+si*sj*ck,  ci*ck,  sj*sk-si*cj*ck;
           -ci*sj,           si,     ci*cj           ];
    if nargout==2  % dual Euler angle DCM
        Cnbr = [ cj*ck, si*sj*ck-ci*sk, ci*sj*ck+si*sk;
                 cj*sk, si*sj*sk+ci*ck, ci*sj*sk-si*ck;
                -sj,    si*cj,          ci*cj            ];
    endfunction [Cnb, Cnbr] = a2mat(att)
    s = sin(att); c = cos(att);
    si = s(1); sj = s(2); sk = s(3); 
    ci = c(1); cj = c(2); ck = c(3);
    Cnb = [ cj*ck-si*sj*sk, -ci*sk,  sj*ck+si*cj*sk;
            cj*sk+si*sj*ck,  ci*ck,  sj*sk-si*cj*ck;
           -ci*sj,           si,     ci*cj           ];
    if nargout==2  % dual Euler angle DCM
        Cnbr = [ cj*ck, si*sj*ck-ci*sk, ci*sj*ck+si*sk;
                 cj*sk, si*sj*sk+ci*ck, ci*sj*sk-si*ck;
                -sj,    si*cj,          ci*cj            ];
    end

AI-Erklärung :
Dieser Code ist eine Funktion, die Euler-Winkel in eine Posenmatrix umwandelt. Es generiert zwei Ausgabeparameter: Cnb und Cnbr, die jeweils die Lagematrix vom Navigationssystem zum Flugzeugsystem und eine weitere Lagematrix vom Navigationssystem zum Flugzeugsystem darstellen. Wenn die Anzahl der Ausgabeparameter der Funktion 2 beträgt (dh Cnb und Cnbr müssen gleichzeitig generiert werden), wird auch die Cnbr-Matrix berechnet. Die Cnbr-Matrix ist in einer „Gier-Roll-Pitch“-Rotationsreihenfolge (3-2-1) aufgebaut.

2. Attitude-Array -> Euler-Winkel: m2att

θ = arcsin ⁡ ( C 32 ) { γ = − atan ⁡ 2 ( C 31 , C 33 ) ψ = − atan ⁡ 2 ( C 12 , C 22 ) ∣ C 32 ∣ ⩽ 0,999999 { γ = atan ⁡ 2 ( C 13 , C 11 ) ∣ C 32 ∣ > 0,999,999 ψ = 0 \begin{array}{l}\theta=\arcsin \left(C_{32}\right) \\ \left\{\begin{array}{ l}\gamma=-\operatorname{atan} 2\left(C_{31}, C_{33}\right) \\ \psi=-\operatorname{atan} 2\left(C_{12}, C_{22 }\right)\end{array}\left|C_{32}\right| \leqslant 0,999999\right. \\ \left\{\begin{array}{ll}\gamma=\operatorname{atan} 2\left(C_{13}, C_{11}\right) & \left|C_{32}\right|> 0,999 ,999 \\ \psi=0\end{array}\right. \\\end{array}ich=Arcsin( C32){ C=für den Zweck2( C31,C33)P=für den Zweck2( C12,C22)C320,999999{ C=für den Zweck2( C13,C11)P=0C32>0,999,999

function [att, attr] = m2att(Cnb)
% Convert direction cosine matrix(DCM) to Euler attitude angles.
% 姿态阵 -> 欧拉角
% Prototype: [att, attr] = m2att(Cnb)
% Input: Cnb - DCM from navigation-frame(n) to body-frame(b)
% Outputs: att - att=[pitch; roll; yaw] in radians, in yaw->pitch->roll
    att = [ asin(Cnb(3,2));
            atan2(-Cnb(3,1),Cnb(3,3)); 
            atan2(-Cnb(1,2),Cnb(2,2)) ];
    if nargout==2  % dual Euler angles
        attr = [ atan2(Cnb(3,2),Cnb(3,3)); 
                 asin(-Cnb(3,1)); 
                 atan2(Cnb(2,1),Cnb(1,1)) ];
    end

AI-Erklärung :
Dieser Code ist eine MATLAB-Funktion zur Konvertierung der Richtungskosinusmatrix (DCM) in den Euler-Attitude-Winkel. Der Funktionsname ist m2att, der Eingabeparameter ist die DCM-Matrix Cnb, der Ausgabeparameter ist der Euler-Lagewinkel att und die optionale Rotationsachse und der Rotationswinkel attr. Die Funktion des Codes ist wie folgt:

  1. Drücken Sie jede Spalte der DCM-Matrix Cnb als Einheitsvektor aus, der den Rotationsvektor vom Navigationskoordinatensystem (n) zum Körperkoordinatensystem (b) darstellt.
  2. Verwenden Sie diese Rotationsvektoren, um die Pose des Körperrahmens relativ zum Navigationsrahmen zu berechnen, was zu Euler-Posewinkeln führt.
  3. Speichern Sie den berechneten Euler-Lagewinkel im att-Array, angeordnet in der Reihenfolge Gier -> Nick -> Roll, im Bogenmaß.
  4. Wenn der Ausgabeparameter attr in Form eines doppelten Euler-Winkels angegeben wird (durch Beurteilung des Werts der Nargout-Variablen), müssen auch die Rotationsachse und der Rotationswinkel berechnet werden.
  5. Die Formel zur Berechnung der Rotationsachse lautet: (Cnb(3,2), Cnb(3,3)), was der Vektor ist, der durch die Elemente in der dritten Zeile, der zweiten Spalte und der dritten Spalte der DCM-Matrix gebildet wird.
  6. Die Formel zur Berechnung des Drehwinkels lautet: [-asin(-Cnb(3,1)); atan2(Cnb(2,1), Cnb(1,1))], dh zuerst wird der Drehwinkel berechnet die z-Achse (über DCM) Die Vorzeichen der Elemente in Zeile 3, Spalte 1 der Matrix werden umgekehrt) und dann den Drehwinkel um die x'-Achse berechnen (durch die Elemente in Zeile 2, Spalte 1 und Zeile 1). , Spalte 1 der DCM-Matrix).
  7. Speichern Sie die berechnete Rotationsachse und den Rotationswinkel im attr-Array im Bogenmaß.
    Es ist zu beachten, dass der Code die Funktionen asin und atan2 in MATLAB verwendet, um die Arkussinus- und Arkuskosinusfunktionen darzustellen und den Wert der Nargout-Variablen zu beurteilen, um die Form des Ausgabeparameters zu bestimmen.

3. Quaternion -> Einstellungsmatrix: q2mat

C bn = [ q 0 2 + q 1 2 − q 2 2 − q 3 2 2 ( q 1 q 2 − q 0 q 3 ) 2 ( q 1 q 3 + q 0 q 2 ) 2 ( q 1 q 2 + q 0 q 3 ) q 0 2 − q 1 2 + q 2 2 − q 3 2 2 ( q 2 q 3 − q 0 q 1 ) 2 ( q 1 q 3 − q 0 q 2 ) 2 ( q 2 q 3 + q 0 q 1 ) q 0 2 − q 1 2 − q 2 2 + q 3 2 ] \boldsymbol{C}_{b}^{n}=\left[\begin{array}{ccc}q_{0 }^{2}+q_{1}^{2}-q_{2}^{2}-q_{3}^{2} & 2\left(q_{1} q_{2}-q_{0} q_{3}\right) & 2\left(q_{1} q_{3}+q_{0} q_{2}\right) \\ 2\left(q_{1} q_{2}+q_{0 } q_{3}\right) & q_{0}^{2}-q_{1}^{2}+q_{2}^{2}-q_{3}^{2} & 2\left(q_ {2} q_{3}-q_{0} q_{1}\right) \\ 2\left(q_{1} q_{3}-q_{0} q_{2}\right) & 2\left( q_{2} q_{3}+q_{0} q_{1}\right) & q_{0}^{2}-q_{1}^{2}-q_{2}^{2}+q_{ 3}^{2}\end{array}\right]CBn= Q02+Q12Q22Q322( q1Q2+Q0Q3)2( q1Q3Q0Q2)2( q1Q2Q0Q3)Q02Q12+Q22Q322( q2Q3+Q0Q1)2( q1Q3+Q0Q2)2( q2Q3Q0Q1)Q02Q12Q22+Q32

function Cnb = q2mat(qnb)
% Convert attitude quaternion to direction cosine matrix(DCM).
% 四元数 -> 姿态阵
% Prototype: Cnb = q2mat(qnb)
% Input: qnb - attitude quaternion
% Output: Cnb - DCM from body-frame to navigation-frame
    q11 = qnb(1)*qnb(1); q12 = qnb(1)*qnb(2); q13 = qnb(1)*qnb(3); q14 = qnb(1)*qnb(4); 
    q22 = qnb(2)*qnb(2); q23 = qnb(2)*qnb(3); q24 = qnb(2)*qnb(4);     
    q33 = qnb(3)*qnb(3); q34 = qnb(3)*qnb(4);  
    q44 = qnb(4)*qnb(4);
    Cnb = [ q11+q22-q33-q44,  2*(q23-q14),     2*(q24+q13);
            2*(q23+q14),      q11-q22+q33-q44, 2*(q34-q12);
            2*(q24-q13),      2*(q34+q12),     q11-q22-q33+q44 ];

4. Attitude Array -> Quaternion: m2qua

q 0 2 + q 1 2 − q 2 2 − q 3 2 = C 11 q 0 2 − q 1 2 + q 2 2 − q 3 2 = C 22 q 0 2 − q 1 2 − q 2 2 + q 3 2 = C 33 q 0 2 + q 1 2 + q 2 2 + q 3 2 = 1 } ⇒ ∣ q 0 ∣ = 0,5 1 + C 11 + C 22 + C 33 ∣ q 1 ∣ = 0,5 1 + C 11 − C 22 − C 33 ∣ q 2 ∣ = 0,5 1 − C 11 + C 22 − C 33 ∣ q 3 ∣ = 0,5 1 − C 11 − C 22 + C 33 \left.\begin{array}{l}q_{ 0}^{2}+q_{1}^{2}-q_{2}^{2}-q_{3}^{2}=C_{11} \\ q_{0}^{2}-q_ {1}^{2}+q_{2}^{2}-q_{3}^{2}=C_{22} \\ q_{0}^{2}-q_{1}^{2}- q_{2}^{2}+q_{3}^{2}=C_{33} \\ q_{0}^{2}+q_{1}^{2}+q_{2}^{2} +q_{3}^{2}=1\end{array}\right\} \Rightarrow \begin{array}{l}\left|q_{0}\right|=0,5 \sqrt{1+C_{11 }+C_{22}+C_{33}} \\ \left|q_{1}\right|=0,5 \sqrt{1+C_{11}-C_{22}-C_{33}} \\ \left |q_{2}\right|=0,5 \sqrt{1-C_{11}+C_{22}-C_{33}} \\ \left|q_{3}\right|=0,5 \sqrt{1-C_ {11}-C_{22}+C_{33}}\end{array}Q02+Q12Q22Q32=C11Q02Q12+Q22Q32=C22Q02Q12Q22+Q32=C33Q02+Q12+Q22+Q32=1 q0=0,51+C11+C22+C33 q1=0,51+C11C22C33 q2=0,51C11+C22C33 q3=0,51C11C22+C33

2 ( q 1 q 2 − q 0 q 3 ) = C 12 2 ( q 1 q 2 + q 0 q 3 ) = C 21 2 ( q 1 q 3 + q 0 q 2 ) = C 13 2 ( q 1 q 3 − q 0 q 2 ) = C 31 2 ( q 2 q 3 − q 0 q 1 ) = C 23 2 ( q 2 q 3 + q 0 q 1 ) = C 32 } ⇒ 4 q 0 q 1 = C 32 − C 23 4 q 0 q 2 = C 13 − C 31 4 q 0 q 3 = C 21 − C 12 4 q 1 q 2 = C 12 + C 21 4 q 1 q 3 = C 13 + C 31 4 q 2 q 3 = C 23 + C 32 } \left.\left.\begin{array}{l}2\left(q_{1} q_{2}-q_{0} q_{3}\right)=C_{12} \\ 2\left(q_{1} q_{2 }+q_{0} q_{3}\right)=C_{21} \\ 2\left(q_{1} q_{3}+q_{0} q_{2}\right)=C_{13} \ \ 2\left(q_{1} q_{3}-q_{0} q_{2}\right)=C_{31} \\ 2\left(q_{2} q_{3}-q_{0} q_ {1}\right)=C_{23} \\ 2\left(q_{2} q_{3}+q_{0} q_{1}\right)=C_{32}\end{array}\right\ } \Rightarrow \begin{array}{l}4 q_{0} q_{1}=C_{32}-C_{23} \\ 4 q_{0} q_{2}=C_{13}-C_{31 } \\ 4 q_{0} q_{3}=C_{21}-C_{12} \\ 4 q_{1} q_{2}=C_{12}+C_{21} \\ 4 q_{1} q_{3}=C_{13}+C_{31} \\ 4 q_{2} q_{3}=C_{23}+C_{32}\end{array}\right\}2( q1Q2Q0Q3)=C122( q1Q2+Q0Q3)=C212( q1Q3+Q0Q2)=C132( q1Q3Q0Q2)=C312( q2Q3Q0Q1)=C232( q2Q3+Q0Q1)=C32 4 q0Q1=C32C234 q0Q2=C13C314 q0Q3=C21C124 q1Q2=C12+C214 q1Q3=C13+C314 q2Q3=C23+C32

Schon allein nach Formel eins wird es schwierig sein, die positiven und negativen Vorzeichen jedes Elements der Quaternion zu bestimmen. Wenn ein bestimmtes Element der Quaternion bekannt ist, können andere Elemente gemäß Formel 2 gelöst werden, es muss jedoch vermieden werden, dass das bekannte Element 0 ist. Durch Quaternion-Normalisierungsbedingung q 0 2 + q 1 2 q_{0}^{2}+q_{1}^{2}Q02+Q12 + q 2 2 + q 3 2 = 1 +q_{2}^{2}+q_{3}^{2}=1+ q22+Q32=1 zeigt, dass es max ⁡ ( qi 2 ) ⩾ 1 / 4 \max \left(q_{i}^{2}\right) \geqslant 1 / 4 gebenmussmax( qich2)1/4 ist festgelegt, das heißt, es muss ein ∣ qi ∣ ⩾ \left|q_{i}\right| \geqslantunter den vier Elementenqich 1 / 2 1 / 21/2 . In der praktischen Anwendung kann ein bestimmtes größeres Elementqi q_{i}Qich(Es kann als positiver Wert angenommen werden) und dann die verbleibenden drei Elemente gemäß der Formel (B. 10) berechnen.

function qnb = m2qua(Cnb)
% Convert direction cosine matrix(DCM) to attitude quaternion.
%
% Prototype: qnb = m2qua(Cnb)
% Input: Cnb - DCM from body-frame to navigation-frame
% Output: qnb - attitude quaternion
    C11 = Cnb(1,1); C12 = Cnb(1,2); C13 = Cnb(1,3); 
    C21 = Cnb(2,1); C22 = Cnb(2,2); C23 = Cnb(2,3); 
    C31 = Cnb(3,1); C32 = Cnb(3,2); C33 = Cnb(3,3); 
%     q0t = 0.5*sqrt(1+C11+C22+C33);
%     q1t = 0.5*sqrt(1+C11-C22-C33);
%     q2t = 0.5*sqrt(1-C11+C22-C33);
%     q3t = 0.5*sqrt(1-C11-C22+C33);
    if C11>=C22+C33
        q1 = 0.5*sqrt(1+C11-C22-C33);  qq4 = 4*q1;
        q0 = (C32-C23)/qq4; q2 = (C12+C21)/qq4; q3 = (C13+C31)/qq4;
    elseif C22>=C11+C33
        q2 = 0.5*sqrt(1-C11+C22-C33);  qq4 = 4*q2;
        q0 = (C13-C31)/qq4; q1 = (C12+C21)/qq4; q3 = (C23+C32)/qq4;
    elseif C33>=C11+C22
        q3 = 0.5*sqrt(1-C11-C22+C33);  qq4 = 4*q3;
        q0 = (C21-C12)/qq4; q1 = (C13+C31)/qq4; q2 = (C23+C32)/qq4;
    else
        q0 = 0.5*sqrt(1+C11+C22+C33);  qq4 = 4*q0;
        q1 = (C32-C23)/qq4; q2 = (C13-C31)/qq4; q3 = (C21-C12)/qq4;
    end
    qnb = [q0; q1; q2; q3];

AI-Erklärung :
Die Funktion akzeptiert einen Eingabeparameter Cnb, bei dem es sich um eine 3x3-Matrix handelt, die das DCM vom Körperkoordinatensystem zum Navigationskoordinatensystem darstellt. Die Ausgabe der Funktion ist ein Quaternionvektor qnb, der die entsprechende Lage für ein gegebenes DCM darstellt. Die Implementierung des Codes ist wie folgt:

  1. Extrahieren Sie Elementwerte aus der Eingabe-Cnb-Matrix und weisen Sie sie den Variablen C11, C12, C13, C21, C22, C23, C31, C32 bzw. C33 zu.
  2. Basierend auf den Elementwerten des DCM wird eine Reihe von bedingten Anweisungen verwendet, um zu bestimmen, wie jedes Element berechnet wird, und dann werden die einzelnen Elemente des Quaternionvektors berechnet.
  3. Wählen Sie entsprechend dem Ergebnis der bedingten Beurteilung eine geeignete Berechnungsmethode aus, um den endgültigen Quaternionvektor qnb zu erhalten.

5. Euler-Winkel -> Quaternion: a2qua

Quaternionen werden häufig in Algorithmen zur Aktualisierung der Trägheitsnavigationslage verwendet. Die Ausgabeergebnisse der Trägheitsnavigation werden häufig als Euler-Winkel ausgedrückt, und eine gegenseitige Konvertierung zwischen Quaternionen und Euler-Winkeln ist erforderlich. Gemäß der geometrischen Bedeutung von Einheitsquaternionen:
Q bn = Q ψ ∘ Q θ ∘ Q γ = ( c ψ / 2 + ks ψ / 2 ) ∘ ( c θ / 2 + is θ / 2 ) ∘ ( c γ / 2 + js γ / 2 ) = ( c ψ / 2 c θ / 2 + ic ψ / 2 s θ / 2 + ks ψ / 2 c θ / 2 + k ∘ i ψ / 2 s θ / 2 ) ∘ ( c γ / 2 + js γ / 2 ) = ( c ψ / 2 c θ / 2 + ic ψ / 2 s θ / 2 + ks ψ / 2 c θ / 2 + js ψ / 2 s θ / 2 ) ∘ ( c γ / 2 + js γ / 2 ) = [ c ψ / 2 c θ / 2 c γ / 2 − s ψ / 2 s θ / 2 s γ / 2 c ψ / 2 s θ / 2 c γ / 2 − s ψ / 2 c θ / 2 s γ / 2 s ψ / 2 s θ / 2 c γ / 2 + c ψ / 2 c θ / 2 s γ / 2 s ψ / 2 c θ / 2 c γ / 2 + c ψ / 2 s θ / 2 s γ / 2 ] \begin{aligned} \boldsymbol{Q}_{b}^{n}= & \boldsymbol{Q}_{\psi}{ }{\circ} \boldsymbol{Q}_{\theta} \circ \boldsymbol{Q}_{\gamma}=\left(c_{\psi / 2}+\boldsymbol{k} s_{\psi / 2}\right) \circ\left(c_{\theta / 2}+ \boldsymbol{i} s_{\theta / 2}\right) \circ\left(c_{\gamma / 2}+\boldsymbol{j} s_{\gamma / 2}\right)= \\ &\left(c_{\psi / 2} c_{\theta / 2}+\boldsymbol{i} c_{\psi / 2} s_{\theta / 2}+\boldsymbol{k} s_{\psi / 2} c_{\theta / 2}+\boldsymbol{k} \circ \boldsymbol{i}_{\psi / 2} s_{\theta / 2}\right) \circ\left(c_{\gamma / 2}+ \boldsymbol{j} s_{\gamma / 2}\right)= \\ & \left(c_{\psi / 2} c_{\theta / 2}+\boldsymbol{i} c_{\psi / 2} s_ {\theta / 2}+\boldsymbol{k} s_{\psi / 2} c_{\theta / 2}+\boldsymbol{j} s_{\psi / 2} s_{\theta / 2}\right) \ circ\left(c_{\gamma / 2}+\boldsymbol{j} s_{\gamma / 2}\right)= \\ & {\left[\begin{array}{l}c_{\psi / 2} c_{\theta / 2} c_{\gamma / 2}-s_{\psi / 2} s_{\theta / 2} s_{\gamma / 2} \\ c_{\psi / 2} s_{\theta / 2} c_{\gamma / 2}-s_{\psi / 2} c_{\theta / 2} s_{\gamma / 2} \\ s_{\psi / 2} s_{\theta / 2} c_{\ gamma / 2}+c_{\psi / 2} c_{\theta / 2} s_{\gamma / 2} \\ s_{\psi / 2} c_{\theta / 2} c_{\gamma / 2}+ c_{\psi / 2}s_{\theta / 2} s_{\gamma / 2}\end{array}\right] }\end{aligned}QBn=QP FichQC=( caψ / 2+k sψ / 2)( caθ / 2+ich binθ / 2)( cac / 2+j sc / 2)=( caψ / 2Cθ / 2+ich cψ / 2Sθ / 2+k sψ / 2Cθ / 2+kichψ / 2Sθ / 2)( cac / 2+j sc / 2)=( caψ / 2Cθ / 2+ich cψ / 2Sθ / 2+k sψ / 2Cθ / 2+j sψ / 2Sθ / 2)( cac / 2+j sc / 2)= Cψ / 2Cθ / 2Cc / 2Sψ / 2Sθ / 2Sc / 2Cψ / 2Sθ / 2Cc / 2Sψ / 2Cθ / 2Sc / 2Sψ / 2Sθ / 2Cc / 2+Cψ / 2Cθ / 2Sc / 2Sψ / 2Cθ / 2Cc / 2+Cψ / 2Sθ / 2Sc / 2

function qnb = a2qua(att)
% Convert Euler angles to attitude quaternion.
% 欧拉角 -> 四元数
% Prototype: qnb = a2qua(att)
% Input: att - att=[pitch; roll; yaw] in radians
% Output: qnb - attitude quaternion
    att2 = att/2;
    s = sin(att2); c = cos(att2);
    sp = s(1); sr = s(2); sy = s(3); 
    cp = c(1); cr = c(2); cy = c(3); 
    qnb = [ cp*cr*cy - sp*sr*sy;
            sp*cr*cy - cp*sr*sy;
            cp*sr*cy + sp*cr*sy;
            cp*cr*sy + sp*sr*cy ];

AI-Erklärung :
Die Ausgabe der Zahl ist ein Quaternion qnb, das die Haltung darstellt, die dem gegebenen Euler-Winkel entspricht. Die Implementierung des Codes ist wie folgt:

  1. Teilen Sie den att-Vektor durch 2, um den att2-Vektor zu erhalten, der die Hälfte jedes Winkels darstellt.
  2. Verwenden Sie die Funktionen sin und cos, um die Sinus- und Cosinuswerte des att2-Vektors zu berechnen und die entsprechenden s- und c-Vektoren zu erhalten.
  3. Weisen Sie die Elemente der s- und c-Vektoren für nachfolgende Berechnungen den Variablen sp, sr, sy, cp, cr und cy zu.
  4. Berechnen Sie jedes Element der Quaternion qnb gemäß der Formel der Quaternion.

6. Quaternion -> Euler-Winkel: q2att

Es ist nicht einfach, den Euler-Winkel direkt durch Quaternion zu lösen, und die Haltungsmatrix kann als Zwischenübergangsbetrag verwendet werden.
θ = arcsin ⁡ ( 2 ( q 2 q 3 + q 0 q 1 ) ) { für γ = − ⁡ 2 ( 2 ( q 1 q 3 − q 0 q 2 ) , q 0 2 − q 1 2 − q 2 2 + q 3 2 ) Für ψ = − ⁡ 2 ( 2 ( q 1 q 2 − q 0 q 3 ) , q 0 2 − q 1 2 + q 2 2 − q 3 2 ) ∣ 2 ( q 2 q 3 + q 0 q 1 ) ∣ ⩽ 0,999999 } { γ = für ⁡ 2 ( 2 ( q 1 q 3 + q 0 q 2 ) , q 0 2 + q 1 2 − q 2 2 − q 3 2 ) ∣ 2 ( q 2 q 3 + q 0 q 1 ) ∣ > 0,999999 ψ = 0 \begin{array}{l}\theta=\arcsin\left(2\left(q_{2} q_{3}+q_{0} q_{1} \right)\right) \\ \left\{\begin{array}{ll}\gamma=-\operatorname{atan} 2\left(2\left(q_{1} q_{3}-q_{0} q_{2}\right), q_{0}^{2}-q_{1}^{2}-q_{2}^{2}+q_{3}^{2}\right) \\\psi =-\operatorname{then} 2\left(2\left(q_{1} q_{2}-q_{0} q_{3}\right), q_{0}^{2}-q_{1}^ {2}+q_{2}^{2}-q_{3}^{2}\right) & \left|2\left(q_{2}q_{3}+q_{0}q_{1}\ rechts)\rechts| \leqslantich=Arcsin( 2( q2Q3+Q0Q1) ){ C=für den Zweck2( 2( q1Q3Q0Q2),Q02Q12Q22+Q32)P=für den Zweck2( 2( q1Q2Q0Q3),Q02Q12+Q22Q32)2( q2Q3+Q0Q1)0,999999}{ C=für den Zweck2( 2( q1Q3+Q0Q2),Q02+Q12Q22Q32)P=02( q2Q3+Q0Q1)>0,999999

function att = q2att(qnb)
% Convert attitude quaternion to Euler attitude angles.
% 四元数 -> 欧拉角
% Prototype: att = q2att(qnb)
% Input: qnb - attitude quaternion
% Output: att - Euler angles att=[pitch; roll; yaw] in radians
    q11 = qnb(1)*qnb(1); q12 = qnb(1)*qnb(2); q13 = qnb(1)*qnb(3); q14 = qnb(1)*qnb(4); 
    q22 = qnb(2)*qnb(2); q23 = qnb(2)*qnb(3); q24 = qnb(2)*qnb(4);     
    q33 = qnb(3)*qnb(3); q34 = qnb(3)*qnb(4);  
    q44 = qnb(4)*qnb(4);
    C12=2*(q23-q14);
    C22=q11-q22+q33-q44;
    C31=2*(q24-q13); C32=2*(q34+q12); C33=q11-q22-q33+q44;
    att = [ asin(C32); 
            atan2(-C31,C33); 
            atan2(-C12,C22) ];

AI-Erklärung :
Dieser Code ist eine Funktion, die Quaternionen in Euler-Winkel umwandelt. Es verwendet eine Quaternion als Eingabe und gibt einen Vektor zurück, der die Euler-Winkel (Nick-, Gier- und Rollwinkel) enthält. Die Hauptschritte des Codes sind wie folgt:

  1. Variablen definieren: Zunächst zerlegt der Code die Eingabequaternion in die Quadrate ihrer Komponenten und speichert sie in den Variablen q11, q22, q33 und q44. Diese Variablen werden in nachfolgenden Berechnungen verwendet.
  2. Definieren der Elemente der Rotationsmatrix: Als Nächstes verwendet der Code die Komponenten der Quaternion, um die Elemente C12, C22, C31, C32 und C33 der Rotationsmatrix zu berechnen. Diese Elemente werden zur Berechnung der Euler-Winkel verwendet.
  3. Berechnen Sie Euler-Winkel: Schließlich verwendet der Code die Elemente der Rotationsmatrix, um Euler-Winkel zu berechnen. Verwenden Sie zunächst die Funktion asin, um den Wert von C32 zu berechnen und den Nickwinkel zu erhalten. Verwenden Sie dann die Funktion atan2, um den Tangens der Werte von C31 und C33 zu berechnen und so den Gierwinkel zu erhalten. Verwenden Sie abschließend die Funktion atan2, um den Tangens der Werte von C12 und C22 zu berechnen und so den Rollwinkel zu erhalten.
  4. Schließlich gibt die Funktion einen Vektor att zurück, der die Euler-Winkel (Nick-, Gier- und Rollwinkel) enthält. Diese Euler-Winkel stellen den Rotationswinkel der Pose dar, die dem Quaternion im dreidimensionalen Raum entspricht.

7. Quaternion -> Äquivalenter Rotationsvektor: q2rv

function rv = q2rv(q) 
% Convert transformation quaternion to rotation vector.
%  四元数 -> 等效旋转矢量
% Prototype: rv = q2rv(q) 
% Input: q - transformation quaternion
% Output: rv - corresponding rotation vector, such that
	if(q(1)<0)
	    q = -q;
	end
    n2 = acos(q(1));
    if n2>1e-40
        k = 2*n2/sin(n2);
    else
        k = 2;
    end
    rv = k*q(2:4);   % q = [ cos(|rv|/2); sin(|rv|/2)/|rv|*rv ];

AI-Erklärung :
Dieser Code ist eine Funktion, die eine Transformationsquaternion in einen äquivalenten Rotationsvektor umwandelt. Es verwendet eine Quaternion als Eingabe und gibt den entsprechenden Rotationsvektor zurück. Die Hauptschritte des Codes sind wie folgt:

  1. Konvertieren des Vorzeichens der Quaternion: Der Code prüft zunächst, ob das erste Element in der Quaternion negativ ist. Wenn es negativ ist, wird die Quaternion negiert, um sicherzustellen, dass das Vorzeichen des Rotationsvektors wie erwartet ist.
  2. Berechnen Sie die Größe des Rotationsvektors: Der Code verwendet die Acos-Funktion, um den Arkuskosinus des ersten Elements der Quaternion zu berechnen und die Größe des Rotationsvektors (auch als Rotationswinkel bezeichnet) zu erhalten. Hier wird eine bedingte Anweisung verwendet: Wenn n2 (d. h. der Drehwinkel) größer als ein kleiner Schwellenwert (1e-40) ist, wird die Größe des Rotationsvektors durch eine Formel berechnet; andernfalls beträgt die Größe des Rotationsvektors auf 2 gesetzt.
  3. Berechnen Sie die Richtung des Rotationsvektors: Entsprechend der Größe des Rotationsvektors berechnet der Code mithilfe der Sinus- und Cos-Funktionen die Richtung des Rotationsvektors, der dem zweiten bis vierten Element der Quaternion entspricht. Konkret wird die Richtung des Rotationsvektors durch Multiplikation der Größe des Rotationsvektors mit dem Produkt des zweiten bis vierten Elements der Quaternion ermittelt.
  4. Schließlich gibt die Funktion den berechneten Rotationsvektor rv zurück. Dieser Rotationsvektor stellt den äquivalenten Rotationsvektor der Haltung dar, die dem Quaternion im dreidimensionalen Raum entspricht.

Beachten Sie, dass während der Konvertierung das Codezeichen das Eingabequaternion anpasst, um sicherzustellen, dass das Vorzeichen des Rotationsvektors wie erwartet ist.

8. Äquivalenter Rotationsvektor -> Quaternion: rv2q

Konvertieren Sie zunächst die Quaternion in eine skalare nichtnegative Quaternion und zweitens gemäß der Formel Q = q 0 + qv = cos ⁡ ϕ 2 + u sin ⁡ ϕ 2 = Q=q_{0}+\boldsymbol{q} _ {v}=\cos \frac{\phi}{2}+\boldsymbol{u} \sin \frac{\phi}{2}=Q=Q0+Qv=cos2ϕ+uSünde2ϕ= cos ⁡ ϕ 2 + ϕ 2 ⋅ sin ⁡ ( ϕ / 2 ) ϕ / 2 \cos \frac{\phi}{2}+\frac{\phi}{2} \cdot \frac{\sin (\phi / 2)}{\phi / 2}cos2ϕ+2ϕϕ /2s i n ( ϕ /2 ), zunächst aus der skalaren Beziehung der Quaternion q 0 = cos ⁡ ϕ 2 q_{0}=\cos \frac{\phi}{2}Q0=cos2ϕFinden Sie die Hälfte des Moduls des Rotationsvektors ϕ 2 = \frac{\phi}{2}=2ϕ= arccos ⁡ ( q 0 ) \arccos \left(q_{0}\right)arccos( q0) , und dann durch die Vektorrelationqv = ϕ 2 ⋅ sin ⁡ ( ϕ / 2 ) ϕ / 2 \boldsymbol{q}_{v}=\frac{\boldsymbol{\phi}}{2} \cdot \frac {\sin(\phi/2)}{\phi/2}Qv=2ϕϕ /2s i n ( ϕ /2 )Finden Sie den äquivalenten Rotationsvektor ϕ = 2 ( ϕ / 2 ) sin ⁡ ( ϕ / 2 ) qv \boldsymbol{\phi}=2 \frac{(\phi / 2)}{\sin (\phi / 2)} \ fettsymbol{q}_{v}ϕ=2s i n ( ϕ /2 )( ϕ /2 )QvQ = q 0 + qv = cos ⁡ ϕ 2 + u sin ⁡ ϕ 2 Q=q_{0} +
\boldsymbol{q}_{v}=\cos \frac{\phi}{2}+\boldsymbol{ u } \sin \frac{\phi}{2}Q=Q0+Qv=cos2ϕ+uSünde2ϕ

function q = rv2q(rv)
% Convert rotation vector to transformation quaternion.
%
% Prototype: q = rv2q(rv)
% Input: rv - rotation vector
% Output: q - corresponding transformation quaternion, such that
%             q = [ cos(|rv|/2); sin(|rv|/2)/|rv|*rv ]
    q = zeros(4,1);
    n2 = rv(1)*rv(1) + rv(2)*rv(2) + rv(3)*rv(3);
    if n2<1.0e-8  % cos(n/2)=1-n2/8+n4/384; sin(n/2)/n=1/2-n2/48+n4/3840
        q(1) = 1-n2*(1/8-n2/384); s = 1/2-n2*(1/48-n2/3840);
    else
        n = sqrt(n2); n_2 = n/2;
        q(1) = cos(n_2); s = sin(n_2)/n;
    end
    q(2) = s*rv(1); q(3) = s*rv(2); q(4) = s*rv(3);

Dieser Code ist eine Funktion, die einen Rotationsvektor in eine Transformationsquaternion umwandelt. Es verwendet einen Rotationsvektor als Eingabe und gibt die entsprechende Transformationsquaternion zurück. Die Hauptschritte des Codes sind wie folgt:

  1. Initialisieren Sie die Quaternion: Der Code erstellt zunächst einen Nullvektor q der Größe 4, der zum Speichern der Elemente der transformierten Quaternion verwendet wird.
  2. Berechnen Sie die Größe des Rotationsvektors: Der Code verwendet das erste Element des Rotationsvektors als Größe des Rotationsvektors (auch als Rotationswinkel bezeichnet). Hier wird eine bedingte Anweisung verwendet. Wenn das Normquadrat des Rotationsvektors kleiner als ein kleiner Schwellenwert (1,0e-8) ist, wird die Größe des Rotationsvektors mithilfe der Taylor-Reihenentwicklung berechnet; andernfalls beträgt die Größe des Rotationsvektors nach der Standardformel berechnet.
  3. Berechnen Sie die Richtung des Rotationsvektors: Basierend auf der Größe des Rotationsvektors verwendet der Code die Sin- und Cos-Funktionen, um die Richtung des Rotationsvektors zu berechnen. Konkret wird die Richtung des Rotationsvektors durch Multiplikation der Größe des Rotationsvektors mit dem Vorzeichen des ersten Elements des Rotationsvektors und Multiplikation des Ergebnisses mit den anderen drei Elementen des Rotationsvektors erhalten.
  4. Transformationsquaternion konstruieren: Entsprechend der Größe und Richtung des Rotationsvektors erstellt der Code die entsprechende Transformationsquaternion. Teilen Sie insbesondere die Größe des Rotationsvektors durch 2 und verwenden Sie dann die Sinus- und Cosinus-Funktionen, um die einzelnen Elemente der Transformationsquaternion zu berechnen.
  5. Schließlich gibt die Funktion die berechnete Transformationsquaternion q zurück. Diese Transformationsquaternion stellt die Darstellung der Pose dar, die dem Rotationsvektor im Quaternionraum entspricht.

Beachten Sie, dass der Code im Berechnungsprozess unterschiedliche Formeln verwendet, um mit unterschiedlichen Situationen der Größe des Rotationsvektors umzugehen und die Berechnungsgenauigkeit zu verbessern.

9. Attitude Array -> Äquivalenter Rotationsvektor: m2rv

function rv = m2rv(m)
% Convert transformation matrix to rotation vector.
%
% Prototype: rv = m2rv(m)
% Input: m - transformation matrix
% Output: rv - corresponding rotation vector, such that
        rv = [m(3,2)-m(2,3); m(1,3)-m(3,1); m(2,1)-m(1,2)];  % 11/10/2022
        phi = acos((m(1,1)+m(2,2)+m(3,3)-1)/2);
        if phi<1e-10, afa=1/2; else afa=phi/(2*sin(phi)); end
%         afa = phi/sqrt(rv'*rv);
        rv = afa*rv;
        return;
%     rv = iaskew(m-glv.I33);  % coarse init is ok when rv is small, otherwise may fail
%     rvx = askew(rv); % good! the following iteration due to the
    for k=1:2        % accuracy deduce of sqrt(.) in function m2qua
        xx = rv(1)*rv(1); xy = rv(1)*rv(2); xz = rv(1)*rv(3);
        yy = rv(2)*rv(2); yz = rv(2)*rv(3); zz = rv(3)*rv(3);
        n2 = xx+yy+zz;
%         n2 = rv'*rv; 
        if n2>1.0e-40
            n = sqrt(n2);
%             rvx = (m-eye(3)-(1-cos(n))/n2*rvx*rvx) * (n/sin(n));
            rvx = (m1-(1-cos(n))/n2*[-yy-zz,xy,xz; xy,-xx-zz,yz; xz,yz,-xx-yy]) * (n/sin(n));
            rv = [rvx(3,2); rvx(1,3); rvx(2,1)]; % rv = iaskew(rvx);
        else
            rv = zeros(3,1);
            break;
        end
    end

AI-Erklärung:
Dieser Code ist eine Funktion, die eine Transformationsmatrix in einen Rotationsvektor umwandelt. Seine Hauptfunktionen sind wie folgt:

  1. Berechnen Sie den Rotationsvektor: Durch Subtrahieren der Elemente auf der Diagonale von den Elementen der Transformationsmatrix und anschließendes Anwenden eines bestimmten Berechnungsschritts wird der Rotationsvektor erhalten.
  2. Berechnen Sie den Drehwinkel: Verwenden Sie die Funktion acos, um den Drehwinkel im Rotationsvektor zu berechnen.
  3. Berechnen Sie den Normalisierungskoeffizienten des Rotationsvektors: Berechnen Sie den Normalisierungskoeffizienten des Rotationsvektors entsprechend dem Wert des Rotationswinkels. Wenn der Drehwinkel sehr klein ist (weniger als 1e-10), stellen Sie den Normalisierungsfaktor auf 1/2 ein, andernfalls berechnen Sie gemäß der Formel.
  4. Rotationsvektor normalisieren: Normalisiert den Rotationsvektor mithilfe eines Normalisierungsfaktors.
  5. Berechnen Sie den Rotationsvektor iterativ: Berechnen Sie den Rotationsvektor iterativ durch eine Schleife. Initialisieren Sie zunächst den Rotationsvektor auf einen Vektor mit einem kleinen Unterschied zur Transformationsmatrix (mithilfe von Grobinitialisierung). Anschließend wird der Rotationsvektor durch eine Reihe von Rechenschritten aktualisiert. Dieser iterative Prozess wird zweimal durchgeführt.

10. Äquivalenter Rotationsvektor -> Lagematrix: rv2m

C bi = I + sin ⁡ ϕ ϕ ( ϕ × ) + 1 − cos ⁡ ϕ ϕ 2 ( ϕ × ) 2 \boldsymbol{C}_{b}^{i}=\boldsymbol{I}+\frac{\ sin \phi}{\phi}(\boldsymbol{\phi} \times)+\frac{1-\cos \phi}{\phi^{2}}(\boldsymbol{\phi} \times)^{2 }CBich=ICH+ϕSündeϕ( ϕ × )+ϕ21cosϕ( ϕ × )2

function m = rv2m(rv)
% Convert rotation vector to transformation matrix.
% 等效旋转矢量 -> 姿态阵
% Prototype: m = rv2m(rv)
% Input: rv - rotation vector
% Output: m - corresponding DCM, such that

	xx = rv(1)*rv(1); yy = rv(2)*rv(2); zz = rv(3)*rv(3);
	n2 = xx+yy+zz;
    if n2<1.e-8
        a = 1-n2*(1/6-n2/120); b = 0.5-n2*(1/24-n2/720);  % a->1, b->0.5
    else
        n = sqrt(n2);
        a = sin(n)/n;  b = (1-cos(n))/n2;
    end
	arvx = a*rv(1);  arvy = a*rv(2);  arvz = a*rv(3);
	bxx = b*xx;  bxy = b*rv(1)*rv(2);  bxz = b*rv(1)*rv(3);
	byy = b*yy;  byz = b*rv(2)*rv(3);  bzz = b*zz;
	m = zeros(3,3);
	% m = I + a*(rvx) + b*(rvx)^2;
	m(1)=1     -byy-bzz; m(4)= -arvz+bxy;     m(7)=  arvy+bxz;
	m(2)=  arvz+bxy;     m(5)=1     -bxx-bzz; m(8)= -arvx+byz;
	m(3)= -arvy+bxz;     m(6)=  arvx+byz;     m(9)=1     -bxx-byy;

AI-Erklärung:
Diese Funktion ist eine Funktion, die einen Rotationsvektor in eine Posenmatrix umwandelt. Es verwendet einen Rotationsvektor als Eingabe und gibt die entsprechende Posenmatrix als Ausgabe zurück. Der Prozess ist wie folgt:

  1. Zunächst berechnet die Funktion die drei Komponenten des Rotationsvektors (dh xx, yy und zz), indem sie das Skalarprodukt des Eingaberotationsvektors bzw. des Einheitsvektors bildet.
  2. Als nächstes berechnet die Funktion eine Variable n2, die gleich der Summe der Quadrate der drei Komponenten des Rotationsvektors ist. Wenn n2 kleiner als ein kleiner Schwellenwert (1.e-8) ist, liegt die Länge des Rotationsvektors sehr nahe bei Null. In diesem Fall wird eine Näherungslösung zur Berechnung der Elemente der Posenmatrix verwendet.
  3. Wenn n2 größer oder gleich 1.e-8 ist, bedeutet dies, dass die Länge des Rotationsvektors nicht Null ist. Zu diesem Zeitpunkt wird die Taylor-Reihenerweiterung verwendet, um die Elemente der Lagematrix zu berechnen. In diesem Fall berechnet die Funktion zunächst die Länge n des Rotationsvektors und berechnet dann die Werte von sin(n) und (1-cos(n)) entsprechend der Länge n, die zum Konstruieren verwendet werden Elemente der Posenmatrix.
  4. Als nächstes konstruiert die Funktion jedes Element der Posenmatrix basierend auf den oben berechneten Werten. Zu diesen Elementen gehören a rv(1), a rv(2) und a rv(3) sowie b xx, b rv(1) rv(2), b rv(1) rv(3), by yy, b rv (2) rv(3) und bzz .
  5. Abschließend füllt die Funktion diese Elemente in eine 3x3-Matrix und gibt diese Matrix als Ausgabe zurück.

Zusammenfassend besteht die Funktion dieser Funktion darin, den Rotationsvektor in eine Posenmatrix umzuwandeln. Es verwendet Taylor-Reihenentwicklung und Näherungslösungen, um den Fall zu behandeln, in dem die Länge des Rotationsvektors nahe Null liegt, um numerische Instabilitäten zu vermeiden.

11. Antisymmetrisches Array

askew: Finden Sie die antisymmetrische Matrix des dreidimensionalen Vektors

function m = askew(v)
    m = [ 0,     -v(3),   v(2); 
          v(3),   0,     -v(1); 
         -v(2),   v(1),   0     ];

Ich denke du magst

Origin blog.csdn.net/daoge2666/article/details/131640848
Empfohlen
Rangfolge