Pull to refresh

Шаг за шагом: Трансляция данных на flightradar24

Reading time 11 min
Views 43K


1. Введение


Моя текущая деятельность никак не связана с авиацией, но так случилось, что я заболел ею. В какой точно момент это произошло – сложно сказать, наверное, первый полет здорово поспособствовал этому. Через некоторое время я начал смотреть фильмы на авиационную тематику, интересоваться строением и отличиями в самолетах и искать, как связать свою деятельность хоть немного с моим увлечением. Так я познакомился с технологией ADS-B и ее неожиданным применением среди энтузиастов – радарспоттингом. На просторах Хабра не часто появляются статьи по данной тематике (раз, два). Поэтому здесь я хочу немного поговорить на тему радарспоттинга и подробно описать процесс создания самостоятельной трансляции данных на популярный ресурс flightradar24.
Итак, всем, кто интересуется (болен) темой авиации и наблюдения за самолетами, а также желает принять в этом свое непосредственное участие, добро пожаловать под кат.

2. Что такое радарспоттинг


Радарспоттинг — это одна из разновидностей споттинга (от слова spot — наблюдать), вид хобби, в котором ведется наблюдение за воздушными судами при помощи специальных приемников и ПО, которое позволяет обрабатывать принимаемые от воздушных судов данные и представляет их в удобном для наблюдателя виде. В основе радарспоттинга лежит технология ADS-B, при помощи которой от воздушного судна, оборудованного ADS-B транспондером можно получить такие параметры, как ICAO адрес самолета, его координаты местоположения, курс, высоту, горизонтальную и вертикальную скорость.

Обычно, весь комплекс ПО состоит из двух частей:
  • ПО для приема и декодирования данных (ADSBScope, Basestation, dump1090 и др.);
  • ПО для визуального отображения (передачи) полученных данных (Virtual Radar Server, PlanePlotter и т.д.).

Выбор конкретного ПО зависит, в первую очередь, от типа приемника и поставленной задачи. Например, если у Вас есть microADSB приемник и вы желаете посмотреть, какие рейсы находятся в радиусе действия Вашей антенны – можно использовать связку ADSBScope + PlanePlotter.

Но в данном случае Вы сможете наблюдать только локальный участок, границы которого устанавливает антенна, подключенная к приемнику. Как мне кажется, куда более интересно наблюдать масштабную картину, данные к которой стекаются с десятков тысяч устройств (в том числе и с Вашего), расположенных по всему Земному шару.

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

3. Материальная база


Для построения своего собственного центра приема и передачи данных необходимо:
  • ADS-B-приемник (ресивер);
  • Антенна на 1090 MHz;
  • Соединительный кабель;
  • Компьютер, или другое устройство (какое, рассмотрим позже);
  • Набор ПО;
  • Постоянный доступ в сеть Интернет.

3.1 ADS-B приемник

На первоначальном этапе для этих целей прекрасно подойдет USB DVB-T приемник на базе чипсета RTL2832. Такое устройство можно заказать на том же Ebay за символические 7-9$.
image

Подробнее о работе данного устройства можно почитать здесь. Если Вы захотите использовать что-то по серьезнее, то вот здесь перечислено достаточно большое количество различных ADS-B приемников.

3.2 Приемная антенна на 1090 MHz

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

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

В связи с этим, было принято решение остановится на конструкции «Вертикальный коллинеар», а именно – вот на таком варианте:
image
Посмотреть в хорошем качестве (без регистрации и sms), в 3D — нужен Creo View Express.

В качестве основания антенны я использовал часть высокочастотного разъема СР-75-166Ф:
image

Другая часть разъема соединяется с кабелем для подключения антенны к DVB-T приемнику. Для данной цели необходимо использовать соответствующий кабель. Из форумов выяснил, что хорошо подходит кабель сопротивлением 75 Ω от спутникового ТВ.

Элементы самой антенны были изготовлены из медной проволоки Ø2 мм. Размеры элементов и схема сборки находятся на чертеже.
Основную сложность представляет создание 2-х витков заданной длины L = 69 мм. Здесь я приспособил трубку подходящего диаметра и вот что в итоге получилось:
image

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

Я немного упростил задачу и разместил всю конструкцию под крышей:
image

3.3 ПО и железо

Официально у flightradar’а есть ПО под Windows, Linux, OSX и Raspberry Pi. Особый трепет из этого списка вызывает поддержка Linux, т.к. в данном случае можно попробовать развернуть всю кухню на обычном домашнем роутере с USB-портом и кастомной прошивкой (OpenWrt). Но об этом в другой раз.

