Comments 6
Простите за интимный вопрос, но почему "Союз" у вас стыкуется с неэрегированной штангой стыковочного механизма? А то она обычно выдвигается в состояние боевой готовности (около метра) через несколько минут после вывода на орбиту и дальше корабль так и летит с шашкой наголо.
Момент это векторное произведение радиус вектра на вектор силы. А у вас наоборот, что даёт не вектор момента, а вектор ему противоположный
Мне не хотелось изобретать велосипед для решения задач линейного программирования, поэтому мой выбор пал на коммерческий решатель Gurobi. Если честно, это единственная библиотечка, которую мне удалось завести в Unity (и то под виндой). Изначально выбор пал на OR‑Tools, но после долгих мучений пришлось бросить эту затею. Ну да ладно.
А ALGLIB не пробовали? ALGLIB мультиплатформенный, у него есть родная .NET версия, а для задач линейного программирования ALGLIB будет работать быстрее чем GLPK и примерно сравним по скорости с HiGHS. Тут же небольшая задача (всего 28 двигателей), а Gurobi он ленивый, так что это будет не самое эффективное решение из-за накладных расходов конкретно этого солвера (он показывает хорошие результаты для очень сложных и больших по размерности задач, а для небольших задач он по производительности может даже GLPK уступать).
Я пробовал использовать ПИД-регулятор, но затухающие колебания вокруг цели выглядели, на мой взгляд, некрасиво.
Перерегулирование — уменьшать пропорциональный коэффициент, увеличивать дифференцирующая составляющая (уменьшает колебания и не дает уходить от целевого значения). Но вообще да, ПИД-регулятор он, конечно же, неоптимальный (тут подошло бы что-то типа LQR-контроллеров)
Стыковка космических аппаратов в Unity