Введение

Продолжение статьи, созданной в процессе решения задачи о погоне, для школьников. Очков Валерий Федорович, предложил мне решить методом структурного моделирования задачу погони волка за зайцем. И в первой части именно эта задача подробно и разобрана. Многие читатели справедливо спрашивали, а причем здесь евреи и ракеты?  В этой части я покажу, как можно связать школьную задачу про бегающего по кругу зайца с волком с израильской противоракетной обороной. 

Причем здесь противоракетная оборона?

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

Получилось, как в старом советском анекдоте про несунов с завода:

Беременная жена говорит мужу:

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

Подходит время рожать, жена спрашивает 

- Ну как, 8 месяцев прошло, ты все детали вынес с завода? Будет коляска?

- Давно уже все детали в гараже, только вот как я ни собираю, все равно получается пулемет.  

Так же и с нашей моделью: решали задачу с зайцем, получили ракету-перехватчик. Если мы сейчас соберем в отельный блок алгоритмы наведения волка на зайца, то наша структурная схема будет полностью повторять верхний уровень любой системы управления ракеты ПВО.

В самом деле у нас есть:

  • цель с ее положением в пространстве — это заяц. 

  • перехватчик (волк) со своими характеристиками, в нашем простейшем случае – это скорость.

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

Рисунок 1. Схема задачи перехватчика
Рисунок 1. Схема задачи перехватчика

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

Раз у нас получилось похоже на перехватчик, давайте поменяем алгоритм так, чтобы волк быстрее перехватывал «зайца», до того, как он поразит объект на поверхности. Как видим из графика, перехват не получился. В самом деле, если считать, что Y= 0 это уровень, на котором расположены все моделируемые объекты. В самом деле, если поставить расчет на паузу в момент, когда ракета пресекает уровень поверхности Y= 0, то перехватчик находится на расстоянии 35 метров. 

Рисунок 2. Момент поражения цели.
Рисунок 2. Момент поражения цели.

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

На схемном окне есть кнопка «Менеджер данных…», нажимаем на нее и добавляем новую категорию и новое окно анимации:

Рисунок 3. Добавим анимации
Рисунок 3. Добавим анимации

Появляется новое окно, в котором мы будем рисовать зайца и волка в процессе моделирования. Черех кнопку «Менеджер данных…», это окно можно будет вызвать в любой момент создания модели или расчета.

 В главном окне программы есть кнопка, которая вызывает «Панель примитивов», где мы можем вызвать инструменты для рисования.

Рисунок 4. Вызов панели графических примитивов
Рисунок 4. Вызов панели графических примитивов

Собрал Ротшильд английских ученых: математика-статистика, биолога-генетика, и физика-теоретика. И поставил задачу: вот вам каждому грант по 1 млн баксов. Хочу в скачках участвовать, и чтобы моя лошадь победила в королевском дерби. Как мне получить такую лошадь? Через год приходите с проектом:

Математик: Денег мало, но смогли. Мы исследовали статистику за 200 лет соревнований по конному спорту, все проанализировали. Нужно купить лошадь такого года, чтобы она пять лет побеждала в следующих соревнованиях (вот тут список), и нанять жокея, который побеждал в соревнования по списку, и тогда через 5 лет с вероятностью 10% они победят в королевском дерби.

Биолог-генетик: Денег совсем мало, но мы провели исследования и, если скрестить три линии вот этих скакунов, победителей соревнований в течение 5 лет, то потомство с вероятностью 20% победит.

Физик: Денег совсем мало, но я создал модель шарового коня в вакууме!

 Вот и мы будем создавать модель шарового волка и зайца в вакууме.

Берем с панели заполоненный кружочек, ставим на окно анимации – это будет модель шарового зайца в вакууме. Таким же кружочком будем обозначать волка. Чтобы их отличать в языке программирования, поменяем имя кружочков по умолчанию Hare и Wolf и их цвет.

Рисунок 5. Создание шарового волка и шарового заца
Рисунок 5. Создание шарового волка и шарового заца

Чтобы в систему анимации передавать значения положения из модели нам необходимо в проект добавить сигналы. В главном меню в главном окне выбираем «Сервис / Сигналы» И в окне добавляем два сигнала для позиции волка и зайца. Тип данных у нас будет точка.

Рисунок 6.  Создание сигналов с позициями
Рисунок 6. Создание сигналов с позициями

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

Рисунок 7. Забираем значение сигналовиз модели
Рисунок 7. Забираем значение сигналовиз модели

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

Рисунок 8. Вызов окна редактирование скрипта
Рисунок 8. Вызов окна редактирование скрипта

Сам скрипт с пояснениями приведен на следующем рисунке:

Рисунок 9. Скрипт оживления зайца с волком
Рисунок 9. Скрипт оживления зайца с волком

