Tork uygulayarak yönü değiştirme


9

Uzayda özgürce yüzen bir nesneniz olduğunu varsayalım. Bu nesnenin işaret etmesini istediğiniz bir vektörünüz ve o anda baktığı yönü temsil eden bir vektörünüz var. Bu ikisinden, iki vektörü hizaya getirmek için yönelimdeki değişikliği temsil eden dönüşü (matris, kuaterniyon, ne olursa olsun) elde edebilirsiniz.

Nesnenize yalnızca tork (açısal hız türevi) uygulama yeteneğiniz varsa, zaman içinde hedefi aşmayacak / aşmayacak tork uygulamak için iyi bir algoritma nedir?

(Bu durumda, iticileri kullanarak kendini otomatik olarak seyahat yönünde yönlendirmek isteyen bir uzay gemisi. Rulo ilgisiz.)


Yakıt kullanımını (uygulanan toplam tork) veya hızı optimize etmeye mi çalışıyorsunuz? Ayrıca, gemi bu operasyonun başlangıcında sıfır açısal hızla mı başlıyor?
Justin L.

Hız için optimize etmek için komşu sonsuz bir ivmelenme, yakıt kullanımı için optimize etmek ise neredeyse sıfır ivmelenme olacaktır. Yani, pratikte, iyi görünen bir ödünleşim kullanacağım. Açısal hıza gelmeye gelince, umarım bunu doğal olarak hesaplamaya dahil edebilirim.
Karantza

Yanıtlar:


4

Bu, doğrusal hızlanma için benzer bir durum gibi ele alınabilir.

Dikkat edilmesi gereken ilk gerçek: Gemi açısal sıfır hızıyla başladığı için, açısal sıfır hızıyla sonuçlanmasını istiyorsunuz, bu da hızdaki toplam değişikliğin sıfıra eşit olması gerektiği anlamına geliyor.

Bundan, zaman içindeki ivmenin integralinin sıfıra eşit olması gerektiğini görebiliriz - negatif ivmelenme olduğu gibi tam olarak "çok" pozitif ivmelenme de olmalıdır.

Bu nedenle, çözümünüz ne olursa olsun, bu özellikle sınırlandırılmalıdır: İleri ve geri eşit "toplam" ivme.

Zaman çizelgesindeki hızlanmanızın şekli aşağıdaki gibi olmalıdır:

Zaman içindeki ivme grafiği

Buna baktığınızda, hızlanmanızın olabileceği pek çok olası şekil ve şekil var! Kolay / özlü bir cevap vermek için istediğiniz hızlanma şekli için bazı varsayımlar yapalım.

Basit bir cevap uğruna, hızlanma üç durumdan birinde olacak: ileri, geri veya sıfır. İleri ve geri eşit büyüklükte olacak ve durumlar anında değiştirilebilir. (hızlanmanın kademeli olarak artması yoktur)

Bu denklem ile belirli bir zaman dilimi içinde belirli bir ivme için mesafe değişikliğini bulabilirsiniz:

s = 0.5*a*t^2

Buradaki en basit çözüm, yarı noktaya ulaşıncaya kadar hızlanıp geri kalanını yavaşlatmak olacaktır.

PTaşımak istediğiniz toplam mesafe olarak alacağız :

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

Temel olarak:

  1. En hızlandırın aiçinsqrt(P/a) zaman birimlerinden (birimler hızlanma için Birimlerinizi dayalı çalışma)
  2. Aynı büyüklükte aynı miktarda yavaşlama

Tek çözüm bu değil. Sizi en hızlı sürede oraya götürecektir (2*sqrt(P/a) ). Peki ya daha rahat bir versiyon istiyorsanız?

Bu durumda, yolun 1 / 3'ünü hızlandırabilir, 1 / 3'üne kıyılar ve üçüncüsünün geri kalanını yavaşlatabilirsiniz. Veya 1/4, sahil 1/2 için, 1/4 de yavaşlayın.

Ya da belki sabit bir süre hızlanabilir ve sonra sabit bir süre için yavaşlayabilirsiniz, ancak yavaşlamaya başlamadan önce tam konuma gelene kadar bekleyin.


Bunun doğrusal hareket için doğru olduğu konusunda çok haklısınız. Temel kaygım, bana sadece tork için yalpalama, eğim ve yuvarlanma kontrolü sağlayan bir fizik motoruyla böyle bir algoritma kullanmaktı. Dönmeye başladıktan sonra bu eksenler dik değil, bu yüzden daha iyi bir çözüm olduğunu umuyordum. Bununla birlikte, zamanlamaya yaklaşımınız yine de geçerlidir.
Karantza

Ah; Üzgünüm, sorunuzu anlamamalıydım. Motorunuzun özelliklerini görmeden daha ayrıntılı cevap verebileceğimden emin değilim. Ancak, sabit torku sabit bir yönde uygulamanın bir yolu var mı?
Justin L.

Evet, cevabınız muhtemelen mümkün olduğunca yakın. Doğrusal algoritmanın uygulanacağı bir şey elde edene kadar kuaterniyonları hackleyerek özel sorunumu çözdüm. Teşekkürler!
Karantza
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.