Имитация набора самолетов в Эрланге - PullRequest
1 голос
/ 08 мая 2009

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

Эта работа ведется на Эрланге, и мне нужно построить систему предотвращения движения и столкновения самолетов

Моя проблема: как моделировать траекторию полета самолета с учетом скорости? Я думал об использовании процесса ...

У кого-нибудь есть идеи?

С наилучшими пожеланиями.

Ответы [ 6 ]

4 голосов
/ 20 мая 2009

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

FlightGear , например, обеспечивает поддержку узлов трафика AI, а также нескольких клиентов, подключенных в многопользовательском режиме. Ссылаясь на более раннюю концепцию использования родительского процесса в качестве «мирового» процесса и наличия любого количества клиентских процессов, эмулирующих летательный аппарат, многопользовательский сервер будет мировым процессом.

Итак, в вашем конкретном случае компонент трафика AI в FlightGear выглядит особенно актуально, поскольку он показывает, как 4D-траектории вычисляются и предоставляются другим клиентам. В основном, в FlightGear используется центральный сервер fgms (FlightGear Multiplayer Server), который в основном отправляет широту / долготу, высоту (включая скорости и ориентацию) другим клиентам.

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

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

Итак, предполагая, что вам нужно сконцентрироваться на радиолокационной системе, вы можете просто: 1) загрузить их многопользовательский сервер, 2) собрать его, 3) настроить вашу систему erlang в качестве сервера ретрансляции, 4) запустить сервер и 5 ) обработать все обновления и построить трехмерное радиолокационное изображение соответствующего воздушного пространства.

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

Использование компонентов существующих проектов представляется довольно многообещающим подходом: в зависимости от масштабов вашего проекта, вы можете даже просто подключить свой код erlang к FlightGear (или, скорее, к его многопользовательскому серверу), чтобы вы могли напрямую сосредоточиться на самая релевантная работа в ваших усилиях (при условии, что это расчеты TCAS)

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

Ранее упомянутая система трафика AI в FlightGear обеспечивает поддержку для создания виртуальных планов полета для маршрутизации трафика AI , характеристики летательных аппаратов также можно настраивать путем редактирования XML-файла .

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

Исходный код сервера в значительной степени самодостаточен и не имеет каких-либо нетривиальных зависимостей, однако на данный момент он компилируется только на платформах nix (если вы используете Windows, вы можете захотеть проверить Cygwin или Colinux, чтобы запустить их сервер).

Обратите внимание, однако, что серверный компонент в настоящее время обычно не поддерживается, иными словами, он не обновлялся в течение 3 лет. С другой стороны, сам код регулярно используется уже несколько лет. Таким образом, состояние отсутствия поддержки на данный момент ничего не говорит о самом коде или его удобстве использования, оно действительно влияет только на *. 1037 *

Так что, хотя существует ряд запланированных изменений для fgms (таких как добавление поддержки DIS), никто не активно работает на сервере, и он просто используется как есть, среди этих запланированных функций, тот, который кажется уместным для ваших усилий:

Протокол публикации нескольких самолетов / транспортных средств от одного клиента SF.net

Интересно, что ранее уже обсуждалась о возможности переноса их компонента fgms для реализации в erlang, а не в C ++, так что если вы обнаружите, что вам нужно улучшить или повторно реализовать код сервера, используя erlang, ваш вклад на самом деле может быть высоко оценен, особенно из-за того, что их собственный сервер в данный момент практически не поддерживается.

Если вы решите взглянуть на использование FlightGear для своего проекта, вы, вероятно, захотите подписаться на список рассылки .

для разработчика FlightGear.

Чтобы получить данные о характеристиках самолета, вы можете проверить эту

базу данных о характеристиках самолета .

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

В частности, проект EuroControl BADA может показаться интересным.

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

1 голос
/ 14 мая 2009

Возможно, вас заинтересует эта статья (см. Стр. 21) о симуляции строительства в Эрланге. Он предлагает решение с world процессом плюс один процесс для каждого активного объекта.

1 голос
/ 08 мая 2009

Возможно, набор процессов, каждый из которых представляет плоскость. Имейте событие «Радар-пинг», на которое они отвечают, который возвращает текущий курс, курс, скорость и местоположение. Запрограммируйте свою логику оттуда.

Я, вероятно, упрощаю то, что им нужно сделать, но вы поняли. Процесс определенно был бы одним из способов сделать это.

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

0 голосов
/ 13 мая 2009

Существует Симулятор трафика и очереди , написанный на Erlang.

0 голосов
/ 09 мая 2009

Моя проблема: как моделировать траекторию полета самолета с учетом скорости? Я думал об использовании процесса ...

Звучит как базовая физика в 3D-координатах для меня. Если вы знаете ориентацию плоскости, то вы можете рассчитать новое положение (скажем, через 1 секунду) плоскости, вычислив расстояние от скорости. После того как вы получили расстояние, вам нужно вычислить новую координату плоскости, зная ориентацию и расстояние.

Обычно такого рода симуляции запускают виртуальные «часы» и пересчитывают позиции всех самолетов, увеличивая (виртуальное) время на такте (например, одну секунду или одну минуту на такт). Соединяя «точки» расчета местоположения, вы получаете траекторию.

0 голосов
/ 09 мая 2009

Что-нибудь должно быть в реальном времени? Если нет, то на самом деле это просто простые расчеты скорости, которые вы можете выполнить в процессе gen_server или gen_event. Просто создайте супервизора для создания потомков gen_server для каждого самолета, а затем по истечении времени сделайте handle_call для каждого самолета и попросите их обновить информацию.

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