Это очень сложная проблема о том, как маневрировать космический корабль, который может транслироваться и вращаться в 3D, для космической игры.
В космическом корабле есть стрелы n
, размещающиеся в разных положениях и направлениях.
Трансформация i
-ной струи относительно КМ космического корабля постоянна = Ti
.
- Transformation является кортежем положения и ориентации (кватернион или матрица 3x3 или, что менее желательно, углы Эйлера).
- Преобразование также может быть обозначено одной матрицей 4x4.
Другими словами, вся струя приклеивается к кораблю и не может вращаться.
Струя может приложить силу к космическому кораблю только в направлении его оси (зеленый).
В результате клей ось вращается вместе с космическим кораблем.
Все струи могут приложить силу (вектор, Fi
) на определенной величине (скаляр, Fi
): i
-ная струя может приложить силу (Fi
= axis
x Fi
) только в пределах диапазона min_i<= fi <=max_i
.
Оба min_i
и max_i
являются постоянными с известным значением.
Чтобы быть ясным, единица min_i
, Fi
, max_i
- Ньютон.
Пример Если диапазон не охватывает 0, это означает, что струя не может быть отключена.
Масса космического корабля = m
и тензор инерции = i
.
Трансформация тока космического корабля = Tran0
, скорость = V0
, угловая Velocity = W0
.
Физическое тело космического корабля следует известным физическим правилам: - Torque=r x F
F=ma
angularAcceleration = I^-1 x Torque
linearAcceleration = m^-1 x F
i
отличается для каждого направления, но для простоты оно имеет одинаковое значение для каждого направления (сферического). Таким образом, i
можно рассматривать как скаляр вместо матрицы 3x3.
Вопрос
Как управлять всеми форсунками (все Fi
) для посадки корабля с позицией = 0 и углом = 0?
Математическая спецификация: Найдите функцию fi(time)
, которая занимает минимальное время, чтобы достичь position=(0,0,0)
, orient=identity
с окончательным angularVelocity
и velocity
= zero.
В частности, что такое имена техники или связанные алгоритмы для решения этой проблемы?
Мои исследования (1 измерение)
Если юниверс 1D (таким образом, нет вращения), проблема будет легко решить.
(Спасибо Gavin Lock, qaru.site/info/177219/...)
Сначала найдите значение MIN_BURN=sum{min_i}/m
и MAX_BURN=sum{max_i}/m
.
Во-вторых, подумайте наоборот, предположите, что x=0
(позиция) и v=0
в t=0
,
затем создайте две параболы с x''=MIN_BURN
и x''=MAX_BURN
.
(Вторая производная считается постоянной в течение некоторого периода времени, поэтому она является параболой.)
Единственная оставшаяся работа - объединить две параболы вместе.
Красная линия штрихов - это то, где они соединяются.
За период времени x''=MAX_BURN
все fi=max_i
.
За период времени x''=MIN_BURN
все fi=min_i
.
Он отлично работает для 1D, но в 3D проблема намного сложнее.
Примечание:
Просто грубый путеводитель, указывающий на правильное направление, действительно оценен.
Мне не нужен совершенный ИИ, например. это может занять немного больше времени, чем оптимально.
Я думаю об этом в течение более 1 недели, до сих пор не нашел подсказки.
Другие попытки/мнения
- Я не думаю, что машинное обучение, например нейронная сеть, подходит для этого случая.
- Оптимизация с ограниченным ограничением по методу наименьших квадратов может быть полезна, но я не знаю, как подогнать две мои гиперпараболы к этой форме проблемы.
- Это можно решить, используя множество итераций, но как?
- Я искал сайт НАСА, но не нашел ничего полезного.
- Функция может существовать в игре "Космический инженер".
- Комментирует Логман: Знания в области машиностроения могут помочь.
- Комментирует AndyG: Это проблема планирования движения с неголономные ограничения. Это можно решить с помощью Быстрое исследование случайного дерева (RRT), теория вокруг Уравнение Ляпунова и Линейный квадратичный регулятор.
- Комментирует Джон Коулман: Это больше похоже на оптимальный контроль, чем AI.
Изменить: "Приблизительное предположение" (необязательно)
- В большинстве случаев AI (для разработки) выполняется непрерывно (т.е. вызывается каждый шаг времени).
- Таким образом, при настройке AI
Tran0
обычно является почти идентичным,V0
иW0
обычно не сильно отличаются от 0, например.|Seta0|<30 degree
,|W0|<5 degree per time-step
. - Я думаю, что ИИ, основанный на этом предположении, будет работать нормально в большинстве случаев. Хотя это и не идеально, его можно рассматривать как правильное решение (я начал думать, что без этого предположения этот вопрос может быть слишком сложным).
- Я слабо чувствую, что это предположение может позволить некоторые трюки, которые используют некоторую "линейную" -приближение.
Второй альтернативный вопрос - "Настроить 12 переменных" (проще)
Вышеупомянутый вопрос также может быть рассмотрен следующим образом: -
Я хочу настроить все шесть values
и шесть values'
(1-й производный) на 0, используя минимальное количество шагов времени.
Вот таблица показывает возможную ситуацию, с которой может столкнуться AI: -
Таблица Множитель хранит inertia^-1 * r
и mass^-1
из исходного вопроса.
Множитель и Диапазон являются постоянными.
При каждом тайм-ауте ИИ будет предложено выбрать кортеж значений Fi
, который должен находиться в диапазоне [min_i,max_i]
для каждого i+1
-th jet.
Пример Из таблицы AI может выбрать (f0=1,f1=0.1,f2=-1)
.
Затем вызывающая сторона будет использовать Fi
для умножения на таблицу Множитель, чтобы получить values''
. Px'' = f0*0.2+f1*0.0+f2*0.7
Py'' = f0*0.3-f1*0.9-f2*0.6
Pz'' = ....................
SetaX''= ....................
SetaY''= ....................
SetaZ''= f0*0.0+f1*0.0+f2*5.0
После этого вызывающий абонент обновит все values'
формулой values' += values''
. Px' += Px''
.................
SetaZ' += SetaZ''
Наконец, вызывающий абонент обновит все values
формулой values += values'
. Px += Px'
.................
SetaZ += SetaZ'
AI будет запрашиваться только один раз для каждого временного шага.
Цель AI - вернуть кортежи Fi
(могут быть разными для разных временных шагов), сделать Px
, Py
, Pz
, SetaX
, SetaY
, SetaZ
, Px'
, Py'
, Pz'
, SetaX'
, SetaY'
, SetaZ'
= 0 (или очень близко),
используя минимальное количество шагов времени.
Надеюсь, что предоставление другого взгляда на проблему упростит. Это не такая же проблема, но я считаю, что решение, которое может решить эту версию, может приблизиться к ответу на исходный вопрос.
Ответ на этот альтернативный вопрос может быть очень полезным.
Третий альтернативный вопрос - "Tune 6 Variables" (самый простой)
Это упрощенная версия с потерями предыдущей альтернативы.
Единственное отличие состоит в том, что мир теперь 2D, Fi
также 2D (x, y).
Таким образом, я должен настраивать только Px
, Py
, SetaZ
, Px'
, Py'
, SetaZ'
= 0, используя минимальное количество шагов времени.
Ответ на этот самый простой альтернативный вопрос можно считать полезным.