- PVSM.RU - https://www.pvsm.ru -

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

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

1. Введение

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

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

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

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

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

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

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

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

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

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

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

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

3.3 ПО и железо

Официально у flightradar’а есть ПО [15] под 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 [16].

Настройка 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 можно путем сборки из исходников (проект [17] на 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 [18].

2. Запускаем fr24feed:

# cd /usr/bin
# ./fr24feed --signup

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

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

При желании можем принять участие в расчетах координат самолетов по технологии MLAT [20] — на Ваше усмотрение
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)
$:ваша_долгота

Указать (в футах) высоту положения антенны над уровнем моря (смотреть здесь [21])
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

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

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

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

4. Добавить правила в iptables

fr24feed имеет небольшую web-админку [23], расположенную на 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 предоставит Вам расширенный премиум-аккаунт, в котором собрано очень много различных опций и «вкусняшек».

Автор: mink_h

Источник [24]


Сайт-источник PVSM.RU: https://www.pvsm.ru

Путь до страницы источника: https://www.pvsm.ru/otkry-ty-e-danny-e/116447

Ссылки в тексте:

[1] ADS-B: https://ru.wikipedia.org/wiki/ADS-B

[2] раз: https://habrahabr.ru/post/156477/

[3] два: https://habrahabr.ru/post/250813/

[4] flightradar24: https://www.flightradar24.com/

[5] здесь: https://habrahabr.ru/post/149702/

[6] здесь: http://adsbradar.ru/priemnoe-oborudovanie

[7] промышленные варианты: http://www.radial.ru/catalog/antennas/vertical/a10_1090/

[8] антенна Франклина: http://adsbradar.ru/antenna-franklin-1090mhz

[9] вертикальный коллинеар: http://adsbradar.ru/vertical-collinear-antenna-1090mhz-uspp

[10] хорошем качестве: http://borodzich.com/0002379e/ant_001_1090.png

[11] 3D: http://borodzich.com/0002379e/ant_001_1090.pvz

[12] Creo View Express: http://www.ptc.com/cad/creo/view-mcad/extension-express

[13] СР-75-166Ф: http://borodzich.com/0002379e/vr0_364_010tu_1965.pdf

[14] чертеже: http://borodzich.com/0002379e/ant_001_1090_sb.pdf

[15] ПО: http://feed.flightradar24.com/

[16] 1.0.18-5: http://feed.flightradar24.com/linux/fr24feed_1.0.18-5_amd64.tgz

[17] проект: https://github.com/antirez/dump1090

[18] flightradar24: https://www.flightradar24.com/premium/signup

[19] должен быть: http://feed.flightradar24.com/forgotten_key.php

[20] MLAT: https://ru.wikipedia.org/wiki/MLAT

[21] здесь: http://www.latlong.ru/

[22] файл: http://borodzich.com/0002379e/fr24feed

[23] web-админку: http://localhost:8754/index.html

[24] Источник: https://habrahabr.ru/post/280454/