28 дек. 2021 г.

AIS receiver из Raspberry/Orange/Banana Pi и RTL SDR для Marine Traffic и ему подобных

Marine Traffic со товарищи и FlightRadar24 получают данные для своих сервисов от энтузиастов.

Энтузиасты обычно получают данные с соответствующих приёмников. Для морских и речных судов это приёмники AIS, для самолётов — ADS-B. AIS работает на паре каналов, называемых A и B, которым соответствуют частоты 161.975 и 162.025 MHz соответственно. ADS-B использует частоту 1090 MHz. Эта статья вкратце рассматривает процедуру настройки приёмника и антенного тракта для получения сигналов AIS.

Итак, чтобы построить сенсор, передающий данные в MarineTraffic, нам потребуется:
  • Raspberry Pi или какой-нибудь его аналог. Я использую Orange Pi Zero (256 MB RAM, четырёхъядерный ARMv7 процессор с частотой 1.2 GHz), его вполне достаточно. Важно, чтобы на нём был какой-нибудь линукс. Цена — от 10 до не знаю скольки долларов. Продаются на амазоне, алиэкспрессе, ебее, сайтах производителей.
  • Собственно приёмник — RTL SDR. Лучше не прямо совсем любой, а вот тот, который продаётся на сайте или хотя бы его клоны на Алиэкспрессе. Дело в том, что прямо стоковый DVB-T адаптер продаётся (если ещё вообще продаётся) с разъёмом MCX и рассчитан на кабель с волновым сопротивлением 75 Ом, а мы же тут типа крутые радиолюбители и хотим всё делать под 50-омный кабель и антенны. Поэтому лучше искать по словам «RTL-SDR Blog V3 R820T2». У него и разъём SMA, и вроде как он почувствительнее и поменьше шумит. Цена — от 15 до 30 долларов.
  • 50-омный кабель (RG-58 или лучше, но всё равно 50-омный). У ВЧ-кабеля немаленькое затухание, и чем выше частота, тем сильнее затухание. Не рекомендуют использовать RG-58 длиной больше 10 метров, и общее правило — «чем короче, чем лучше». Цена RG58 — от меньше чем доллар до полутора долларов за метр.
  • Коннектор для антенны. Я сделал четвертьволновый ground plane (1/4λ GP) с четырьмя противовесами, это очень хорошо делается на N-коннекторе с фланцем.
  • Пара коннекторов на кабель, соответствующих коннектору на приёмнике и на антенне. В нашем случае потребуется SMA male (к приёмнику) и N male (к антенне).

Это минимум. Для настройки антенны под частоту неплохо бы иметь друга-радиолюбителя или какой-нибудь прибор для анализа параметров антенного тракта. Для приделывания разъёмов к кабелю так или иначе потребуется обжимка для коаксиального кабеля и паяльник. Но минимум таков.








Главная сложность для меня заключалась в изготовлении антенны. Хороший антенный тракт — главное условие чувствительности системы. Я сделал свою антенну как описано здесь, естественно, с поправкой на используемые коннекторы и рабочую частоту. Использовал медную проволоку толщиной около 1 мм длиной в соответствии с этим расчётом. Длина штыря получилась около 445 мм, длина противовесов — около 490 мм. Первоначально изготовил антенну с некоторым запасом по длине, настраивал с помощью NanoVNA, откусывая по нескольку миллиметров бокорезами, пока не добился нужных параметров.

Настройка софтовой части не представляет особых сложностей. Как я уже написал, вам необходим работающий на вашем Pi линукс. Всё, что требуется — это собрать на нём rtl_ais, который принимает и обрабатывает сигнал и посылает полученные NMEA sequences на указанный адрес по UDP. Установка rtl_ais подробно описана на его странице, я вкратце рассмотрю параметры его запуска:

rtl_ais -g 35 -n -S 60 -p 54 -P xxxx -h aaa.bbb.ccc.ddd
  • -g 35 — усиление тюнера, в децибелах. Значение зависит от ваших условий. Для RTL-SDR Blog V3 может быть до 49. Подбирается опытным путём, т.к. тюнер сам достаточно шумный.
  • -n — выводить принятые NMEA sequences на stderr
  • -S 60 — выводить на stdout статистику принятых пакетов каждые 60 секунд
  • -p 54 — поправка частоты в PPM. Зависит от приёмника, подбирается, например, с помощью калибратора kal или rtl_test из комплекта librtlsdr, запущенного с ключом «-p».
  • -h — адрес хоста, на который отправлять получаемые данные. В случае с Marine Traffic получается от них при регистрации станции.
  • -P — порт, на который отправлять получаемые данные. В случае с Marine Traffic получается от них при регистрации станции.

Это всё. При использовании четвертьволновой антенны с RTL-SDR Blog v3 реальная дальность приёма сигналов — около 20 км без антенных усилителей сигнала.