Мониторинг сигналов ADS-B (радарспоттинг) или как отслеживать самолеты. Мой FR24-радар T-UMGG2
Наряду с приемом сигналов ACARS, интерес представляет и прием ADS-B (Automatic dependent surveillance-broadcast) сигналов - радарспоттинг (radarspotting).
Аббревиатура "ADS-B" расшифровывается так:Automatic – не требует вмешательства пилота или внешнего запросаDependant – зависит от точных данных о положении и скорости от навигационной системы самолета (например, GPS)Surveillance – предоставляет положение воздушного судна, высоту, скорость и другие данные наблюдения службам, которым требуется эта информацияBroadcast – информация передается для использования как воздушными судами, так и наземными службами
ADS-B Out - воздушное судно отправляет информацию наземным станциям и другим воздушным судамADS-B In - воздушное судно принимает информацию от наземных станций и других воздушных судов
Воздушные суда оснащаются такими транспондерами ADS-B:
Транспондер воздушного судна, получив запрос на частоте 1030 Мгц, излучает ответный фазово-импульсный модулированный (PPM - Pulse-position modulation) сигнал на частоте 1090 МГц (режим Mode S : S - "select"). Сигнал содержит информацию о координатах и других текущих параметрах воздушного судна, но не содержит временной метки, мер для проверки целостности сообщения и его шифрования.
Вот так выглядят такие сигналы:
При описании технологии ADS-B используются термины: "squawk" - ответ транспондера воздушного судна на запрос с земли "squit" - периодически передаваемая транспондером информация о воздушном судне
Независимо от поступления запроса, воздушное судно периодически (каждые пол-секунды или каждые 5 секунд - TX Rate 2/с или 0,2/с) транслирует свои координаты (сквиттер - squitter). Существует три варианта сквиттера: в режиме Mode C отправляется 3 параметра (не передаются координаты воздушного судна); в базовом режиме Mode S отправляется 7 параметров; в расширенном режиме Mode S (extended squitter - 1090ES) может отправляться до 49 параметров (формат DF17).
Приемник ADS-B In
Для приема я использовал RTL-SDR приемник с различными вариантами антенн
Антенны для приема сигналов ADS-B
Сначала я использовал штатную антенну от донгла:
Для улучшения качества приема антенна была расположена на металлическом кожухе от компьютерного блока питания, играющего роль заземляющей поверхности. Также рекомендуется обрезать антенну до длины 67 мм. Антенна была расположена внутри дома, у окна, поэтому полярная диаграмма дальности принимаемых сигналов получилась несимметричной (соответствует направлениям, видным из окна и не закрытым препятствиями):
Максимальное расстояние, на котором я смог принять сигнал ADS-B с этой антенной, составило 137 морских миль (nm). 1 морская миля равна 1852 м.
Затем я построил вертикальную четвертьволновую антенну "Ground Plane". Необходимым элементом вертикальной антенны "монополь" (антенны Маркони) длиной в четверть волны ($\lambda \over 4$) является находящаяся под ней проводящая поверхность - "земля" - радиусом не менее $\lambda \over 4$. В качестве такой поверхности можно использовать несколько (обычно четыре или четное количество) проводников длиной $\lambda \over 4$ - радиалов:
Такая антенна и получила название "Ground Plane (GP)". Недостатком этой антенны является ее низкое волновое сопротивление - 36,6 Ом. Для увеличения этого сопротивления необходимо отогнуть проводники "виртуальной земли" вниз - чем больше угол, тем больше сопротивление. Я так и поступил:
Сопротивление такой антенны также зависит от высоты подъема антенны над землей:
Я закрепил антенну над крышей дома:
Диаграмма (по статистике сервиса FR24) оказалась намного равномернее, чем в первом случае:
Вместо радиальных проводников можно использовать металлическую банку емкостью 330-350 миллилитров (диаметром 65 мм).
Максимальное расстояние, на котором я смог принять сигнал ADS-B с этой антенной, составило 188 морских миль (nm):
Альтернативой такой антенне служит антенна "$ \over 8$":
Также можно построить двухэлементную коллинеарную антенну:
Эта антенна предложена в 1911 году инженером фирмы "Маркони" Франклином. В ней два вертикальных элемента - длиной в $\lambda \over 4$ и $\lambda \over 2$ - и резонатор (на низких частотах заменяется бескаркасной катушкой). Полоса пропускания антенны составляет несколько процентов. Красными штриховыми линиями показана сила тока в антенне.
Трансляция на сервис FlightRadar24
Также можно организовать трансляцию информации о принимаемых ADS-B сигналах на сервис FlightRadar24 (FR24).
Для этого я использовал предлагаемую этим сервисом программу fr24feed:
Программа fr24feed при работе отображается в трее таким значком:
Мой радар получил код T-UMGG2:
Префикс "T" обозначает пользователей, владеющих собственными приемниками, и выгружающих данные на FR24; префикс "F" - "официальные" приемники сервиса FR24.
Вблизи аэропорта Гомель располагается 5 радаров сервиса FR24:
За трансляцию данных сервис FR24 дарит пользователям уровень Business использования своего сервиса:
При перерыве в вещании уровень меняется на Gold:
Вот пример работы моего радара, отслеживающего борт EW-308PA:
Программа fr24feed для приема ADS-B-сообщений через RTL-SDR-приемник и их декодирования использует программу mr-dump1090:
При работе программы fr24feed я наблюдал такие сообщения в командном окне:
Число N показывает порядковый номер пинга (от 1).
синхронизация времени через NTP-сервер
Трафик, отправляемый программой за час работы, не превышает 1-2 МБайт.
Программа fr24feed при запуске открывает порт:
К этому порту можно подключиться с помощью стандартной утилиты telnet:
В этот порт выдаются сообщения в формате BS - Basestation:
AIR - при входе воздушного судна в зону действия радараMSG - данные, передаваемые воздушным судномSTA SL/RM - при уходе воздушного судна из зоны видимости радара
можно сохранять сообщения в текстовый файл.
Визуализация и протоколирование ADS-B данных
Для визуализации данных сначала я использовал программу Virtual Radar Server, в настройках приемника fr24feed которой следует указать:
формат сообщений: Basestation адрес: 127.0.0.1 порт: 30003
Этот же приемник fr24feed следует указать как основной.
Эта программа позволяет отображать положение текущего отслеживаемого борта на Google Картах при обращении в браузере по адресу http://127.0.0.1/VirtualRadar/desktop.html#:
Но для использования карт необходимо получить и указать в программе ключ API.
Но затем я разработал свой виртуальный радар - программу на языке Ruby adsb_radar.rb. Программа получает информацию в Basestation-формате с 30003 порта от программы fr24feed, которую предварительно нужно запустить, а затем запустить саму программу командой
Для индикации я использовал два светодиода, подключенных через преобразователь USB-COM:
зеленый - к выводу RTS - индикация видимости радаром хотя бы одного воздушного судна красный - к выводу DTR - индикация нахождения отслеживаемого радаром воздушного судна на высоте ниже 10 000 футов
Программа создает Web-сервер с открытым портом 80, при обращении к которого отображается текущая ситуация в зоне действия радара:
Слева отображается карта, на которой маркерами с порядковыми номерами отмечено положение отслеживаемых в данный момент воздушных судов.
Справа отображается таблица с информацией о воздушных судах, находящихся в данный момент в зоне видимости радара:# - порядковый номерHex - ICAO-адрес (16-ричный код ICAO (24 бита) (ICAO 24-bit address, Mode-S "hex code") уникален для каждого воздушного судна) - для определения регистрационного номера и типа воздушного судна по его адресу ICAO я использовал базу данных из проекта https://github.com/RobAltenburg/icao_db, удалив лишние поля и преобразовав ее в CSV-формат (файл icao.csv). У воздушных судов РФ он имеет вид 100000. 1FFFFF, РБ - 510000. 5103FF, Украины - 508000. 50FFFF, Польши - 488000. 48FFFF, Германии - 3C0000. 3FFFFF.Tail - регистрационный номер
Подробнее о регистрационных номерах воздушных судов можно прочитать здесь.
Type - типCs - позывной (Call Sign)Airline - авиалинияCountry - странаSq - squawk-код (выдается диспетчером данному рейсу для полета) (специальные коды: 7700 - авария, 7600 - потеря связи, 7500 - захват самолета, 7777 - для военных самолетов)Alt - высота (в футах, ft)Trk - курсовой угол (в градусах)Gs - скорость (в узлах, kts)Lat - широта (в градусах)Lng - долгота (в градусах)
Для трансляции данных своего виртуального радара в Интернет я использую программу ngrok. Для просмотра текущей воздушной обстановки в зоне действия моего радара T-UMGG2 (в то время, когда я запускаю вещание в Интернет) можно обратиться в браузере по адресу http://radar.ngrok.foxylab.com:1976. Информация в окне браузера обновляется автоматически каждые 30 секунд.
В текстовый файл bs_YYYYMMDD.txt программа заносит данные воздушных судов (крайняя собранная информация о воздушном судне перед потерей сигнала) - одна строка для сеанса связи в воздушным судном, например:
AC4D43 - ICAO-адресN892FD - регистрационный номерB77L - типFDX5342 - позывнойFedEx Express - авиалинияUSA - страна1455 - squawk-код525.0 - скорость33000 - высота84.3 - курсовой угол52.95273 - широта31.10237 - долгота2017/07/07 08:40:29.105 - время начала сеанса связи2017/07/07 08:44:17.162 - время окончания сеанса связи
Для прерывания работы программы необходимо нажать в командном окне программы сочетание клавиш CTRL-C.
Программу можно загрузить из репозитария на GitHub: .
Предыдущие варианты моих программ:
программа bs_parse.rb на Ruby , которая получает информацию в Basestation-формате с 30003 порта и заносит в текстовый файл bs_YYYYMMDD.txt данные воздушных судов (крайняя собранная информация о воздушном судне перед потерей сигнала) - https://github.com/Dreamy16101976/bs_parse
Список интересных зафиксированных мной воздушных судов можно посмотреть здесь.
Следует отметить, что иногда транспондеры воздушных судов выдают неверные данные об их текущем местоположении.
В качестве примера я приведу случай с бортом Boeing 737-524 (рег. номер VP-BFW) авиакомпании UTair, выполнявшим 2 августа 2017 года рейс "Москва-Минск". Этот борт был направлен из-за погодных условий вместо Минска в Гомель:
В результате, по данным системы ADS-B самолет приземлился не в аэропорту Гомель, а в чистом поле :
Альтернативные декодеры ADS-B сигналов
Для декодирования принимаемых ADS-B сигналов также можно использовать программу rtl1090: