Использование Unity для физического моделирования управления вектором тяги в ракетах.

Основное введение

вступление

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

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

TVC теперь становится реальным и в масштабе хобби. Такие люди, как Джо Барнард из bps.space, создали миниатюрные версии таких ракет, в которых используются небольшие системы TVC для управления ракетой и даже приземления. Это своего рода то, что мы будем моделировать сегодня.

Единство

Мы будем использовать Unity, так как это очень простой в использовании движок, в котором уже есть большинство всех физических компонентов. Для этого проекта я буду использовать Unity 2020.1.1f1, и мы будем программировать все это на C# (я предпочитаю VS, но Unity поставляется с MonoDevelop).

Давайте начнем!

Для начала я собираюсь начать с нового 3D-проекта, никаких пакетов не требуется. Я начну с создания нашей Ракеты, которая будет прославленным цилиндром с ногами:

Затем мы можем сделать настоящий «мотор», который будет другим (но меньшим цилиндром, который не является дочерним элементом корпуса ракеты):

Теперь давайте начнем на самом деле делать вещи. Я начал с того, что сделал план под ракетой, чтобы она служила площадкой для запуска (и, конечно же, для падения). Затем я удалил коллайдер из мотора и добавил твердое тело, установив массу на 0,1 и заблокировав его от вращения вокруг оси Y (Крен — это собственное испытание, требующее таких вещей, как кватернионы и матрицы вращения). Затем я добавил жесткое тело к основному корпусу ракеты, оставив все по умолчанию и снова заблокировав его вращение по оси Y. Возвращаясь к двигателю, я добавил настраиваемое соединение, которое будет служить физической связью между ним и ракета. Я оставил все по умолчанию, но изменил анкер шарнира на анкер нижней задней части корпуса Ракеты и ограничил его вращение по X и Z всего на 10 градусов от нуля, и, конечно же, заблокировал его от вращения по Y. .

Сценарии

Чтобы наша Ракета действительно что-то делала, нам нужно ее запрограммировать! Давайте начнем с того, что создадим реальный сценарий управления, вещь, которая будет вычислять и выполнять движение мотора.

Я решил использовать ПИД или пропорционально-интегрально-производную. ПИД-регулятор представляет собой трехфазный регулятор, который использует умную математику для модуляции исходных коэффициентов для расчета наилучшего результата. Скрипт, который я сделал, является форком Коула от Delta Space Systems, переделанным для работы в Unity и на C#.

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

Сначала ставим наш Мотор как игровой объект, потом можем игнорировать нужные (убедитесь, что это нули) и поля смещения. Теперь мы подходим к трем нижним полям, которые содержат фактические значения P-I-D, которые нам нужны. Многие ПИД-системы требуют их настройки, слегка изменяя числа, пока вы не получите желаемый результат, но если оставить все на 0,1, то это будет достаточно хорошо для базового теста.

Теперь, прежде чем мы начнем играть и тестировать, я хочу добавить некоторые функции, чтобы сделать это более приятным. Некоторые вещи, которые я хочу добавить, - это основные показатели высоты ракеты, информация о двигателе (в будущем я хочу сделать интеллектуальное дросселирование), а также управление беспорядком внутри.

Теперь это дает нам приличный пользовательский интерфейс и некоторые интересные функции, которые выглядят так:

Примечание: нижний элемент изображения — это текстура рендера, поэтому мы можем видеть движение мотора.

Теперь, когда мы запустим его, наша ракета (надеюсь) попытается управлять сама собой.

Используя наш пользовательский интерфейс, мы можем видеть состояние и высоту двигателя, а также модулировать тягу с помощью предоставленного ползунка!

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

Идти дальше

В будущем будет следующая статья, объясняющая настройку и расширение на этой базе.

Если вы хотите настроить свою систему (рекомендуется), эта статья поможет