Если сейчас запустить на расчет, то мы увидим фигню: мало того, что кружочки разлетелись на большем поле, но и движение их по оси Y противоположно заданному.

Рисунок 10. Заяц с волком бегут не туда!
Рисунок 10. Заяц с волком бегут не туда!

 Дело в том, что рисование направлений осей в окне анимации соответствует принятому в Windows, где ось Y направлена вниз. Поэтому, чтобы получить более удобное окно, нужно выполнить масштабирование сигналов. Для этого ставим на схему векторный усилитель с коэффициентом 0.3 для оси X и – 0.3 для оси Y. Это позволит сократить радиус в окне анимации, по которому бегает заяц. А значит, окно можно сделать меньше.

Рисунок 11. Отмасштабированное поле
Рисунок 11. Отмасштабированное поле

Шаровые модели зайца и волка — это хорошо, но хотелось бы еще видеть траектории. Поэтому добавим в окно анимации еще три элемента: две полилинии, которые будут отображать траектории движения цели (зайца) и перехватчика (волка), и одну линию – прицеливания. 

Рисунок 12. Траектории с окне анимации
Рисунок 12. Траектории с окне анимации

Меняем Имя объекта для полилиний - WolfTrace и HareTrace и Direction для линии.

Теперь у нас есть объекты, которые можно использовать для анимации.

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

Рисунок 13. Настраиваем траектории для начала расчета
Рисунок 13. Настраиваем траектории для начала расчета

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

Рисунок 14. Добавляем точек в траекторию зайца
Рисунок 14. Добавляем точек в траекторию зайца

Если все сделано правильно, то после запуска в окне анимации отражаются траектории движения цели (зайца) и перехватчика (волка), и линия направления, по которой формируется управления перехватчиком.

Рисунок 15. Анимировааные животные в поле
Рисунок 15. Анимировааные животные в поле

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

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

Рисунок 16. Волк системой наведения.
Рисунок 16. Волк системой наведения.

Как нам улучшить перхват?

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

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

Рисунок 17. Схема навеедения с упреждением
Рисунок 17. Схема навеедения с упреждением

Чтобы определить скорость и направления движения, нам достаточно на каждом временном шаге знать предыдущее положение цели, например, 1 секунду назад. Тогда разница между текущим положением цели  (Xзt, Yзi) и предыдущим (Xзt-1, Yзi-1) дает нам возможность определить текущую скорость и направление движения.  (Зеленый вектор на рисунке Vз)

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

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

Чем дальше мы от цели, тем больше времени нам нужно, чтобы ее достигнуть, и тем дальше она успеет уйти от текущего положения. В качестве первого приближения текущего положения цели мы можем взять время t, которое необходимо перехватчику до текущего положения цели. Это время можно получить, разделив расстояние до цели D на скорость волка t = D/Vв. 

Насколько точка переместится к цели через время t, рассчитывается путем умножения скорости цели на время  ΔD = Vз * t.

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

Алгоритм последовательности можно описать так:

1)        Текущую скорость цели Vз

2)        Расстояние до цели В

3)        Время, необходимое для достижения текущего положения цели

4)         Упреждение – расстояния, где будет цель через это время.

5)        Добавляем к текущему положению упреждения, получаем точку прицеливания

6)        Используем точку прицеливания для расчета направления движения!

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

Рисунок 18. Наведение с упреждением
Рисунок 18. Наведение с упреждением

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

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

Запускаем на расчет и видим значительное улучшение параметров перехвата. Прямо со старта перехватчик направляется не к цели параллельно земле, а под углом к горизонту

Рисунок 19. Прицел с упреждением
Рисунок 19. Прицел с упреждением

И перехват осуществляется значительно быстрее:

Рисунок 20. Перехват волком зайца
Рисунок 20. Перехват волком зайца

С новой системой наведения волк ловит зайца за 139 секунд.

А причем здесь евреи?

Давайте честно, кончено на графиках анимация действительно похожа на перехват цели, но параметры все-таки из мира животных, причем шаровых животных в вакууме. А что будет, если скорости и параметры цели будут как у реальных ракетных систем? Сработает ли система наведения, если мы запустим не шарового коня в вакууме по кругу, а артиллерийский снаряд по баллистической траектории? У меня-таки есть ответ на этот вопрос. И евреи здесь совсем даже причем. Рассмотрим израильскую систему Купол, которая умеет перехватывать артиллерийские снаряды 155 мм.  Именно в Израиле используют дорогие ракеты для перехвата дешёвых артелерийских снарядов. 

Дисклеймер для Моссада: я по специальности инженер-физик-ядерËньщик, и только американская коррупция сделала из меня быдлокодера (я об этом писал). Поэтому никаких реальных алгоритмов наведения я не знаю. Алгоритм, описанный в статье, я лично сам выдумал, зуб даю, а как на самом деле работает Купол я в душе не ебу!

