Мониторинг сигналов 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:
ADS-B транспондер

Транспондер воздушного судна, получив запрос на частоте 1030 Мгц, излучает ответный фазово-импульсный модулированный (PPM - Pulse-position modulation) сигнал на частоте 1090 МГц (режим Mode S : S - "select"). Сигнал содержит информацию о координатах и других текущих параметрах воздушного судна, но не содержит временной метки, мер для проверки целостности сообщения и его шифрования.

Вот так выглядят такие сигналы:
сигналы ADS-B

При описании технологии ADS-B используются термины:
"squawk" - ответ транспондера воздушного судна на запрос с земли
"squit" - периодически передаваемая транспондером информация о воздушном судне

Независимо от поступления запроса, воздушное судно периодически (каждые пол-секунды или каждые 5 секунд - TX Rate 2/с или 0,2/с) транслирует свои координаты (сквиттер - squitter).
Существует три варианта сквиттера:
в режиме Mode C отправляется 3 параметра (не передаются координаты воздушного судна);
в базовом режиме Mode S отправляется 7 параметров;
в расширенном режиме Mode S (extended squitter - 1090ES) может отправляться до 49 параметров (формат DF17).

Формат DF17 для 1090ES:

DF- Downlink Format
5 бит
17 (10001b) - идентификатор формата
CA - Capability
3 бита
дополнительный идентификатор
ICAO
24 бита
код ICAO воздушного судна
DATA
56 бит
данные;
первые 5 бит - TC (Type Code):
1...4 - идентификация воздушного судна;
5...8 - surface position (?);
9...18 - позиция воздушного судна (с барометрической высотой);
19 - скорости воздушного судна;
20...22 - позиция воздушного судна с GNSS-высотой
23...31 - зарезервировано
PI
24 бита
биты четности

Приемник ADS-B In

Для приема я использовал RTL-SDR приемник с различными вариантами антенн

Антенны для приема сигналов ADS-B

Сначала я использовал штатную антенну от донгла.
Антенна была расположена внутри дома, у окна, поэтому полярная диаграмма дальности принимаемых сигналов получилась несимметричной (соответствует направлениям, видным из окна и не закрытым препятствиями):
fr24feed
Максимальное расстояние, на котором я смог принять сигнал ADS-B с этой антенной, составило 137 морских миль (nm). 1 морская миля равна 1852 м.

Затем я построил вертикальную четвертьволновую антенну "Ground Plane". Необходимым элементом вертикальной антенны "монополь" длиной в четверть волны ($\lambda \over 4$) является находящаяся под ней проводящая поверхность - "земля" - радиусом не менее $\lambda \over 4$. В качестве такой поверхности можно использовать несколько (обычно четыре или четное количество) проводников длиной $\lambda \over 4$ - радиалов:
конструкция антенны Ground Plane

Такая антенна и получила название "Ground Plane (GP)".
Недостатком этой антенны является ее низкое волновое сопротивление - 36,6 Ом. Для увеличения этого сопротивления необходимо отогнуть проводники "виртуальной земли" вниз - чем больше угол, тем больше сопротивление. Я так и поступил:
Ground Plane антенна

Я закрепил ее над крышей дома:
Ground Plane антенна

Диаграмма оказалась намного равномернее, чем в первом случае:
...

Также можно построить двухэлементную коллинеарную антенну:
двухэлементная коллинеарная антенна

Эта антенна предложена в 1911 году инженером фирмы "Маркони" Франклином.
В ней два вертикальных элемента - длиной в $\lambda \over 4$ и $\lambda \over 2$ - и резонатор (на низких частотах заменяется бескаркасной катушкой).
Полоса пропускания антенны составляет несколько процентов.

Красными штриховыми линиями показана сила тока в антенне.

Диаграмма направленности такой антенны в вертикальной плоскости имеет вид:
...

FlightRadar24
Трансляция на сервис FlightRadar24

Также можно организовать трансляцию информации о принимаемых ADS-B сигналах на сервис FlightRadar24 (FR24).

Для этого я использовал предлагаемую этим сервисом программу fr24feed:
fr24feed

Программа fr24feed при работе отображается в трее таким значком:fr24feed

Мой радар получил код T-UMGG2:
T-UMGG2

Префикс "T" обозначает пользователей, владеющих собственными приемниками, и выгружающих данные на FR24;
префикс "F" - "официальные" приемники сервиса FR24.

Вблизи аэропорта Гомель располагается 5 радаров сервиса FR24:

