Как стать автором
Обновить

Ну заяц погоди! Или противоракетная оборона для самых маленьких евреев и не только. Часть 2

Уровень сложностиПростой
Время на прочтение12 мин
Количество просмотров3.7K

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

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

Вопрос справедливый.  Если теперь мы посмотрим на нашу модель, то увидим, что, создавая модель волка в 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з_t) и предыдущим (Xз_{t-1}, Yз_{t-1}) дает нам возможность определить текущую скорость и направление движения.  (Зеленый вектор на рисунке Vз)

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

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

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

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

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

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

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

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

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

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

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

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

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

Рисунок 18. Модель системы наведения
Рисунок 18. Модель системы наведения

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

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

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

Рисунок 19. Анимация животных
Рисунок 19. Анимация животных

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

Рисунок 20. Улучшение перехвата
Рисунок 20. Улучшение перехвата

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

Дисклеймер для Моссада: я по специальности инженер-физик-ядерËньщик, и только американская коррупция сделала из меня быдлокодера (я об этом писал). 

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

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

F=m\cdot a

Где 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_0+a\cdot t^2=5+1\cdot2^2=9

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

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

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

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

где: \vec{g}- вектор ускорения свободного падения; \vec{F}-сила сопротивленя водуха.

\vec{F}=k\cdot v^2

где: v - скорость тела. k -коэффициент сопротивления воздуха.

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

Здесь: S – площадь лобового сопротивления снаряда; \rho – плотность воздуха;

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

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

a_x=-\frac{1}{2\cdot m}\cdot c\cdot S \cdot \rho\cdot v\cdot v_x \\ 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. Схема расчета ускорения по оси Х
Рисунок 25. Схема расчета ускорения по оси Х

Поясню модель:

В интеграторе 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_x

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

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

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

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

Рисунок 26. Траектория полета артеллерийского снаряда по одной координате
Рисунок 26. Траектория полета артеллерийского снаряда по одной координате

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

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

Добавляем -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. Перехват выстрела под углом 30 град
Рисунок 38. Перехват выстрела под углом 30 град

А если включить упреждение, то перехват цели при угле выстрела 30 градусов даже похож на видео из Израиля:

39. Перехват выстрела 30 град с упреждением!
39. Перехват выстрела 30 град с упреждением!

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

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

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

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

Теги:
Хабы:
Если эта публикация вас вдохновила и вы хотите поддержать автора — не стесняйтесь нажать на кнопку
Всего голосов 23: ↑19 и ↓4+21
Комментарии20

Публикации

Работа

Ближайшие события