[数学的知識] 回転行列の導出プロセスは、ユークリッド変換の非線形制限を解決しながら、ベクトルの回転に基づいています。

シリアルナンバー コンテンツ
1 【数学的知識】自由度と自由度の計算方法
2 【数学的知識】剛体 剛体と剛体の運動
3 【数学的知識】剛体の基本運動、平行移動、回転
4 【数学的知識】ベクトル乗算、内積、外積、MATLABコード実装
5 【数学的知識】共分散、確率変数の共分散、確率変数がそれぞれ単一の数値とベクトルの場合の共分散
6 [数学的知識] 回転行列の導出プロセスは、ユークリッド変換の非線形制限を解決しながら、ベクトルの回転に基づいています。

1. 点とベクトルの表現

ポイント:空間の基本要素であり、長さも体積もありません。

3次元空間に点aaがあるとします。a 、その座標は [ x , y , z ] T \left[\begin{matrix}x, y, z\end{matrix}\right]^\text{T} として表すことができます[× z

ベクトルは 2 点を結ぶことによって形成されます。


ベクトル: ある点から別の点を指す矢印として見ることができます。ベクトルとその座標の 2 つの概念を混同しないでください。ベクトルとは、ベクトルa ⃗ \vec{a}など、空間内にあるものです。ある ここに⃗ \vec{a}ある 複数の実数とは関連付けられていません。この 3 次元空間で特定の座標系を指定した場合にのみ、この座標系におけるベクトルの座標について話すことができます。つまり、このベクトルに対応するいくつかの実数を見つけることができます。

ベクトルa ⃗ \vec{a}ある 線形空間基底[ e ⃗ 1 , e ⃗ 2 , e ⃗ 3 ] \left[\begin{matrix}\vec{e}_1, \vec{e}_2, \vec{e}_3\end{matrix} \右][e 1e 2e 3]の下の座標は [ x , y , z ] T \left[\begin{matrix}x, y, z\end{matrix}\right]^\text{T} です。[× zTの場合、次の式が成り立ちます。

a ⃗ = [ e ⃗ 1 e ⃗ 2 e ⃗ 3 ] [ xyz ] = e ⃗ 1 x + e ⃗ 2 y + e ⃗ 3 z = xe ⃗ 1 + ye ⃗ 2 + ze ⃗ 3 \begin{aligned} \ vec{a} = \left[\begin{行列} \vec{e}_1 & \vec{e}_2 & \vec{e}_3 \end{行列}\right] \left[\begin{行列} x \\ y \\ z \\ \end{matrix}\right] = \vec{e}_1x + \vec{e}_2 y + \vec{e}_3 z \\ = x \vec{e}_1+ y \vec{e}_2 + z \vec{e}_3 \end{整列}ある =[e 1e 2e 3 バツyz =e 1バツ+e 2y+e 3z=バツe 1+ye 2+ze 3


2. ベクトルに基づく回転行列RRの導出R

同じベクトルの場合、a ⃗ \vec{a}ある 、単位正規直交基底で設定[ e ⃗ 1 , e ⃗ 2 , e ⃗ 3 ] \left[\begin{matrix}\vec{e}_1, \vec{e}_2, \vec{e}_3\end {行列}\右][e 1e 2e 3]の下の座標は [ x , y , z ] T \left[\begin{matrix}x, y, z\end{matrix}\right]^\text{T} です。[× zT
1 回転後、単位正規直交基底は[ e ⃗ 1 ' , e ⃗ 2 ' , e ⃗ 3 ' ] \left[\begin{matrix}\vec{e}_1^\prime, \vec{ e} になります。 _2^\素数, \vec{e}_3^\素数\end{行列}\right][e 1e 2e 3]、ベクトルa ⃗ \vec{a}ある 新しい直交基底の座標は[ x ′​​ , y ′ , z ′ ] T \left[\begin{matrix}x^\prime, y^\prime, z^\prime\end{matrix}\right です。 ]^\text{T}[バツ「、y「、z

このベクトルは座標系の回転とともに移動しないため、座標の定義によれば、次のようになります。

a ⃗ = [ e ⃗ 1 e ⃗ 2 e ⃗ 3 ] [ xyz ] = [ e ⃗ 1 ' e ⃗ 2 ' e ⃗ 3 ' ] [ x ' y ' z ' ] \begin{aligned} \vec{a} &= \left[\begin{行列} \vec{e}_1 & \vec{e}_2 & \vec{e}_3 \end{行列}\right] \left[\begin{行列} x \\ y \\ z \\ \end{行列}\right]\ \\ &= \left[\begin{行列} \vec{e}_1^\prime & \vec{e}_2^\prime & \vec{e }_3^\prime \end{行列}\right] \left[\begin{行列} x^\prime \\ y^\prime \\ z^\prime \\ \end{行列}\right] \end{整列しました}ある =[e 1e 2e 3 バツyz  =[e 1e 2e 3 バツyz


行列を方程式の両側で同時に乗算したままにする場合[ e ⃗ 1 T e ⃗ 2 T e ⃗ 3 T ] \left[\begin{matrix}\vec{e}_1^\text{ T} \\ \vec{e} _2^\text{T} \\ \vec{e}_3^\text{T}\end{行列}\right] e 1Te 2Te 3T 、持っている

[ e ⃗ 1 T e ⃗ 2 T e ⃗ 3 T ] [ e ⃗ 1 e ⃗ 2 e ⃗ 3 ] [ xyz ] = [ e ⃗ 1 T e ⃗ 2 T e ⃗ 3 T ] [ e ⃗ 1 ' e ⃗ 2 ' e ⃗ 3 ' ] [ x ' y ' z ' ] [ e ⃗ 1 T e ⃗ 1 e ⃗ 1 T e ⃗ 2 e ⃗ 1 T e ⃗ 3 e ⃗ 2 T e ⃗ 1 e ⃗ 2 T e ⃗ 2 e ⃗ 2 T e ⃗ 3 e ⃗ 3 T e ⃗ 1 e ⃗ 3 T e ⃗ 2 e ⃗ 3 T e ⃗ 3 ] [ xyz ] = [ e ⃗ 1 T e ⃗ 1 ' e ⃗ 1 T e ⃗ 2 'e⃗1Te⃗3'e⃗2Te⃗1'e⃗2Te⃗2'e⃗2Te⃗3'e⃗3Te⃗1'e⃗3Te⃗2'e ⃗ 3 T e ⃗ 3 '' ] [ x '' y '' z '' ] \begin{aligned} \left[\begin{matrix} \vec{e}_1^\text{T} \\ \vec{e}_2^ \text{T} \\ \vec{e}_3^\text{T} \\ \end{行列}\right] \left[\begin{行列} \vec{e}_1 & \vec{e}_2 & \vec{e}_3 \end{行列}\right] \left[\begin{行列} x \\ y \\ z \\ \end{行列}\right] &= \left[\begin{行列} \vec{e}_1^\text{T} \\ \vec{e}_2^\text{T} \\ \vec{e}_3^\text{T} \\ \end{行列}\right] \left[\begin{行列} \vec{e}_1^\prime& \vec{e}_2^\prime & \vec{e}_3^\prime \end{matrix}\right] \left[\begin{matrix} x^\prime \\ y^\prime \\ z^ \prime \\ \end{行列}\right] \\ \left[\begin{行列} \vec{e}_1^\text{T} \vec{e}_1 & \vec{e}_1^\text {T} \vec{e}_2 & \vec{e}_1^\text{T} \vec{e}_3 \\ \vec{e}_2^\text{T} \vec{e}_1 & \ vec{e}_2^\text{T} \vec{e}_2 & \vec{e}_2^\text{T} \vec{e}_3 \\ \vec{e}_3^\text{T} \vec{e}_1 & \vec{e}_3^\text{T} \vec{e}_2 & \vec{e}_3^\text{T} \vec{e}_3 \\ \end{行列}\right] \left[\begin{行列} x \\ y \\ z \\ \end{行列}\right] &= \left[\begin{行列} \vec{e}_1^\text{T } \vec{e}_1^\プライム & \vec{e}_1^\text{T} \vec{e}_2^\プライム & \vec{e}_1^\text{T} \vec{e} _3^\プライム \\ \vec{e}_2^\text{T} \vec{e}_1^\プライム & \vec{e}_2^\text{T} \vec{e}_2^\プライム & \vec{e}_2^\text{T} \vec{e}_3^\プライム \\ \vec{e}_3^\text{T} \vec{e}_1^\プライム& \vec{e}_3^\text{T} \vec{e}_2^\prime & \vec{e}_3^\text{T} \vec{e}_3^\prime \\ \end{行列}\right] \left[\begin{行列} x^\prime \\ y^\prime \\ z^\prime \\ \end{行列}\right] \end{aligned} e 1Te 2Te 3T [e 1e 2e 3 バツyz e 1Te 1e 2Te 1e 3Te 1e 1Te 2e 2Te 2e 3Te 2e 1Te 3e 2Te 3e 3Te 3 バツyz = e 1Te 2Te 3T [e 1e 2e 3 バツyz = e 1Te 1e 2Te 1e 3Te 1e 1Te 2e 2Te 2e 3Te 2e 1Te 3e 2Te 3e 3Te 3 バツyz

明らかにあります

e ⃗ 1 T e ⃗ 1 = 1 、 e ⃗ 1 T e ⃗ 2 = 0 、 e ⃗ 1 T e ⃗ 3 = 0 、 e ⃗ 2 T e ⃗ 1 = 0 、 e ⃗ 2 T e ⃗ 2 = 1 、 e ⃗ 2 T e ⃗ 3 = 0 , e ⃗ 3 T e ⃗ 1 = 0 , e ⃗ 3 T e ⃗ 2 = 0 , e ⃗ 3 T e ⃗ 3 = 1 , \begin{aligned} \vec{e} _1^\text{T} \vec{e}_1 = 1、\quad & \vec{e}_1^\text{T} \vec{e}_2 = 0、\quad & \vec{e}_1^ \text{T} \vec{e}_3 = 0, \quad \\ \vec{e}_2^\text{T} \vec{e}_1 = 0, \quad & \vec{e}_2^\ text{T} \vec{e}_2 = 1, \quad & \vec{e}_2^\text{T} \vec{e}_3 = 0, \quad \\ \vec{e}_3^\text {T} \vec{e}_1 = 0、\quad & \vec{e}_3^\text{T} \vec{e}_2 = 0、\quad & \vec{e}_3^\text{T } \vec{e}_3 = 1、\quad \\ \end{aligned}e 1Te 1=1 e 2Te 1=0 e 3Te 1=0 e 1Te 2=0 e 2Te 2=1 e 3Te 2=0 e 1Te 3=0 e 2Te 3=0 e 3Te 3=1

したがって、さらに単純化すると、

[ e ⃗ 1 T e ⃗ 1 e ⃗ 1 T e ⃗ 2 e ⃗ 1 T e ⃗ 3 e ⃗ 2 T e ⃗ 1 e ⃗ 2 T e ⃗ 2 e ⃗ 2 T e ⃗ 3 e ⃗ 3 T e ⃗ 1 e ⃗ 3 T e ⃗ 2 e ⃗ 3 T e ⃗ 3 ] [ xyz ] = [ e ⃗ 1 T e ⃗ 1 ' e ⃗ 1 T e ⃗ 2 ' e ⃗ 1 T e ⃗ 3 ' e ⃗ 2 T e ⃗ 1'e⃗2Te⃗2'e⃗2Te⃗3'e⃗3Te⃗1'e⃗3Te⃗2'e⃗3Te⃗3'][x'y'z' ] [xyz] = [ e ⃗ 1 T e ⃗ 1 ' e ⃗ 1 T e ⃗ 2 ' e ⃗ 1 T e ⃗ 3 ' e ⃗ 2 T e ⃗ 1 ' e ⃗ 2 T e ⃗ 2 ' e ⃗ 2 T e ⃗ 3 ' e ⃗ 3 T e ⃗ 1 ' e ⃗ 3 T e ⃗ 2 ' e ⃗ 3 Te ⃗ 3 ' ] [ x ' y ' z ' ] = def R [ x ' y ' z ' ] \begin {整列} \left[\begin{行列} \vec{e}_1^\text{T} \vec{e}_1 & \vec{e}_1^\text{T} \vec{e}_2 & \ vec{e}_1^\text{T} \vec{e}_3 \\ \vec{e}_2^\text{T} \vec{e}_1 & \vec{e}_2^\text{T} \vec{e}_2 & \vec{e}_2^\text{T} \vec{e}_3 \\ \vec{e}_3^\text{T} \vec{e}_1 & \vec{e }_3^\text{T} \vec{e}_2 & \vec{e}_3^\text{T} \vec{e}_3 \\\end{行列}\right] \left[\begin{行列} x \\ y \\ z \\ \end{行列}\right] &= \left[\begin{行列} \vec{e}_1^ \text{T} \vec{e}_1^\prime & \vec{e}_1^\text{T} \vec{e}_2^\prime & \vec{e}_1^\text{T} \ vec{e}_3^\prime \\ \vec{e}_2^\text{T} \vec{e}_1^\prime & \vec{e}_2^\text{T} \vec{e}_2 ^\プライム & \vec{e}_2^\text{T} \vec{e}_3^\プライム \\ \vec{e}_3^\text{T} \vec{e}_1^\プライム & \ vec{e}_3^\text{T} \vec{e}_2^\prime & \vec{e}_3^\text{T} \vec{e}_3^\prime \\ \end{行列}\ right] \left[\begin{行列} x^\prime \\ y^\prime \\ z^\prime \\ \end{行列}\right] \\ \left[\begin{行列} x \\ y \\ z \\ \end{行列}\right] &= \left[\begin{行列} \vec{e}_1^\text{T} \vec{e}_1^\prime & \vec{e} _1^\text{T} \vec{e}_2^\プライム & \vec{e}_1^\text{T} \vec{e}_3^\プライム \\ \vec{e}_2^\text{ T} \vec{e}_1^\プライム & \vec{e}_2^\text{T} \vec{e}_2^\プライム& \vec{e}_2^\text{T} \vec{e}_3^\prime \\ \vec{e}_3^\text{T} \vec{e}_1^\prime & \vec{e }_3^\text{T} \vec{e}_2^\prime & \vec{e}_3^\text{T} \vec{e}_3^\prime \\ \end{matrix}\right] \ left[\begin{行列} x^\prime \\ y^\prime \\ z^\prime \\ \end{行列}\right] \\ & \overset{def}{=} R \left[\begin {行列} x^\prime \\ y^\prime \\ z^\prime \\ \end{matrix}\right] \end{aligned} e 1Te 1e 2Te 1e 3Te 1e 1Te 2e 2Te 2e 3Te 2e 1Te 3e 2Te 3e 3Te 3 バツyz バツyz = e 1Te 1e 2Te 1e 3Te 1e 1Te 2e 2Te 2e 3Te 2e 1Te 3e 2Te 3e 3Te 3 バツyz = e 1Te 1e 2Te 1e 3Te 1e 1Te 2e 2Te 2e 3Te 2e 1Te 3e 2Te 3e 3Te 3 バツyz =デフ_ _R バツyz

このRRR は、回転行列と呼ばれるベクトルの回転を記述します。


上記の導出プロセスは、ベクトルの代数的関係と 3 次元座標軸の回転角度を使用した導出プロセスに基づいています (第 3 章 - 数学の基礎知識 -> 座標変換) を参照してください


回転行列RRR には次のような特性があります。

  • 回転行列RRRは行列式 1 の直交行列です。逆に、行列式 1 の直交行列も回転行列です。オールン_n次元の回転行列は特別な直交群SO ( n ) SO(n)SO ( n ) SO ( n ) = { R ∈ R n × n ∣ RRT = I , det ( R ) = I } SO(n) = \{ R \in \R^{n \times n} | RR^\text{T} = I、\text{det}(R) = I \}SO ( n )={ RRn × nRRT=私はそれ( R )=}

  • 回転行列RRRは直交行列 (Orthogonal Matrix、直交行列とは、その逆行列が自身の転置となる行列です) であり、回転行列R − 1 R^{-1}R1 は逆回転を表します


3. ベクトルのユークリッド変換

コンピューター ビジョンとロボット工学では、ユークリッド/剛体変換 (または剛体変換) が非常に一般的な変換です。

ユークリッド変換は 2 つの部分で構成されます。

  1. 回転: 回転行列で表すことができます。
  2. 平行移動: 平行移動ベクトルで表すことができます。

分からない場合は、 「【数学的知識】剛体の基本運動と平行移動と回転」の記事を参照してください

次のような回転と平行移動のプロセスがあるとします。世界座標系にベクトルa ⃗ 1 \vec{a}_1があります。ある 1、1 回転後R 1 t 2 R_{1t2}R1t2 _ _および翻訳t 1 t 2 t_{1t2}t1t2 _ _その後、ベクトルa ⃗ 2 \vec{a}_2が得られます。ある 2とすると、 a ⃗ 2 = R 1 t 2 a ⃗ 1 + t 1 t 2 \vec{a}_2 = R_{1t2} \vec{a}_1 + t_{1t2} という関係が成り立ちます
ある 2=R1t2 _ _ある 1+t1t2 _ _


4. ユークリッド変換には非線形の制限があります

ユークリッド変換は、回転と平行移動を含む剛体変換です。平行移動は線形ですが、回転は非線形です。

回転については、回転行列、四元数、または回転軸と回転角度を使用して説明できます。どのように説明されるかに関係なく、回転の性質は非線形です。

2 つの変換を実行すると、R 1 t 2 、 t 1 t 2 R_{1t2}、 t_{1t2}R1t2 _ _t1t2 _ _R 2 t 3 、t 2 t 3 R_{2t3}、t_{2t3}R2t3 _ _t2t3 _ _

a ⃗ 2 = R 1 t 2 a ⃗ 1 + t 1 t 2 a ⃗ 3 = R 2 t 3 a ⃗ 2 + t 2 t 3 = R 2 t 3 ( R 1 t 2 a ⃗ 1 + t 1 t 2 ) + t 2 t 3 \begin{aligned} \vec{a}_2 &= R_{1t2} \vec{a}_1 + t_{1t2} \\ \vec{a}_3 &= R_{2t3} \vec {a}_2 + t_{2t3} \\ &= R_{2t3} (R_{1t2} \vec{a}_1 + t_{1t2}) + t_{2t3} \end{aligned}ある 2ある 3=R1t2 _ _ある 1+t1t2 _ _=R2t3 _ _ある 2+t2t3 _ _=R2t3 _ _( R1t2 _ _ある 1+t1t2 _ _)+t2t3 _ _

上記の変換には 2 つの回転行列がありますが、2 つの回転の組み合わせR 2 t 3 × R 1 t 2 R_{2t3} \times R_{1t2}R2t3 _ _×R1t2 _ _加算など、2 つの回転行列の単純な線形結合とは等しくありません。

同様に、クォータニオンを使用して回転を記述する場合、クォータニオンの乗算も非線形になります。


5. 変換行列TT を使用するT は非線形性を解きます

ユークリッド変換の非線形問題は同次座標の方法で解くことができます。

同次座標は、追加の座標を追加することで標準座標を拡張します。回転と平行移動は単一の行列で表すことができるため、変換が簡単になります。


具体的な解決策は、3 次元ベクトルの末尾に 1 を加えて同次座標と呼ばれる 4 次元ベクトルに変換することです。このユークリッド変換では、

a ⃗ 2 = R 1 t 2 a ⃗ 1 + t 1 t 2 \vec{a}_2 = R_{1t2} \vec{a}_1 + t_{1t2}ある 2=R1t2 _ _ある 1+t1t2 _ _

回転行列と平行移動ベクトルを同じ変換行列 (Transformation Matrix) に書き込み、同時に次元を拡張します。

[ a ⃗ 2 1 ] = [ R 1 t 2 t 1 t 2 0 1 × 3 1 ] [ a ⃗ 1 1 ] = T [ a ⃗ 1 1 ] \begin{aligned} \left[\begin{matrix} \ vec{a}_2 \\ 1 \end{行列}\right] &= \left[\begin{行列} R_{1t2} & t_{1t2} \\ 0_{1 \times 3} & 1 \\ \end {行列}\right] \left[\begin{行列} \vec{a}_1 \\ 1 \\ \end{行列}\right] \\ &= T \left[\begin{行列} \vec{a }_1 \\ 1 \\ \end{行列}\right] \end{整列}[ある 21=[R1t2 _ _01 × 3t1t2 _ _1[ある 11=T[ある 11]

TTTは変換行列です。

ここに画像の説明を挿入します


同次座標の意味は、ユークリッド変換を線形関係として表現することです。

したがって、ユークリッド変換が同次座標になった後、次のようになります。

a ⃗ 2 = R 1 t 2 a ⃗ 1 + t 1 t 2 [ a ⃗ 2 1 ] = T [ a ⃗ 1 1 ] \begin{aligned} \vec{a}_2 &= R_{1t2} \vec{ a}_1 + t_{1t2} \\ \left[\begin{行列} \vec{a}_2 \\ 1 \end{行列}\right] &= T \left[\begin{行列} \vec{a }_1 \\ 1 \\ \end{行列}\right]\end{整列}ある 2[ある 21]=R1t2 _ _ある 1+t1t2 _ _=T[ある 11]


変換行列TTTのプロパティ:

  • 変換行列TTT は特殊ユークリッド群SE SESE
    SE ( 3 ) = { T = [ R t 0 1 × 3 1 ] ∈ R 4 × 4 ∣ R ∈ SO ( 3 ) , t ∈ R 3 } SE(3) = \{ T = \left[\ begin{行列} R & t \\ 0_{1\times3} & 1 \\ \end{行列}\right] \in \R^{4\times4} | R \in SO(3), t \in \R^3 \}SE ( 3 )={ T=[R01 × 3t1R4 × 4∣R __( 3 ) tR3 }

  • 変換行列の逆行列は、逆変換を表します。
    T − 1 = [ RT − RT t 0 1 × 3 1 ] T^{-1} = \left[\begin{matrix} R^\text{T} & - R^\text{T} t \\ 0_{1\times3} & 1 \\ \end{行列}\right]T1=[RT01 × 3Rtt _1


参照

  1. 「Visual SLAM 理論から実践までの 14 講義」講義 3 3 次元空間における剛体の動き - Zhihu
  2. SLAM学習ノート(1) 第3講:3次元空間における剛体運動
  3. [Sorkine-Hornung O、Rabinovich M. svd[J] を使用した最小二乗剛体運動。コンピューティング、2017、1(1): 1-5.]

おすすめ

転載: blog.csdn.net/weixin_36815313/article/details/132157447