Так как данный текст мы пишем для самых маленьких, то обратимся к школьной программе, вспомнив закон Ньютона из школьной физики:

F=m\cdot a

Где а - ускорение, m - массы, F - сила. Поэтому ускорение можно записать как:

a =\frac{F}{m}

Вспомним также из школьной программы, как расстояние зависит от ускорения и времени, если ускорение постояннное: 

S = S_0+a\cdot t^2

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

Смоделируем ситуацию: объект массой 1 кг движется со скоростью 1 м/с, сначала у нас нет никакой силы, а потом на 5 секунде появится сила F = 1 Н. 

Зададим F = 1, и m = 1 в глобальных переменных. Используем их в блоке структурной схемы  - «ступенька», который будет выдавать 0 в течение 5 секунд, а после 5 секунд выдаст нам a = F/m =1. Это и будет ускорение. 

Рисунок 21. Илюстрации закона Ньютона
Рисунок 21. Илюстрации закона Ньютона

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

Рисунок 22. Настроцка ускорения
Рисунок 22. Настроцка ускорения

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

Смотрим на график и видим, что модель отвечает законам мироздания, о которых нам рассказывали в школе:

Рисунок 23. Расчет перемещения под действием силы
Рисунок 23. Расчет перемещения под действием силы

В течение первых 5 секунд скорость не меняется (зеленая линия), и наш объект движется равномерно cо скоростью 1, и за 5 секунд проходит 5 метров (красная линия). 

Затем появляется сила, которая создает ускорение = 1, и мы видим, как скорость начинает расти через 2 секунды после появления силы (7 секунда расчета), скорость 1 + 2 = 3, а расстояние, пройденное после за 2 секунды, также отвечает уравнению:

S=S_o+ a\cdot t^2=5+1\cdot 2^2=9

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

Дисклеймер для ФСБ: как летают артиллерийские снаряды я тоже не знаю, вся дальнейшая информация взята из статьи «Полёт тел в стратосфере (Дальнобойная артиллерия)», автор Благовещенский̆ Владимир Валерьевич.

Рассмотрим артиллерийский снаряд. Движение тела по баллистической траектории можно описать формулой Ньютона: 

m\cdot\vec{a}=m\cdot \vec {g}+\vec{F}

Где: m – масса снаряда; \vec{g} - вектро ускорения свободного падения, \vec{F} - сила сопротивления воздуха

\vec{F} = k\cdot v^2 где: v- скорость тела.  k - коэффициент сопротивления воздуха.

k=\frac{1}{2}\cdot c\cdot \rho\cdot S

где: c - коэффициент лобового сопротивления, S - площадь лобового сечения снаряда, \rho - плотность воздуха.

Таким образом общая формула движения снарядв будет выглядеть так:

m\cdot \vec{a}=m\cdot\vec{g} -\frac{1}{2}\cdot c\cdot \rho\cdot S\cdot v\cdot \vec{v}

Разложим пространственный вектор на два слагаемых по осям х и у:

a_x=-\frac{1}{2\cdot m}\cdot c\cdot S\cdot \rho\cdot v\cdot v_хa_y =-g-\frac{1}{2\cdot m}\cdot c\cdot S\cdot\rho\cdot v\cdot v_y

где: v=\sqrt{v_x^2+v_y^2}

Повторим уравнение с двумя интеграторам для a_x и a_y

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

Создадим новый проект и в глобальном скрипте добавим параметры снаряда

Рисунок 24. Параметры снаряда
Рисунок 24. Параметры снаряда

Сначала соберем уравнения для движения по оси x. Примем, что скорость по оси Y равна скорости по оси Y и высота полета 1 м. Тогда у меня получается примерно такая структурная модель. В качестве пояснения я подписываю, какие вычисления выполняются в блоках и какие результаты получаются.

Рисунок 25. Модель движение снарядоа по оси x
Рисунок 25. Модель движение снарядоа по оси x

В интеграторе 1, который получает ускорение, задаем в качестве начальных условий скорость по оси X -  [v*cos(alpha)]. Пока нет модели движения по оси Y, используем скорость по Vх вместо Vy в блоке возведения в квадрат 2. В блок усилитель 3 заносим все постоянные коэффициенты - c*S/2/m.Плотность по высоте считается специальным блоком атмосфера. Принимаем, что высота 1 метр. В итоге у нас получается необходимое выражение для ускорения:

a_x=-\frac{1}{2\cdot m}\cdot c\cdot S\cdot \rho\cdot v\cdot v_х

Которое умножается на -1, и подается на вход интегратора 1. Первый интегратор рассчитывает текущую скорость, следующий интегратор по скорости рассчитывает расстояние.  Добавляем графики расстояния и скорости по Х.

