Расчет толчков для смещенных положений движителей с учетом произвольных движителей в произвольном положении вокруг массы - PullRequest
3 голосов
/ 28 января 2012

Я немного понюхал в Google, чтобы найти решение, но я считаю, что моя терминология неверна, поэтому потерпите меня здесь.

Я работаю над простой игрой, в которой люди могут строить упрощенные космические корабли и произвольно размещать двигатели над космическим кораблем.

Давайте назовем, скажем, центр масс моего космического корабля V.

Космический корабль имеет произвольное количество движителей в произвольных положениях с произвольными векторами направления тяги с произвольным зажимом.

У меня есть входной вектор угловой скорости (обозначение угла / оси) и мировая скорость (вектор), по которой я хочу, чтобы корабль "шел".

Как бы рассчитать идеальную тягу для каждого из подруливающих устройств, чтобы корабль разгонялся до желаемых скоростей?

Мое текущее решение хорошо работает для равномерно расположенных двигателей. По сути, я просто ставлю желаемую скорость на двигатели, нормальные для линейной скорости. В то время как для угловой скорости я просто пересекаю угловую скорость положением подруливающих устройств и делю результирующую скорость смещения на нормальную подруливающую силу. Конечно, если есть двигатели, у которых нет зеркального отображения на противоположной стороне центра масс, это приведет к нежелательной силе.

Как я уже сказал, я думаю, что это должна быть довольно хорошо задокументированная проблема, но я могу просто искать неправильную терминологию.

1 Ответ

2 голосов
/ 28 января 2012

Я думаю, вы можете разбить это на две части.Первый - это решить, каким должно быть ваше ускорение в каждом кадре, исходя из вашей текущей и желаемой скорости.Простое правило для этого

acceleration = k * (desired velocity - current velocity)

, где k - константа, определяющая, насколько «отзывчива» система.Другими словами, если вы идете слишком медленно, ускоряйтесь (положительное ускорение), и если вы идете слишком быстро, замедляйтесь (отрицательное ускорение).

Вторая часть немного сложнее визуализировать;Вы должны выяснить, какая комбинация движителей дает вам желаемое ускорение.Давайте назовем c_i количество, которое толкает каждый двигатель.Вы хотите решить систему связанных уравнений

sum( c_i * thrust_i ) = mass * linear acceleration
sum( c_i * thrust_i X position_i) = moment of interia * angular acceleration

, где X - кросс-продукт.Моя физика может быть немного не в порядке, но я думаю, что это правильно.

Это уравнение из 6 уравнений (в 3D) и N неизвестных, где N - это число симметров, но у вас есть дополнительное ограничение, котороеc_i> 0 (при условии, что двигатели не могут толкать назад).

Это сложная проблема, но вы должны иметь возможность установить ее как LCP и получить ответ, используяПрогнозируемый метод Гаусса Зейделя.Вам не нужно получать точный ответ, просто что-то близкое, так как вы будете решать его снова для немного других значений в следующем кадре.

Надеюсь, это поможет ...

...