Это очень сложная проблема о том, как маневрировать космический корабль, который может транслироваться и вращаться в 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, используя минимальное количество шагов времени.
Ответ на этот самый простой альтернативный вопрос можно считать полезным.