F-UMGG1 Anonymous
F-UMGG2 gleb_gomel
T-UMGG2 FoxyLab
F-UMGG3 Avtunich
F-UMGG4

Buda-Koshelevo

За трансляцию данных сервис FR24 дарит пользователям уровень Business использования своего сервиса:
FlightRadar

Программа fr24feed для приема ADS-B-сообщений через RTL-SDR-приемник и их декодирования использует программу mr-dump1090:

mr-dump1090

При работе программы fr24feed я наблюдал такие сообщения в командном окне:

пинг

[feed][n]ping N
[feed][n]syncing stream result: 1

Число N показывает порядковый номер пинга (от 1).

отправка данных

[feed][i]sent 1,0 AC
[feed][i]sent 2,0 AC
[feed][i]sent 3,0 AC
...

синхронизация времени через NTP-сервер

[time][i]Synchronizing time via NTP
[time][i]Time synchronized correctly, offset +0.0882 seconds

Трафик, отправляемый программой за час работы, не превышает 1-2 МБайт.

Программа fr24feed при запуске открывает порт:

[bs][i]Starting server on 0.0.0.0:30003

К этому порту можно подключиться с помощью стандартной утилиты telnet:

telnet 127.0.0.1 300003

В этот порт выдаются сообщения в формате BS - Basestation:
fr24feed

AIR - при входе воздушного судна в зону действия радара
MSG - данные, передаваемые воздушным судном
STA SL/RM - при уходе воздушного судна из зоны видимости радара

Указав ключ

-f имя_файла

можно сохранять сообщения в текстовый файл.

Для регистрации воздушных судов, которые засек радар, я написал программу на Ruby bs_parse.rb, которая получает информацию в Basestation-формате с 30003 порта:
bs_parse
В текстовый файл bs_YYYYMMDD.txt заносятся данные воздушных судов (крайняя собранная информация о воздушном судне перед потерей сигнала).
Для определения регистрационного номера и типа воздушного судна по его адресу ICAO я использовал базу данных из проекта https://github.com/RobAltenburg/icao_db, удалив лишние поля и преобразовав ее в CSV-формат (файл icao.csv). 16-ричный код ICAO (24 бита) (ICAO 24-bit address, Mode-S "hex code") уникален для каждого воздушного судна. У воздушных судов РФ он имеет вид 100000...1FFFFF, РБ - 510000...5103FF, Украины - 508000...50FFFF, Польши -  488000...48FFFF, Германии - 3C0000...3FFFFF.

Перед запуском программы необходимо сначала запустить программу fr24feed, а затем запустить саму программу командой

ruby bs_parse.rb

Для прерывания работы программы необходимо нажать в командном окне программы сочетание клавиш CTRL-C.

Программу можно загрузить из репозитария на GitHub:
https://github.com/Dreamy16101976/bs_parse

Визуализация ADS-B данных

Для визуализации данных я использую программу Virtual Radar Server, в настройках приемника fr24feed которой следует указать:

формат сообщений: Basestation
адрес: 127.0.0.1
порт: 30003

настройки fr24feed
Этот же приемник fr24feed следует указать как основной:
...

Эта программа позволяет отображать положение текущего отслеживаемого борта на Google Картах при обращении в браузере по адресу http://127.0.0.1/VirtualRadar/desktop.html#:
T-UMMG2

Но для использования карт  необходимо получить и указать в программе ключ API.

Для трансляции данных Virtual Radar Server в Интернет я использую программу ngrok. Для просмотра текущей воздушной обстановки в зоне действия моего радара T-UMGG2 можно обратиться в браузере по адресу tumgg2.ngrok.io/VirtualRadar.

Протоколирование ADS-B информации

Программа Virtual Radar Server не ведет журнал с информацией о принятых ранее сигналах.

Для протоколирования бортов, чьи сигналы были приняты, я написал программу vr_parse.rb на Ruby, которая периодически (каждые 30 секунд) опрашивает сервер, создаваемый программой Virtual Radar Server, по адресу http://127.0.0.1/VirtualRadar/AircraftList.json и сохраняет данные бортов в текстовый файл crafts_YYYYMMDD.txt (YYYY - год, MM - месяц, DD - день).

Формат файла:

каждая строка соответствует принятому сигналу, причем поля в строке отделяются символами табуляции

Пример строки:

4BAA45    TC-JRE    Turkey    A321    THY3982    6273    433.0    34016    352.0    51.60306    29.02343    1497942512972    20170620070832