Данную задачу было решено запустить на уже имеющемся Linux-сервере под управлением CentOS 6.7 x86_64. Все дальнейшие шаги по установке будут касаться исключительно данной версии ОС!

Комплект ПО для flightradar24 состоит из 2-х модулей:
  1. dump1090 – для приема и декодирования данных;
  2. fr24feed – демон, который будет транслировать полученные данные на сервера flightradar24.

В отличие от той же Ubuntu, для CentOS у них нет готовых установочных *.rpm-пакетов, поэтому весь софт придется собирать вручную, а некоторые модули — компилить из исходников. На момент написания статьи, последняя версия ПО от flightradar была 1.0.18-5.

Настройка NTP

При трансляции данных очень важную роль играет значение точного времени на host-машине в момент получения ADS-B пакетов. Для синхронизации времени в CentOS используется демон ntpd.
Настройка службы NTP:
Открыть файл /etc/sysconfig/ntpdate и выставить SYNC_HWCLOCK=yes
Открыть файл /etc/ntp.conf и прописать адреса NTP-серверов. В моем случае это выглядит так:
server 0.by.pool.ntp.org
server 1.ru.pool.ntp.org
server 2.europe.pool.ntp.org

Настраиваем запуск службы и синхронизируем время:
# service ntpd start
# chkconfig --level 345 ntpd on
# ntpdate 0.by.pool.ntp.org


Установка fr24feed

Получаем и распаковываем архив:
# wget http://feed.flightradar24.com/linux/fr24feed_1.0.18-5_amd64.tgz
# tar -zxvf fr24feed_1.0.18-5_amd64.tgz


Внутри архива находятся:
fr24feed – бинарный файл;
version.txt – текстовый файл с указанием версии ПО;
LICENSE.fr24feed – лицензионное соглашение.

Раскладываем файлы по директориям:
# cp fr24feed /usr/bin/
# chown root.root /usr/bin/fr24feed
# chmod 755 /usr/bin/fr24feed
# mkdir -p /usr/share/doc/fr24feed
# cp LICENSE.fr24feed /usr/share/doc/fr24feed
# chown -R root:root /usr/share/doc/fr24feed
# chmod 755 /usr/share/doc/fr24feed
# chmod 644 -R /usr/share/doc/fr24feed/*.*


Попытка запуска:
# cd /usr/bin/
# ./fr24feed


В ответ мы, в большинстве случаев, получим вот такое предупреждение:
./fr24feed: /lib64/libc.so.6: version `GLIBC_2.14' not found (required by ./fr24feed)
./fr24feed: /usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.19' not found (required by ./fr24feed)
./fr24feed: /usr/lib64/libstdc++.so.6: version `CXXABI_1.3.8' not found (required by ./fr24feed)
./fr24feed: /usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.20' not found (required by ./fr24feed)

которое говорит о том, что в системе нет нужных библиотек. Здесь все просто и сложно одновременно: нужно обновить библиотеки libc и libstdc++ до необходимых версий. Если использовать стандартные репозитории CentOS, то все-равно нужных версий библиотек там не будет. Переход на CentOS 7 полностью не решит данную проблему.

Библиотека libstdc++.so.6 входит в пакет GCC 4.9, который придется собирать вручную.
Поехали:
# wget https://ftp.gnu.org/gnu/gcc/gcc-4.9.3/gcc-4.9.3.tar.gz
# tar -zxvf gcc-4.9.3.tar.gz
# cd gcc-4.9.3/


Перед началом сборки GCC необходимо доставить модули, которые понадобятся в процессе:
# yum install gcc gcc-c++
# yum install zip


Загрузка дополнительных компонентов:
# ./contrib/download_prerequisites
Конфигурация (--disable-multilib — собрать 64-х битный компилятор; --enable-language=c,c++ — набор поддерживаемых языков):
# ./configure --disable-multilib --enable-language=c,c++
Сборка и установка:
# make && make install

Процесс сборки пакета займет достаточно продолжительное время. На виртуалке с одним ядром и 1 Gb ОЗУ понадобилось 5-6 часов времени и 6 Gb дискового пространства.

По окончании установки пакета, библиотеки будут скопированы в /usr/local/lib64. Для того, что бы они стали доступны приложению, необходимо прописать путь в переменной окружения LD_LIBRARY_PATH.
Что бы значение данной переменной было доступно после перезагрузки системы, внесем изменения в файл .bashrc, который находится в домашнем каталоге пользователя:
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib64