Запускаем на расчет и убеждаемся, что скорость падает по квадратичному закону (сила сопротивления воздуха действует!): чем выше скорость, тем больше сила сопротивления, и тем быстрее замедляется снаряд.

Видим, что расстояние увеличивается медленней при замедлении снаряда.

Законы физики соблюдаются! Ньютон был бы доволен!

Рисунок 26. Скорость и траектороия по оси Х
Рисунок 26. Скорость и траектороия по оси Х

Перейдем к формуле для ускорения по оси Y. Здесь практически все тоже самое. Добавляется сила тяжести F= m*g. В формуле ускорения после сокращения на массу, от нее остается – g.   

Добавляем -g, как постоянный источник к силе трения, и теперь можем использовать высоту Y и скорость Vy.

Добавляем на схему вычисления пути ускорения по оси Y, также фазовый портрет для отображения траектории полета и блок остановки расчета (в момент времени, когда у нас высота = 1 метр, считаем, что снаряд прилетел.)

У меня получилась такая схема:

Рисунок 27. Уравнение движения по Х и У
Рисунок 27. Уравнение движения по Х и У

И вспоминаем, что в линии может быть не одно число, вектор. Мы можем вместо отдельного расчета Х и У объединить их в одну схему. Тогда интеграторы одновременно рассчитывают скорость и ускорение по оси Х и Y. Например, вот так выглядят свойства первого интегратора, обеспечивающего расчет скорости, где задаются начальные условия для выстрела.

Рисунок 28. Настройка интеграторов
Рисунок 28. Настройка интеграторов

 Формулы расчета ускорения по осям у нас отличаются только наличием силы тяжести, поэтому общая модель полета снаряда у меня получилась вот такого вида:

Рисунок 29. Расчте полета снаряда в вектроной форме
Рисунок 29. Расчте полета снаряда в вектроной форме

Запускаем на расчет:

Рисунок 30 полет снаряда!
Рисунок 30 полет снаряда!

И видим, что результат совпадает с траекторией из исходной статьи.

Упакуем нашу модель в отдельный блок-субструктуру, которая будет выдавать на позицию снаряда.

Рисунок 31. Упаковка снаряда
Рисунок 31. Упаковка снаряда

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

 Так просто, копи пастом, заяц превращается в снаряд дальнобойной артиллерии.

Рисунок 32. Снаряд вместо зайца
Рисунок 32. Снаряд вместо зайца

Конечно, нужно добавить параметры снаряда в окно глобальных переменных, а также увеличить скорость волка до скорости ракеты-перехватчика системы купол – 700 м/с.

Ну, и для того, чтобы анимация работала, нужно уменьшить масштаб до 0.006

Рисунок 33. Провращаем волка в зенитную ракету
Рисунок 33. Провращаем волка в зенитную ракету

А теперь запускаем на расчет в режиме прицеливания без упреждения:

Рисунок 34. Расчет без упреждения
Рисунок 34. Расчет без упреждения

При угле выстрела 45 град. перехват не осуществлен! Снаряд пробил купол!

Рисунок 35. Перхват без упреждения
Рисунок 35. Перхват без упреждения

Замыкаем ключ, включая систему наведения в режим работы с упреждением. И система наведения срабатывает – перехват снаряда осуществлён.

Рисунок 36. Переключение в режим перехвата с упреждением
Рисунок 36. Переключение в режим перехвата с упреждением
Рисунок 37. Перхват снаряда осуществлен
Рисунок 37. Перхват снаряда осуществлен

Кстати, при стрельбе с углом 30% перехватчик успевает сбить снаряд даже с наведением по снаряду:

Рисунок 38. Перехват без упреждения
Рисунок 38. Перехват без упреждения

И хотя у нас практические честно моделируется только полет снаряда, а перехватчик – все тот же шаровой волк в вакууме. Но это не мешает нам получать удовольствие от структурного моделирования в среде SimInTech.

Рисунок 39. Перехова с упреждением
Рисунок 39. Перехова с упреждением

Модель можно взять здесь…

А я пошел собирать модель полета на Луну.

Подписываетесь на канал Технолог Петухов там без цензуры про моделирование импортозамещение и разработку систем САЕ

Комментарии (3)


  1. nikolz
    10.02.2025 03:12

    я по специальности инженер-физик.

    ....

    Купол я в душе не ебу!

    Так как данный текст мы пишем для самых маленьких

    Все верно? Вы этим гордитесь?


  1. prinv
    10.02.2025 03:12

    Я правильно понимаю, что в модели ракета-перехватчик летит быстрее снаряда, да ещё на таких скоростях ухитряется совершать головокружительные манёвры?


  1. Javian
    10.02.2025 03:12

    Использование "Перхват" в тексте это опечатки или шутка юмора?