2010-12-06 12 views
1

私はオブジェクトの向きと体軸の周りの回転数を持っています。私は、この状態から別のレートの第2の状態へのスムーズな移行を見つける必要があります。さらに、軸の周りをどれだけ速く回転/加速できるかという制約があります。クォータニオン補間とレートマッチング

私はQuaternion slerpを使っていますが、私はそれらを使って状態をスムーズに補間できますが、レートマッチングを簡単に行う方法はありません。

これは微分方程式と経路計画の練習のような感じですが、そこにあるアルゴリズムがうまくいくように問題を定式化する方法は正確にはわかりません。

この問題を解決するのに役立つアルゴリズムや、これらのアルゴリズムを使用するために問題を定式化する際のヒントをお聞かせください。

- ヘリコプターが飛んでいるように、ターゲットを追跡する必要があるヘリコプターの射撃手の

考える[編集ここでは、私が働いている問題のタイプの一例です]。議論のために、彼は地平線を越​​えた時から見えなくなった時まで、目標に立つ必要があります。このターゲットの相対レートは一定ではありませんが、私はいくつかの「レートマッチング」マヌーバを集約することで、このトラッキングをかなりうまく近似することができると思います。私は、銃の方向と任意の時点で必要な追跡率を計算することができます、それはちょうどいくつかの離散的な方向と速度私は切り刻んでいるからプロファイルを生成しています。

ありがとうございます!

+0

問題をあまり抽象的な方法で説明する価値はあるかもしれません。どんな種類のオブジェクトを回転していますか? –

+0

私は、方向と同様に、操作の始めと終わりで 'w'(そして成分)を知っているという例を – fbl

答えて

0

まず、各軸の回転速度は、回転速度ベクトル(すなわち、w = [w_x w_y w_z]^T)に構成する必要があります。次に、回転の大きさを回転の軸から分離することができます。大きさはw_mag = w/|です。 w |。次に軸は単位ベクトルu = w/w_magです。お気に入りの表現(回転行列、クォータニオンなど)を使用してインクリメンタルローテーションを作成することで、グロスローテーションを更新できます。ご出発回転がR_0であり、あなたのincrementatlの回転がR_inc(w_magの* dtを、U)によって定義されている場合、あなたは以下の組成の規則に従います。

R_1 = R_0 * R_inc 

R_k+1 = R_k * R_inc 

をお楽しみください。

+0

追加しました。クォータニオンを使用すると、開始状態から終了状態になるローテーションの角度と軸を与える遷移四元数を簡単に見つけることができます。私が混乱するところでは、操縦の始めと終わりにレートを合わせています。元の返信で何かを忘れましたか? – fbl

+0

開始方向と終了方向が分かります。開始レートと終了レートも同様に与えられます。開始と終了のレートは同じ角度と軸を持っていますか?上記の私の返信は、彼らが行うことを意味します。 – Commodore63

+0

彼らはそうしないと、もっと簡単になるでしょう、今はそうではありません;) – fbl