Alterando a orientação aplicando torques

9

Suponha que você tenha um objeto flutuando livremente no espaço. Você tem um vetor para o qual deseja apontar esse objeto e um vetor que representa a direção em que está voltado. A partir desses dois, é possível obter a rotação (matriz, quaternion, qualquer que seja) que representa a mudança na orientação para alinhar os dois vetores.

Se você tem apenas a capacidade de aplicar torque (derivada da velocidade angular) ao seu objeto, o que é um bom algoritmo para aplicar o torque ao longo do tempo que não supera / ultrapassa o destino?

(Nesse caso, é uma nave espacial que deseja se orientar automaticamente na direção da viagem usando propulsores. Roll é irrelevante.)

Karantza
fonte
Você está tentando otimizar o uso de combustível (torque total exercido) ou a velocidade? Além disso, o navio está começando com velocidade angular zero no início desta operação?
Justin L.
Bem, otimizar a velocidade seria ter uma aceleração quase infinita, e otimizar o uso de combustível seria ter uma aceleração quase nula. Portanto, na prática, usarei um trade-off que pareça bom. Quanto ao início da velocidade angular, espero poder incluí-lo no cálculo naturalmente.
22410 Karantza

Respostas:

4

Isso pode ser tratado como no caso semelhante da aceleração linear.

Primeiro fato a ser observado: como o navio começa com uma velocidade angular de zero, e você deseja que ele termine com uma velocidade angular de zero, isso significa que a mudança total na velocidade deve ser igual a zero.

A partir disso, podemos ver que a integral da aceleração ao longo do tempo deve ser igual a zero - deve haver exatamente tanta aceleração positiva quanto a aceleração negativa.

Portanto, sua solução, seja ela qual for, deve ser restrita a essa propriedade: Aceleração "total" igual para frente e para trás.

Aqui está o seguinte o formato da sua aceleração ao longo do tempo:

Gráfico de aceleração ao longo do tempo

Olhando para isso, existem tantas formas e formatos possíveis em que sua aceleração pode estar! Vamos fazer algumas suposições para o formato de aceleração que você deseja, a fim de fornecer uma resposta fácil / concisa.

Por uma questão de resposta simples, terei a aceleração em um dos três estados: para frente, para trás ou zero. Para frente e para trás terão a mesma magnitude e os estados podem ser trocados instantaneamente. (não há aceleração gradual da aceleração)

Você pode encontrar a alteração na distância para uma determinada aceleração durante um determinado período de tempo com esta equação:

s = 0.5*a*t^2

A solução mais simples aqui seria acelerar até chegar ao ponto médio e desacelerar o resto do caminho.

Tomaremos Pcomo a distância total que você deseja mover:

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

Então, basicamente:

  1. Acelere em apara sqrt(P/a)unidades de tempo (unidades baseadas em suas unidades para aceleração)
  2. Desacelere na mesma magnitude pela mesma quantidade de tempo

Esta não é a única solução. Você chegará lá no menor tempo possível ( 2*sqrt(P/a)). Mas e se você quiser uma versão mais descontraída?

Nesse caso, você pode acelerar 1/3 do caminho, desacelerar pelo 1/3 e desacelerar o resto do terceiro. Ou 1/4 da costa por 1/2, desacelere 1/4 também.

Ou talvez você possa acelerar por um período fixo e, em seguida, desacelerar por um período fixo, mas espere até chegar à posição exata antes de começar a desacelerar.

Justin L.
fonte
Você está muito correto sobre este ser o caso do movimento linear. Minha principal preocupação era usar um algoritmo como esse com um mecanismo de física que só me fornece controle de guinada, inclinação e rotação do torque. Esses eixos não são ortogonais quando você começa a girar, então eu esperava que houvesse uma solução melhor. Sua abordagem ao tempo, no entanto, ainda será aplicada independentemente.
22410 Karantza
Ah; desculpe, não devo ter entendido sua pergunta. Não tenho certeza de que posso responder mais detalhadamente sem ver as especificações do seu mecanismo. Mas certamente existe uma maneira de aplicar torque constante em uma direção constante?
Justin L.
Sim, sua resposta provavelmente é o mais próxima possível. Resolvi meu problema em particular invadindo os quaternions até obter algo ao qual o algoritmo linear se aplicaria. Obrigado!
Karantza