토크를 적용하여 방향 변경


9

공간에 자유롭게 떠 다니는 객체가 있다고 가정합니다. 이 객체가 향하고 싶은 벡터와 현재 향하고있는 방향을 나타내는 벡터가 있습니다. 이 두 가지에서 방향 변경을 나타내는 회전 (매트릭스, 쿼터니언 등)을 가져 와서 두 벡터를 정렬 할 수 있습니다.

물체에 토크를 적용 할 수있는 능력 (각속도의 파생) 만 있다면, 시간이 지남에 따라 토크를 적용하여 목적지를 오버 / 언더 링하지 않는 좋은 알고리즘은 무엇입니까?

(이 경우, 스러 스터를 사용하여 이동 방향으로 자동 방향을 조정하려는 우주선입니다. 롤은 관련이 없습니다.)


연료 사용 (총 토크 적용) 또는 속도를 최적화하려고합니까? 또한이 작업을 시작할 때 배가 제로 각속도로 출발합니까?
Justin L.

음, 속도를 최적화하는 것은 이웃 무한 가속을하는 것이고, 연료 사용을 최적화하는 것은 거의 제로 가속을하는 것입니다. 실제로, 나는 잘 보이는 트레이드 오프를 사용할 것입니다. 각속도 시작에 관해서는 자연스럽게 계산에 포함시킬 수 있기를 바랍니다.
Karantza

답변:


4

이것은 선형 가속에 대한 유사한 경우와 같이 처리 될 수 있습니다.

가장 먼저 알아 두어야 할 사항 : 선박은 각속도가 0으로 시작하기 때문에 각속도가 0으로 끝나기를 원하므로, 총 속도 변화가 0이어야합니다.

이것으로부터 우리는 시간에 따른 가속도의 적분이 0과 같아야 함을 알 수 있습니다. 음의 가속도가있을 때와 같이 "많은"양의 가속도가 있어야합니다.

따라서 솔루션은 무엇이든지이 속성으로 제한되어야합니다. "전체"가속 앞뒤로.

시간 경과에 따른 가속도의 모양은 다음과 같습니다.

시간 경과에 따른 가속도 그래프

이것을 살펴보면 가속이 가능한 많은 형태와 모양이 있습니다! 쉽고 간결한 답변을 제공하기 위해 원하는 가속 모양에 대해 몇 가지 가정을하겠습니다.

간단한 대답을 위해 가속은 앞으로, 뒤로 또는 0의 세 가지 상태 중 하나입니다. 전진 및 후진의 크기는 동일하며 상태를 즉시 전환 할 수 있습니다. (가속화가 점차적으로 증가하지 않습니다)

이 방정식을 사용하면 주어진 시간 동안 주어진 가속도에 대한 거리 변화를 찾을 수 있습니다.

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은 해안을 가속하고 나머지 1/3은 감속 할 수 있습니다. 또는 1/4, 해안 1/2, 1/4도 감속합니다.

또는 고정 된 시간 동안 가속 한 다음 고정 된 시간 동안 감속 할 수 있지만 감속을 시작하기 전에 정확한 위치에 도달 할 때까지 기다리십시오.


이것이 선형 모션의 경우에 대해 매우 정확합니다. 나의 주요 관심사는 토크에 대한 요, 피치 및 롤 제어만을 제공하는 물리 엔진에서 이와 같은 알고리즘을 사용하는 것이 었습니다. 일단 회전을 시작하면 그 축이 직교하지 않으므로 더 나은 해결책이 있기를 바랐습니다. 그러나 타이밍에 대한 접근 방식은 여전히 ​​관계없이 적용됩니다.
Karantza

아; 죄송합니다. 귀하의 질문을 이해하지 못했을 것입니다. 엔진 사양을 보지 않고도 더 철저히 대답 할 수 있는지 잘 모르겠습니다. 그러나 일정한 방향으로 일정한 토크를 적용하는 방법이 있습니까?
Justin L.

네 대답은 가능한 한 가깝습니다. 선형 알고리즘이 적용되는 것을 얻을 때까지 쿼터니언을 해킹하여 특정 문제를 해결했습니다. 감사!
Karantza
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.