Changer l'orientation en appliquant des couples

9

Supposons que vous ayez un objet flottant librement dans l'espace. Vous avez un vecteur vers lequel cet objet doit pointer, et un vecteur représentant la direction à laquelle il fait actuellement face. De ces deux, vous pouvez obtenir la rotation (matrice, quaternion, peu importe) qui représente le changement d'orientation pour amener les deux vecteurs dans l'alignement.

Si vous avez uniquement la possibilité d'appliquer un couple (dérivé de la vitesse angulaire) à votre objet, quel est un bon algorithme pour appliquer un couple dans le temps qui ne dépassera / ne dépassera pas la destination?

(Dans ce cas, c'est un vaisseau spatial qui veut s'orienter automatiquement dans le sens du déplacement à l'aide de propulseurs. Le roulis n'est pas pertinent.)

Karantza
la source
Essayez-vous d'optimiser la consommation de carburant (couple total exercé) ou la vitesse? De plus, le navire démarre-t-il avec une vitesse angulaire nulle au début de cette opération?
Justin L.
Eh bien, optimiser pour la vitesse, ce serait avoir une accélération presque infinie, et optimiser pour la consommation de carburant, ce serait avoir une accélération presque nulle. Donc, en pratique, je vais utiliser un compromis qui semble bon. Quant à la vitesse angulaire de départ, j'espère que je pourrai naturellement l'inclure dans le calcul.
Karantza

Réponses:

4

Cela peut être géré comme le cas similaire pour l'accélération linéaire.

Premier fait à noter: comme le navire commence avec une vitesse angulaire nulle, et que vous voulez qu'il se retrouve avec une vitesse angulaire nulle, cela signifie que le changement total de vitesse doit être égal à zéro.

De cela, nous pouvons voir que l'intégrale de l'accélération dans le temps doit être égale à zéro - il doit y avoir exactement autant d'accélération positive qu'il y a d'accélération négative.

Par conséquent, votre solution, quelle qu'elle soit, doit être contrainte à cette propriété: Accélération "totale" égale vers l'avant et vers l'arrière.

Voici ce que devrait suivre la forme de votre graphique d'accélération dans le temps:

Graphique de l'accélération dans le temps

En regardant cela, il y a tellement de formes et de formes possibles que votre accélération pourrait être! Faisons quelques hypothèses sur la forme d'accélération que vous souhaitez, afin de donner une réponse simple / concise.

Pour une réponse simple, je vais avoir l'accélération dans l'un des trois états: avant, arrière ou zéro. En avant et en arrière seront de même ampleur, et les états peuvent être commutés instantanément. (il n'y a pas d'accélération progressive de l'accélération)

Vous pouvez trouver le changement de distance pour une accélération donnée sur une période de temps donnée avec cette équation:

s = 0.5*a*t^2

La solution la plus simple serait d'accélérer jusqu'à ce que vous atteigniez la mi-course, puis de ralentir le reste du chemin.

Nous prendrons Pcomme distance totale que vous souhaitez parcourir:

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

Donc en gros:

  1. Accélérez à ades sqrt(P/a)unités de temps (unités basées sur vos unités d'accélération)
  2. Décélérer à la même ampleur pour la même durée

Ce n'est pas la seule solution. Il vous y amènera dans les plus brefs délais ( 2*sqrt(P/a)). Mais que faire si vous voulez une version plus détendue?

Dans ce cas, vous pouvez accélérer 1/3 du chemin, ralentir pour le 1/3 et ralentir le reste du tiers. Ou 1 / 4ème, côte pour 1/2, ralentissez également 1 / 4ème.

Ou peut-être pourriez-vous accélérer pendant une durée fixe, puis décélérer pendant une durée fixe, mais attendez d'arriver à la position exacte avant de commencer la décélération.

Justin L.
la source
Vous avez tout à fait raison pour que ce soit le cas pour le mouvement linéaire. Ma principale préoccupation était d'utiliser un algorithme comme celui-ci avec un moteur physique qui ne me fournit que le contrôle de lacet, de tangage et de roulis pour le couple. Ces axes ne sont pas orthogonaux une fois que vous commencez à tourner, alors j'espérais qu'il y avait une meilleure solution. Cependant, votre approche du calendrier s'appliquera quand même.
Karantza
Ah; désolé, je ne dois pas avoir compris votre question. Je ne suis pas sûr de pouvoir répondre de manière plus approfondie sans voir les spécifications de votre moteur. Mais il y a sûrement un moyen d'appliquer un couple constant dans une direction constante?
Justin L.
Oui, votre réponse est probablement aussi proche que possible. J'ai résolu mon problème particulier en piratant les quaternions jusqu'à ce que j'obtienne quelque chose auquel l'algorithme linéaire s'appliquerait. Merci!
Karantza