Обновление libc.so.6
Для обновления libc.so.6 загрузить пакеты:
# wget http://ftp.vim.org/ftp/pub/ftp/os/Linux/distr/redsleeve/steam/glibc-2.15-60.el6.x86_64.rpm
# wget http://ftp.vim.org/ftp/pub/ftp/os/Linux/distr/redsleeve/steam/glibc-common-2.15-60.el6.x86_64.rpm
# wget http://ftp.vim.org/ftp/pub/ftp/os/Linux/distr/redsleeve/steam/glibc-devel-2.15-60.el6.x86_64.rpm
# wget http://ftp.vim.org/ftp/pub/ftp/os/Linux/distr/redsleeve/steam/glibc-headers-2.15-60.el6.x86_64.rpm


Устанавливаем:
# rpm -Uvh glibc-2.15-60.el6.x86_64.rpm glibc-common-2.15-60.el6.x86_64.rpm glibc-devel-2.15-60.el6.x86_64.rpm glibc-headers-2.15-60.el6.x86_64.rpm

Для надежности, лучше еще раз проверить запуск fr24feed.

Установка dump1090

Ставим необходимые для USB компоненты:
# yum install libusb1
# yum install usbutils


Подключаем наш «свисток» и проверяем, как его «видит» система:
# lsusb
Данный ответ свидетельствует о корректном определении устройства:
Bus 001 Device 002: ID 0bda:2838 Realtek Semiconductor Corp. RTL2838 DVB-T

Для работы dump1090 необходим набор библиотек librtlsdr. По сути, rtl_sdr — это драйвер, который обеспечивает «нецелевое» использование тюнера и позволяет принимать ADS-B сигналы. К счастью в репозиториях EPEL есть уже готовый *.rpm-пакет:
# wget http://dl.fedoraproject.org/pub/epel/7/x86_64/r/rtl-sdr-0.5.3-3.el7.x86_64.rpm
# yum install ./rtl-sdr-0.5.3-3.el7.x86_64.rpm


Установить сам dump1090 можно путем сборки из исходников (проект на GitHub), или опять-же скачать на свой страх и риск *.rpm-пакет (ох, как я люблю все готовое) с репозиториев OpenSuse:
# wget http://download.opensuse.org/repositories/hamradio/openSUSE_Tumbleweed/x86_64/dump1090-1.10.3010.14-3.17.x86_64.rpm
# yum install ./dump1090-1.10.3010.14-3.17.x86_64.rpm


Первый запуск

И так, мы уже почти близки к цели, осталось всего пару действий:
1. Регистрируемся на flightradar24.

2. Запускаем fr24feed:
# cd /usr/bin
# ./fr24feed --signup

Начнется пошаговая настройка — следуем указаниям:
Вводим e-mail, который указали при регистрации
Step 1.1 - Enter your email address (username@domain.tld)
$:my_email@google.com


Если ранее Вы уже производили трансляцию данных на flightradar, то можете пропустить данный пункт у Вас наверняка должен быть уникальный ключ — вводим, или оставляем поле пустым
Step 1.2 - If you used to feed FR24 with ADS-B data before enter your sharing key.
$:


При желании можем принять участие в расчетах координат самолетов по технологии MLAT — на Ваше усмотрение
Step 1.3 - Would you like to participate in MLAT calculations? (yes/no)$:no

Если Вы находитесь рядом с аэропортом, то вводим код аэропорта, или оставляем поле пустым
Step 2 - Enter nearest airport code (IATA or ICAO)
Enter airport code or leave empty$:


Ввести координаты (широту и долготу) расположения антенны с точностью 4 знака после запятой. Ну, здесь нас выручит вездесущий Google Maps
Step 3.A - Enter antenna's latitude (DD.DDDD)
$:ваша_широта
Step 3.B - Enter antenna's longitude (DDD.DDDD)
$:ваша_долгота


Указать (в футах) высоту положения антенны над уровнем моря (смотреть здесь)
Step 3.C - Enter antenna's altitude above the sea level (in feet)
$:ваша_высота


Программа сгенерирует и выдаст запрос на продолжение
Validating email/location information...OK
Enter your choice (yes/no)$:yes


Выбираем тип ресивера
Step 4.1 - Receiver selection:
1 - DVBT Stick (USB)
Enter your receiver type (1-7)$:1


Программа проверяет расположение dump1090. При необходимости можно задать дополнительные параметры
Checking for dump1090...FOUND
Step 4.3 - Enter your additional dump1090 arguments or leave empty
$:


Разрешаем обмен данными по 30002 и 30003 портам
Step 5.1 - Would you like to enable RAW data feed on port 30002 (yes/no)$:yes
Step 5.2 - Would you like to enable Basestation data feed on port 30003 (yes/no)$:yes


Задаем размер и расположение *.log-файла
Step 6A - Please select desired logfile mode:
2 - 72 hour, 24h rotation
Select logfile mode (0-2)$:2
Step 6B - Please enter desired logfile path (/var/log):
$:/var/log/fr24feed

Submitting form data...OK
Saving settings to /etc/fr24feed.ini...OK


На этом предварительная настройка fr24feed завершена. Параметры будут сохранены в файле /etc/fr24feed.ini. Кроме этого (читать между строк), Вы получите уникальный идентификатор радара и ключ обмена.

3. Создание демона fr24feed
По умолчанию fr24feed не способен работать, как служба и это немного усложняет процесс. Для решения подобных задач существует утилита start-stop-daemon, которая позволяет запустить любой процесс в виде демона с последующей передачей ему сигналов.
# wget http://download.opensuse.org/repositories/home:/sschapiro:/openstack:/IS24/RedHat_RHEL-6/x86_64/start-stop-daemon-1.9.18-2.4.x86_64.rpm
# yum install ./start-stop-daemon-1.9.18-2.4.x86_64.rpm


Разместить файл в директории /etc/init.d

Регистрируем и наш демон для автоматического запуска:
# chkconfig --add fr24feed
# chkconfig --list fr24feed

Запускаем службу:
# service fr24feed start

4. Добавить правила в iptables
fr24feed имеет небольшую web-админку, расположенную на 8754-м порту, которая позволяет получить быстрый доступ к списку отслеживаемых бортов и настройкам программы:
# iptables -A INPUT -p tcp -m tcp --dport 8754 -j ACCEPT
# iptables-save | tee /etc/sysconfig/iptables
# service iptables restart


Вроде все! На этом этап установки и настройки ПО можно считать завершенным.

4. Разбор полетов


После некоторого рабочего периода, на flightradar24 были получены наши данные и собрана статистика. Вся статистика отображается на сайте в виде диаграмм. Одни диаграммы отображают статистику за сутки, при этом используется часовой формат UTC, другие — за последние 7 дней.

4.1 Анализ диаграмм активности

Polar plot
Одним из показателей, характеризующим антенну, является диаграмма направленности. Flightradar24 на круговой диаграмме по секторам отображает количество полученных ADS-B пакетов и максимальное расстояние, с которого они были отправлены. Такая статистика формируется в течение 24-х часов:
image

По данному рисунку видно, что максимальная дистанция, с которой были получены пакеты — 143 морских мили, или ≈264,8 км. Данный показатель, с учетом того, что антенна находится под крышей, является достаточно неплохим. Кроме этого, с помощью данной диаграммы можно выявить препятствия, которые ухудшают прием сигнала (деревья, холмы, высокие здания и т.д.).

Histogram
Если посмотреть на зависимость количества полученных пакетов от расстояния, то здесь не все так радужно, как показалось на первый взгляд:
image

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

Hits and positions reported
Данный тип диаграммы показывает общее количество всех принятых от самолетов пакетов (Hits) и количество пакетов, в которых содержались координаты воздушного судна (Positions).
image

Переданные воздушным судном координаты закодированы в формате CPR (Compact Position Reporting) и для полного декодирования нам нужно иметь 2 пакета (четный и нечетный). Из-за помех часть пакетов может теряться, кроме этого, воздушное судно не всегда отправляет пакеты, содержащие текущие координаты — поэтому графики имеют расхождение.

Aircraft seen
Можно посмотреть, по сколько воздушных судов система фиксировала каждые сутки на протяжении последних 7-ми дней.
image

4.2 Что получилось

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

Для увеличения радиуса покрытия можно (нужно) вынести антенну наружу, поместив ее в защитный корпус. Также можно уменьшить длину кабеля до ресивера и/или установить малошумящий усилитель на 1090 MHz.

Здесь рассмотрен, наверное, самый трудоемкий вариант установки ПО. При установке из *.deb-пакета на ОС семейства Ubuntu (Debian), или загрузив ПО под Windows — количество шагов значительно сократится.

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

P.S. Чуть не забыл: в благодарность за трансляцию данных, flightradar24 предоставит Вам расширенный премиум-аккаунт, в котором собрано очень много различных опций и «вкусняшек».
Tags:
Hubs:
+29
Comments 39
Comments Comments 39

Articles