トルクを加えて向きを変える


9

空間に自由に浮かんでいるオブジェクトがあるとします。このオブジェクトに向かわせたいベクトルと、現在向いている方向を表すベクトルがあります。これらの2つから、方向の変化を表す回転(行列、クォータニオンなど)を取得して、2つのベクトルを整列させることができます。

トルク(角速度の派生物)をオブジェクトに適用する能力しかない場合、目的地をオーバー/アンダーシュートしない、時間をかけてトルクを適用するための良いアルゴリズムは何ですか?

(この場合、スラスタを使用して進行方向に自動的に向きを変えたい宇宙船です。ロールは関係ありません。)


燃料使用量(トルクの合計)または速度を最適化しようとしていますか?また、この作戦の開始時に、船は角速度ゼロで出発していますか?
ジャスティンL.

まあ、速度を最適化することは、ほぼ無限の加速を持つことであり、燃料使用を最適化することは、ほぼゼロの加速を持つことです。したがって、実際には、見栄えの良いトレードオフを使用します。角速度の開始については、自然にそれを計算に含めることができれば幸いです。
カランツァ

回答:


4

これは、線形加速の場合と同様に処理できます。

注意すべき最初の事実:船はゼロの角速度で開始するため、最終的に角速度がゼロになるようにしたいので、速度の変化の合計はゼロでなければなりません。

このことから、時間の経過に伴う加速度の積分はゼロに等しくなければならないことがわかります。負の加速度があるのとまったく同じくらい「はるかに」正の加速度がなければなりません。

したがって、ソリューションは、それが何であれ、このプロパティに制約される必要があります:前方および後方の等しい「合計」加速。

以下は、時間の経過に伴う加速度のグラフの形状です。

時間の経過に伴う加速度のグラフ

これを見ると、あなたの加速があり得る非常に多くの可能な形と形があります!簡単で簡潔な答えを与えるために、必要な加速の形状についていくつかの仮定をしてみましょう。

簡単な答えのために、私は加速を3つの状態の1つ(前方、後方、またはゼロ)にします。順方向と逆方向の大きさが等しくなり、状態を瞬時に切り替えることができます。(加速の漸進的な増加はありません)

次の方程式を使用して、特定の期間の特定の加速度に対する距離の変化を見つけることができます。

s = 0.5*a*t^2

ここで最も簡単な解決策は、途中まで到達するまで加速してから、残りの部分を減速することです。

私たちはPあなたが動かしたい総距離とみなします:

s = P/2
P/2 = 0.5*a*t^2
P = a*t^2
t^2 = P/a
t = sqrt(P/a)

だから基本的に:

  1. で加速aのためのsqrt(P/a)時間の単位(単位は加速のためにあなたのユニットをオフに基づいて)
  2. 同じ時間、同じ大きさで減速する

これが唯一の解決策ではありません。最短時間で到着します(2*sqrt(P/a))。しかし、もっとリラックスしたバージョンが必要な場合はどうでしょうか?

この場合、1/3の速度で加速し、1/3の速度で惰走し、残りの3分の1を減速することができます。または、1 / 4、1 / 2のコースト、1/4も減速します。

または、一定時間加速してから一定時間減速し、正確な位置に到着するまで待ってから減速を開始することもできます。


これが直線運動の場合であることについては、あなたは非常に正しいです。私の主な関心事は、トルクのヨー、ピッチ、ロールの制御のみを提供する物理エンジンでこのようなアルゴリズムを使用することでした。いったん回転を開始すると、これらの軸は直交しません。そのため、より良い解決策があることを期待していました。ただし、タイミングへのアプローチは引き続き適用されます。
カランツァ

ああ。申し訳ありませんが、私はあなたの質問を理解できなかったに違いありません。あなたのエンジンのスペックを見ずにもっと徹底的に答えられるかどうかはわかりません。しかし、確かに一定のトルクを一定の方向に加える方法はありますか?
Justin L.

ええ、あなたの答えはおそらくできるだけ近いです。線形アルゴリズムが適用されるものを得るまで、四元数をハッキングすることで、特定の問題を解決しました。ありがとう!
カランツァ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.