差分
このページの2つのバージョン間の差分を表示します。
| 両方とも前のリビジョン 前のリビジョン 次のリビジョン | 前のリビジョン | ||
| articles:quaternion [2021/11/15 21:45] – Takashi Suehiro | articles:quaternion [2022/03/04 08:59] (現在) – [プログラムと練習問題] Takashi Suehiro | ||
|---|---|---|---|
| 行 108: | 行 108: | ||
| \boldsymbol{z}' | \boldsymbol{z}' | ||
| - | 2(q_x q_y + q_w q_y) \\ | + | 2(q_x q_z + q_w q_y) \\ |
| 2(q_y q_z - q_w q_x) \\ | 2(q_y q_z - q_w q_x) \\ | ||
| q_w^2 + q_z^2 - q_x^2 - q_y^2 | q_w^2 + q_z^2 - q_x^2 - q_y^2 | ||
| 行 117: | 行 117: | ||
| $$ | $$ | ||
| \left( \begin{array}{cc} | \left( \begin{array}{cc} | ||
| - | q_w^2 + q_x^2 - q_y^2 - q_z^2 & 2(q_x q_y - q_w q_z) & 2(q_x q_y + q_w q_y) \\ | + | q_w^2 + q_x^2 - q_y^2 - q_z^2 & 2(q_x q_y - q_w q_z) & 2(q_x q_z + q_w q_y) \\ |
| 2(q_y q_x + q_w q_z) & q_w^2 + q_y^2 - q_z^2 - q_x^2 & 2(q_y q_z - q_w q_x) \\ | 2(q_y q_x + q_w q_z) & q_w^2 + q_y^2 - q_z^2 - q_x^2 & 2(q_y q_z - q_w q_x) \\ | ||
| 2(q_z q_x - q_w q_y) & 2(q_z q_y + q_w q_x) & q_w^2 + q_z^2 - q_x^2 - q_y^2 | 2(q_z q_x - q_w q_y) & 2(q_z q_y + q_w q_x) & q_w^2 + q_z^2 - q_x^2 - q_y^2 | ||
| 行 184: | 行 184: | ||
| $$ | $$ | ||
| + | この計算方法はゼロ割が発生しないので安定して計算ができるが, | ||
| + | 実際のプログラムでは計算誤差の影響で平方根の中が極めて小さいときに負になることがあるという点に注意を払う必要がある. | ||
| ===== 四元数による回転の連鎖と座標系の姿勢表現 ===== | ===== 四元数による回転の連鎖と座標系の姿勢表現 ===== | ||
| 行 237: | 行 238: | ||
| * パラメタが4つで冗長パラメタが少ないので正規化しやすい \\ 直交行列はパラメタが9で直交性を維持するのが難しい | * パラメタが4つで冗長パラメタが少ないので正規化しやすい \\ 直交行列はパラメタが9で直交性を維持するのが難しい | ||
| * ジンバルロックを起こさない(オイラー角と比較して) | * ジンバルロックを起こさない(オイラー角と比較して) | ||
| - | * 回転や座標系の連鎖(積の計算)が軽い(積16和12. 直交行列だと積27和8) | + | * 回転や座標系の連鎖(積の計算)が軽い(積16和12. 直交行列だと積27和18) |
| 欠点は | 欠点は | ||
| * 座標系の表現と捉えた場合,座標軸がどうなっているか計算しないと分からない | * 座標系の表現と捉えた場合,座標軸がどうなっているか計算しないと分からない | ||
| * 人間にとって分かりにくい(オイラー角と比較して) | * 人間にとって分かりにくい(オイラー角と比較して) | ||
| - | * ベクトルの回転の計算が重い(積28和20.直交行列だと積9和6) | + | * ベクトルの回転の計算が重い(積28和20((ベクトルの実部の計算を除いている.普通に四元数の積でやると積32, |
| 四元数,直交行列,それぞれ使いどころによると思うが, | 四元数,直交行列,それぞれ使いどころによると思うが, | ||
| 行 248: | 行 249: | ||
| 私にはあまり四元数のメリットが見えない. | 私にはあまり四元数のメリットが見えない. | ||
| + | 四元数の一番のメリットは計算誤差の蓄積を防ぐ正規化が容易なことかもしれない. | ||
| + | |||
| + | 回転行列の正規直交化は少しならず工夫が必要である. | ||
| + | * x => y => z などの順に正規直交化を行う.ただし軸の平等性が崩れる. | ||
| + | * ロドリゲス,四元数へ変換した後,正規化を行い,回転行列に戻す.ただし直交行列以外の変換には正当性がない. | ||
| + | * 特異値分解を行い,対角成分をすべて1((鏡像変換になるのを避ける必要あり))にして戻す.おそらく一番良さそうだが手間がかかる((参考文献:3次元回転,金谷健一.4.5節 回転行列の最適補正)). | ||
| + | いずれにしても少々手間がかかるので都度やるのは面倒である. | ||
| + | |||
| + | ===== プログラムと練習問題 ===== | ||
| + | |||
| + | [[articles: | ||
| + | |||
| + | [[articles: | ||