Избегать движения по орбите


9

У меня есть ракета, которая преследует поведение, чтобы отследить (и попытаться ударить) ее (стационарную) цель.

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

введите описание изображения здесь

Я исправил это, сначала тангенциально ускорившись к цели , убив сначала тангенциальную составляющую скорости, а затем направившись к цели.

введите описание изображения здесь

Поэтому я ускоряюсь в -vT до тех пор, пока vT не достигнет почти 0. Затем ускоряюсь в направлении vN.

Хотя это работает, я ищу более элегантное решение, где ракета способна поразить цель без явного уничтожения тангенциального компонента.


Я не думаю, что вы можете получить удовлетворительный ответ, не объяснив, каков ваш алгоритм управления. Я уверен, что проблема заключается в вашей эвристике там.
Сэм Хоцевар

1
На самом деле, это был ответ, который я использовал
бобобо

Ответы:


5

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

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

Во время первой части полета он будет немного двигаться вправо от прямой линии на рисунке №2, но, пока он летит, двигатель обнулит этот компонент и в конечном итоге направится прямо к цели.

Обратите внимание, что в этом сценарии будет только один кадр, в котором двигатель отклоняется от нуля или максимума. Если бы вы отслеживали движущуюся цель, вы могли бы получать меньшие отклонения на каждом цикле при перемещении цели.


4

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

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

Вот демонстрация, которую я собрал в своей реализации (третья или четвертая ракета демонстрирует это, и снова в 1:05): http://www.youtube.com/watch?v=9uiGMC_nH2w

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

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


Это довольно круто. Я стремлюсь к максимальному ускорению, но замедление ракеты - это хитрый трюк (и его можно использовать, если вы называете их «ракетами с уловкой»?)
бобобобо

4

Интуиция

Вот один из способов: давайте повернем вашу диаграмму.

поворот оригинальной иллюстрации проблемы

Теперь ракета - это пушечное ядро !

физика

Он имеет фиксированное ускорение «вниз», то есть перпендикулярно вектору от места его стрельбы до цели. Я нарисовал его сверху пунктирной зеленой линией. Давайте назовем это опорным горизонтом . (Обратите внимание, что этот контрольный горизонт является постоянным! Ракета была запущена из фиксированного положения с фиксированным положением в качестве цели.)

Мы знаем (из Википедии ) для пушечного ядра без сопротивления воздуха, что d = v^2 * sin(2 * theta) / g, где

  • d горизонтальное пройденное расстояние (расстояние от места стрельбы до цели)
  • v скорость, с которой был выпущен снаряд
  • thetaесть угол относительно горизонта снаряда выстреливает ( угол направления вектора пожара от опорного горизонта )

Переставляя уравнение для gтрюков g = v^2 * sin(2 * theta) / d.

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

Что теперь?

Запустите это уравнение, gкогда вы запускаете ракету. Он скажет вам, насколько ускорить ракету перпендикулярно к контрольному горизонту, чтобы поразить цель. Поскольку направление этого ускорения постоянное, орбита не будет образовываться.

Boom.


Это аккуратный подход. Я думаю, что это заставит ракету проследить окружность , вы предоставляете центростремительную силу, необходимую для орбиты окружности, которая оказывает воздействие на цель. Я полагаю, что именно этот подход использовался для красных раковин в Mario Kart , потому что я всегда думал, что они имеют тенденцию к дуге по кругу
бобобобо

Применяемая здесь сила не является центростремительной. Направление силы перпендикулярно к опорному горизонту, который не меняется , если цель находится в неподвижном состоянии . Это означает, что поведение на орбите не может произойти.
Анко

Я отредактировал ответ, чтобы прояснить ситуацию.
Анко

@Anko: Я не уверен, что ваша математика здесь работает для движущейся цели, что, кажется, является триггером для дела ОП.
Mooing Duck

@ Mooing Вы правы, это будет работать только для движущихся целей, если они движутся предсказуемо и вы нацеливаетесь на прогноз. Вопрос , в частности, упоминает, что цель является стационарной, хотя в первом предложении.
Анко
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.