Наверное каждый, кто хоть раз встречал или провожал родственников или друзей на самолет, пользовался бесплатным сервисом Flightradar24. Это весьма удобный способ отслеживания положения самолета в реальном времени.
Как показал опрос знакомых, очень мало кто знает, что этот сервис поддерживается лишь энтузиастами, отправляющими на сервер данные. Еще меньше знают, что присоединиться к проекту может любой желающий.
Восполним этот пробел. О том, как это работает продолжим под катом.
Железо
Самый первый вопрос — откуда берутся данные.
Каждый гражданский борт оснащен специальным передатчиком, так называемым ADS-B transponder:
(фото с сайта Garmin)
Это устройство посылает на частоте 1090МГц специальные посылки, содержащие основные параметры полета, тип воздушного судна, его координаты, пункт назначения и пр.
Сигнал на спектре выглядит примерно так:
И что для нас самое важное, декодировать эти данные несложно, достаточно RTL-SDR приемника, ценой порядка 8$, подключенного к компьютеру. Собственно, идея уже наверно ясна — если собрать данные с множества приемников, то получим картинку, примерно такую:
Но и это еще не все. Часть самолетов передают пакеты данных, но в них отсутствуют GPS-координаты. Если принимать данные одновременно со множества приемников, координаты которых известны, то, анализируя задержки на разных приемниках, можно узнать местоположение воздушного судна. Такая технология называется multilateration (MLAT), подробнее о ней можно прочитать
И, наконец, последний вопрос — как принимаются данные. Ответ прост, разместить у себя приемник может любой желающий, цена вопроса составляет от 0 до 50$. Для примера, так выглядит карта приемников сервиса Flightaware:
Как можно видеть, покрытие российской части оставляет желать лучшего, так что у некоторых вполне есть шанс быть первым.
Для приема данных необходимы:
— Raspberry Pi2/3 с подключенным интернетом (цена от 20$)
— RTL-SDR-донгл (цена от 10$)
— хотя бы простейшая антенна их 2х кусков провода длиной 6.8см каждый (1/4 диполь на 1090МГц)
Также желательно место с более-менее открытым обзором хотя бы части неба, т.к. сигналы гигагерцевой частоты поглощаются препятствиями вроде домов или деревьев.
У меня и Raspberry Pi, и RTL-SDR уже были, так что ничего покупать не пришлось. Но попробовать бесплатно получить готовый приемник может любой — и Flightradar и Flightaware рассылают комплекты бесплатно пользователям из тех районов, где покрытие на данный момент недостаточно. Отправить запрос можно по ссылке (
Я использовал комплект из RTL-SDR V3, который вместе с антенной и мини-штативом стоил 27$ с бесплатной доставкой из Китая:
Кстати, как второй бонус, всем, отправляющим данные на сервер, и Flightradar24 и Flightaware предоставляют неограниченный доступ к premium-аккаунту и всем функциям сервера (отдельно такой доступ стоит порядка 50$/месяц). Так что если кто-то интересуется авиацией и хочет иметь расширенный доступ к такому аккаунту, установка RTLSDR-приемника является вполне дешевой альтернативой.
Тестирование
Установка предельно проста, на Raspberry Pi достаточно подключить приемник и запустить одну команду:
sudo bash -c "$(wget -O - http://repo.feed.flightradar24.com/install_fr24_rpi.sh)"
Скрипт запросит необходимые данные (координаты и тип приемника, адрес электронной почты), далее софт будет работать автоматически, внимание со стороны пользователя больше не требуется. Параллельно можно активировать премиум-аккаунт (для FR24 по ссылке
Можно зайти на страницу IP-адреса Raspberry Pi и увидеть текущий статус:
Гораздо больше информации можно увидеть на странице аккаунта Flightradar24:
Я живу на 6-м этаже относительно недалеко от аэропорта, так что количество наблюдаемых самолетов за день составило больше 1000, даже на простую антенну на подоконнике. Интересно, что даже с такой антенной максимальная дальность до принятого борта составила 215 миль. Разные варианты антенн можно найти на ebay, набрав в поиске ads-b antenna.
Альтернатива
Бонус для тех, у кого хватило терпения дочитать до сюда. У некоторых читаталей может возникнуть вопрос: можно ли обойтись без сторонних сервисов типа Flightradar? Разумеется можно, запустить декодер на Raspberry Pi можно и напрямую. Скачать исходники можно по адресу
Достаточно на Raspberry Pi набрать 3 команды:
git clone https://github.com/antirez/dump1090.git
cd dump1090/
make
Затем декодер можно запустить командой:
./dump1090 --interactive --net
Декодер начинает работу, и мы видим «сырые данные» — список видимых «бортов»:
Теперь можно зайти браузером на Raspberry Pi и полюбоваться собственным, локальным Flightradar, картинка может выглядеть примерно так:
Зачем это может быть надо? Во-первых, просто из интереса, во-вторых, Flightradar24, к сожалению, фильтрует часть данных и показывает не все самолеты (например, могут не показываться военные, правительственные, или бизнес-джеты). Запустив собственный локальный сервис, мы видим все «как есть», безо всякой цензуры. Зато, конечно, объем данных ограничен нашим локальным местоположением и качеством антенны, также не будет доступна технология MLAT. Dump1090 доступен в исходниках, так что желающие могут даже создать свою версию Flightradar, c блекджеком и прочими bells and whistles.
Выводы
Как можно видеть, все не так сложно, при этом вполне интересно и недорого. Для понимания порядка цен: еще 10 лет назад приемник Airnav RadarBox стоил порядка 1000$, сейчас RTL-SDR, который делает то же самое, можно взять за 10$.
В моем случае приемник был запущен только для тестирования, практического смысла держать его постоянно включенным нет, плотность покрытия европейской части уже и так достигает 100%. Для жителей российской глубинки, наоборот, это может быть вполне интересным — появляется возможность как сделать полезное дело для авиапутешественников всего мира, расширив зону покрытия, так и получить доступ к Premium-аккаунту вышеупомянутых сайтов.
Всем удачных экспериментов.
Источник: habr.com