4BAA45 - 16-ричный код ICAO (ICAO HEX)
TC-JRE - регистрационный код воздушного судна
Turkey - страна регистрации
A321 - тип воздушного судна
THY3982 - позывной (Call Sign)
6273squawk-код (выдается диспетчером данному рейсу для полета)
(специальные коды: 7700 - авария, 7600 - потеря связи, 7500 - захват самолета, 7777 - для военных самолетов)
433.0 - скорость (в узлах, kts)
34016 - высота (в футах, ft) (геометрическая)
352.0 - курсовой угол (в градусах)
51.60306 -  широта (в градусах)
29.02343- долгота (в градусах)
1497942512972 - время получения сигнала (Unix timestamp)
20170620070832 - YYYYMMDDhhmmss (UTC) - время получения сигнала

Некоторые воздушные суда не транслируют свои текущие координаты:

51009B  EW-456PA Belarus B738 5133 459.0 35000 166.4 1498019169771    20170621042609

Некоторые воздушные суда транслируют только код ICAO, squawk-код и высоту (а также позывной):

508268  UR-EMB  Ukraine E190        4656  27275  1498020310355    20170621044510
502C98  YL-BBV  Latvia  DH8D BTI405 4617  24000  1497982858341    20170620182058 

Перед запуском программы необходимо сначала запустить программы fr24feed и Virtual Radar Server, а затем запустить саму программу командой

ruby vr_parse.rb

Для прерывания работы программы необходимо нажать в командном окне программы сочетание клавиш CTRL-C.

Программу можно загрузить из репозитария на GitHub:
https://github.com/Dreamy16101976/vr_parse

Примеры использования программ xx_parse и интересные зафиксированные воздушные суда:

взлет самолета Boeing-737-8K5 (EW-437PA, ICAO 51008D) из аэропорта Гомель 27 июня 2017 года:
протокол программы bs_parse:
...

Мне удалось сфотографировать этот взлетающий самолет:
...

Это же воздушное судно отображалось и на сервисе FR24:
...

взлет самолета Boeing-737-505 (EW-294PA, ICAO 510051) из аэропорта Гомель 21 июня 2017 года:
протокол программы vr_parse:

510051    EW-294PA    Belarus    B735               0031    157.0    2073    275.5 ...
510051    EW-294PA    Belarus    B735    BRU8361    0031    183.0    3223    187.2 ...
510051    EW-294PA    Belarus    B735    BRU8361    0031    229.0    3898    138.5 ...
510051    EW-294PA    Belarus    B735    BRU8361    0031    259.0    4923    161.1 ...
510051    EW-294PA    Belarus    B735    BRU8361    0031    286.0    5973    180.0 ...
510051    EW-294PA    Belarus    B735    BRU8361    0031    301.0    7573    178.5 ...
510051    EW-294PA    Belarus    B735    BRU8361    0031    298.0    9423    178.7 ...
510051    EW-294PA    Belarus    B735    BRU8361    0031    319.0    10748   179.3 ...
510051    EW-294PA    Belarus    B735    BRU8361    0031    355.0    11473   178.9 ...
510051    EW-294PA    Belarus    B735    BRU8361    0031    362.0    12873   178.9 ...
510051    EW-294PA    Belarus    B735    BRU8361    0031    366.0    14448   179.1 ...
510051    EW-294PA    Belarus    B735    BRU8361    0031    374.0    14948   179.4 ...
510051    EW-294PA    Belarus    B735    BRU8361    0031    381.0    17348   181.4 ...
510051    EW-294PA    Belarus    B735    BRU8361    6044    395.0    20373   181.5 ...
510051    EW-294PA    Belarus    B735    BRU8361    6044    399.0    21073   181.4 ...

Мне удалось сфотографировать этот взлетающий самолет:
EW-294PA
Это же воздушное судно отображалось и на сервисе FR24:
BRU8361

Интересно, что в процессе взлета squawk-код изменился с 0031 на 6044.

Военные воздушные суда:

6831F1 01 RED Kazakhstan C295 73199 6255  19000  20170620104048
...
6831F1 01 RED Kazakhstan C295 73199 6255  19000  20170620105124

самолет CASA C-295  ВВС Казахстана

613133 Unknown or unassigned country  28075 20170621101231

самолет ИЛ-76ТД Министерства обороны Азербайджана

...

Альтернативные декодеры ADS-B сигналов

Для декодирования принимаемых ADS-B сигналов также можно использовать программу rtl1090:
rtl1090

Эта программа выдает данные в TCP-порт 31001:
rtl1090

Продолжение следует

Яндекс.Метрика