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

Как следить за опознанными летающими объектами при помощи Raspberry Pi

А вы знали, что при помощи Raspberry Pi можно следить за опознанными летающими объектами? Вы можете настроиться на радио-сигналы самолетов на расстоянии до 400 км от вас и отслеживать все рейсы. Для этого вам достаточно найти дешевый USB TV и пару свободных минут.

dump1090

Изображение: dump1090 — тестирую антенну FlightAware против четвертьволновой гибкой антенны и антенны из банки.

В этой статье вы найдете краткое введение в отслеживание рейсов: обзор софта, аппаратуры и — самое главное — необходимой терминологии и жаргонных выражений. Также я покажу, как Docker и технология контейнеризации помогут управлять софтом в IoT-проектах.

На сайтах типа FlightAware.com [1] можно отслеживать десятки тысяч самолетов при помощи краудсорсинга: задачу выполняют люди по всему миру с помощью своих компьютеров Raspberry Pi (цена вопроса — $35) и дешевых USB TV тюнеров.

Можно следить за рейсами исключительно в личных целях, а можно внести свою маленькую лепту на таких сайтах, как FlightAware.com [1], FlightRadar24 [2] и PlaneFinder.net [3] и получить взамен детальные показатели — данные радаров и другие ништяки.

FlightRadar

Изображение: FlightRadar показывает самолеты в воздушном пространстве Великобритании.

Зачем отслеживать рейсы?

Вот несколько доводов:

  • Это супер-дешевое приложение, которое можно применить на практике к вашему старенькому Raspberry Pi в пыльной кладовке.
  • Можно стать местным лидером по отслеживанию рейсов, если передавать эту информацию в онлайн-трекеры.
  • Можно собрать детальную статистику и подобрать лучшую антенну и место, где ее разместить.
  • Можно не только собирать данные для своих программных проектов, но и одновременно узнать много интересного об авиации.

И самое главное — это просто веселый проект, который можно провернуть при помощи своего Pi и получить моментальное удовлетворение от каждого кусочка. При этом затраты на него стремятся к нулю.

Что нам понадобится

  • Raspberry Pi, SD-карта с Raspbian Lite [4]
    • Лучше используйте Raspberry Pi 2 или 3, потому что у них больше памяти и они лучше подходят для многозадачности.
    • Если вы пытаетесь установить несколько приемников и сэкономить, то Pi Zero тоже вполне подойдет.
  • USB TV Tuner — цена вопроса от 8 до 30 долларов.
    • FlightAware Pro Stick от ModMyPi [5] — самый крутой вариант со встроенным шумовым фильтром, SMA-разъемом. Антенну на 1090 МГц надо покупать отдельно.
    • Generic DVB-T USB tuner from Pimoroni [6] — мне прислали образец для тестирования. Работает хорошо, чипсет правильный, но телескопическую антенну надо установить в самый маленький разъем.
    • NESDR Smart Premium SDR [7] — включает 3 антенны, толстый SMA-кабель и встроенный шумовой фильтр для городской среды.
    • Если вы хотите сэкономить, то на eBay полно гораздо более дешевых вариантов, но при выборе будьте внимательны: прибор должен работать на чипсете R820T.

Если нужен результат, лучше покупайте технику (DVB-T sticks) известных брендов. Представленные выше ссылки — не пиар по партнерке.

  • Антенны
    К большинству DVB-T тюнеров прилагаются антенны, которые скорее ловят сигналы TV на суше, а не нужные нам сигналы ADS-B на частоте 1090 мГц.
  • Если вам нужна антенна на 1090 мГц, можете купить домашнюю версию 3 dBi [8] с функцией SMA. Антенна, которую я тестил, улавливала рейсы на расстоянии 240 км, если ее положить на подоконник.
  • Антенна FlightAware [9] ловила сигнал в застроенной местности еще круче, на расстоянии свыше 400 км, когда я ее вывесил за окно. Говорят, результаты будут еще круче, если разместить ее на крыше.
  • Также вам понадобится источник питания на 2.5-3 Ампера, чтобы хватило на Pi и TV-тюнер наверняка. Можете подобрать себе что-нибудь на официальном сайте Pimoroni [10], поставщика приборов электропитания.

На сайте ModMyPi [11] также можно купить весь необходимый набор в одном флаконе.

Глоссарий

Итак, наша цель — настроить USB TV тюнер таким образом, чтобы он ловил ADS-B трансляции рейсов в заданном диапазоне. Для начала давайте определимся с некоторыми определениями и терминами из области отслеживания рейсов.

ADS-B

На борту современных самолетов есть автоматические транспондеры, которые собирают информацию с навигационных инструментов и транслируют ее в окружающую среду через ADS-B. Эта информация не зашифрована, так что подхватить ее может любой — что диспетчер, что другой самолет, что владелец Raspberry Pi.
ADS-B (Automatic dependent surveillance-broadcast, автоматическое зависимое наблюдение-вещание) — технология, позволяющая и лётчикам в кабине самолета, и авиадиспетчерам на наземном пункте наблюдать движение воздушных судов с большей точностью, чем это было доступно ранее, и получать аэронавигационную информацию. Источник — Википедия [12].

DVB-T

TV-тюнер, который нам понадобится, называется DVB-T, что расшифровывается как Digital Video Broadcasting — Terrestrial. Это европейский стандарт эфирного цифрового телевидения. Это устройство также можно использовать как теле-антенну для просмотра любимых ТВ-шоу. Не все устройства DVB-T можно настроить на авиа-сигналы, так что лучше выбирайте что-то из рекомендованного или же тщательно изучите характеристики сами перед покупкой.

Антенный разъем SMA

Википедия: sub-miniature version A [13]. Такие разъемы меньше коаксиальных и обычно есть у премиальных или целевых DVB-T. У дешевых DVB-T, скорей всего, будет маленький разъем. Пигетйл можно купить на eBay или в любом магазине электроники. Он понадобится, чтобы совмещать любые крупные антенные разъемы — коаксиальные, SMA или RF.
FlightAware Pro Stick

dump1090

FlightAware

Ключевой компонент для расшифровки сигналов ADS-B — это софт dump1090. Это число означает частоту, на которой мы работаем, а dump — команда, которую он выполняет — расшифровывает и дампит необработанные данные.

Приложение dump1090 — это open-source проект, у которого есть несколько форков благодаря разным людям, которые вносили новые и улучшали старые функции. Выбрать нужный форк может быть довольно затруднительно.

Я воссоздал историю этого приложения по данным с GitHub:

  • Antirez [14] запустил проект в 2012 году на рождественских каникулах
  • MalcolmRobb [15] принял эстафету — запустил новый форк в коде и улучшил некоторые функции
  • Mutability [16] запустил форк от работы MalcomRobb-а
  • FlightAware [17] также поддерживает форк от репозитория mutability

Мы будем использовать Docker для сборки кода, но при желании вы можете точно так же запускать команды отдельно в терминале. Вот несколько причин, почему стоит пользоваться Docker-контейнерами:

  • Воспроизводимые build-скрипты
  • Дают надежный механизм сборки кода, намного более удобный, чем страницы README
  • Позволяют переключаться между разными версиями кода
  • Напрямую на наш Pi ничего не ставится, поэтому прибор остается в исходном виде
  • Позволяют расшарить образ с друзьями, у которых есть Pi

У большинства версий dump1090 также есть веб-интерфейс, где можно увидеть самолеты в определенном диапазоне в режиме реального времени.

FlightAware

FlightAware — это один из нескольких сайтов-агрегаторов, которые собирают данные с программы dump1090.При помощи виртуальной визуализации радара вы можете собрать детальную статистику по тем рейсам, которые вы помогли отследить, а также узнать, в каком диапазоне вы работали.

Вот мои результаты, которые я увидел в своем профиле. Я использовал выделенную антенну и тюнер DVB-T с шумоизоляцией.

positions reported by distance

Также вы можете посмотреть мой профиль на FlightAware, чтобы получить больше данных.

MLAT

MLAT (аббр. мультилатерация) — это технология, при которой можно использовать некоторое количество наземных станций, чтобы отслеживать самолеты, которые не передают данные ADS-B. Можно почитать подробнее в статье на сайте FlightAware [18].

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

Установка софта

  • Ставим Docker.
    Мы будем использовать Docker-образ, чтобы получить воспроизводимы build различных компонентов, которые нам нужны, и в то же время держать все дополнительные бинарники вне файловой системы хоста.
  • Клонируем GitHub-репозиторию:
    $ git clone https://github.com/alexellis/eyes-in-the-sky
  • Заносим в blacklist USB TV stick
    Чтобы dump1090 смог получить доступ к USB TV stick, нам надо внести его модуль ядра в черный список.

Добавляем эту строку в /etc/modprobe.d/blacklist.conf:
blacklist dvb_usb_rtl28xxu

Теперь перезагружаемся.

Декодер dump1090

enter image description here

Изображение: тестирую DVB-T от Pimoroni, прикрепленный к Pi Zero и оставленный дома у родственников.

  • Строим образ dump1090
    Если вы хотите ввести свою позицию (широту и долготу), то отредактируйте последнюю строчку в Dockerfile.malcolmrobb, которая начинается с CMD. Вы можете определить свою позицию по Google Maps.

    $ cd eyes-in-the-sky/dump1090
    $ docker build -t alexellis2/dump1090:malcomrobb . -f Dockerfile.malcolmrobb

‘-t’ — устанавливает название образа для дальнейшего использования.

-f — позволяет выбрать Dockerfile с кастомным названием. Также я задал имя для форка mutability.

Docker позволяет вам расшарить свои образы с кем угодно при помощи команды push, которая выгружает их на Docker Hub. Чтобы скачать dump1090 без сборки кода с нуля, выполняем команду:

$ docker pull alexellis2/dump1090:malcolmrobb

  • Тестируем образ dump1090
    Теперь можно и потестить.

$ docker rm -f 1090 # remove any old container

$ docker run --privileged -p 8080:8080 -p 30005:30005 -p 30003:30003 --privileged --name 1090 -d alexellis2/dump1090:malcomrobb

Команда docker run отвечает за запуск нашего кода. Чтобы потом код остановить, используйте docker rm -f 1090, а если вы перезагрузили Pi — restart 1090.

При помощи -p Docker определяет, какие порты надо раскрыть из контейнера. Можно запустить две копии кода dump1090, если поменять номер порта и имя контейнера.

При помощи -d контейнер перемещается в фон в качестве демона, так что если вы хотите увидеть консольный вывод, просто напишите ‘docker logs --tail 20 -f 1090’

Пример логов:

logs

Если вы знаете IP-адрес вашего Raspberry Pi, то вы можете открыть его во встроенной странице: http://192.168.0.10:8080/ [19]

Чтобы узнать IP-адрес, напишите ifconfig.

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

Подсказка для продвинутых: запуск без привилегий

Если вы не хотите запускать контейнер с привилегиями, то вы можете узнать ID устройства USB, а затем заменить --privileged на --device=/dev/bus/usb/001/004, например.

Для своего случая вам следует заменить последние цифры, т.е. 004 в моем примере. Нужные цифры вы можете получить при помощи команды lsusb:

$ lsusb
Bus 001 Device 004: ID 0bda:2838 Realtek Semiconductor Corp. RTL2838 DVB-T

Устанавливаем FlightAware

Есть несколько сайтов по отслеживанию рейсов, я начал с FlightAware. Их софт подключается к вашему коду dump1090 и передает данные в их сервера, где вы уже можете сверять статистику и сравнивать свои данные с другими участниками.

Можно установить .deb файл прямо на свой Pi, но я создал отдельный Dockerfile. У него есть два преимущества: можно запустить две и более копий софта и переключаться между версиями без перепрошивки Pi.

Дальше собираем образ при помощи следующей команды или скачиваем образ при помощи docker pull alexellis2/flightaware:3.5.0:

$ cd eyes-in-the-sky/flightaware
$ docker build -t alexellis2/flightaware:3.5.0 .

Обратите внимание на точку в конце строки, не пропустите ее.

Теперь регистрируемся на сайте FlightAware.com и задаем имя пользователя и пароль.

Редактируем файл piaware.conf, заменяем следующие поля:

  • receiver-host (используйте IP-адрес вашего Pi)
  • flightaware-user
  • Flightaware-password (используйте данные, которые указали при регистрации)

У FlightAware есть классная функция, которая позволяет отслеживать ваш Raspberry Pi по MAC-адресу. К счастью, Docker позволяет подменять MAC-адреса, и поэтому мы можем запустить несколько копий софта. Если вы так делаете, просто поменяйте MAC, чтобы он был уникальным для каждой копии.

Теперь запустим образ и посмотрим логи:

$ cd eyes-in-the-sky/flightaware
$ docker rm -f piaware_1
$ docker run --mac-address 02:42:ac:11:00:01 -v `pwd`/piaware.conf:/etc/piaware.conf --name piaware_1 -d alexellis2/piaware:3.5.0

Посмотрите логи и нажмите Control + C в любой момент времени.

$ docker logs --tail 20 -f piaware_1

Ваш Pi появится на сайте через несколько минут.

Ответы на вопросы

  • Какой будет расход электричества?
    Pi Zero или 2/3 потребляет 2-3 Ватта во время простоя. Приложение dump1090 задействует процессор Pi, до 50% его мощностей на Zero, поэтому учитывайте, что будет расходоваться дополнительное электричество для нагрузки и USB DVB-T.

  • Можно ли провернуть операцию с USB-аккумулятора?
    Да, в течение ограниченного времени. Аккумулятор, которого мне обычно хватало на 3 дня, ушел за 3 часа, когда я с его помощью отслеживал рейсы.

  • Можно ли использовать солнечную энергию?
    Солнечная энергия, возможно, — не совсем правильное решение. Raspberry Pi не будет надежно работать напрямую от солнечной панели. Вам понадобится сложное оборудование, включая контроллер зарядки, солнечные панели адекватных размеров и батарейки, которых должно хватать на несколько дней.
    Лучше подключать Pi через Power over Ethernet с водонепроницаемым корпусом. Вот список необходимых деталей [20].

  • Существует ли коробочное решение — образ или ISO?
    Можно найти полный образ на SD-карте на сайте FlightAware, но если вы будете строить систему из модульных компонентов, то у вас будет преимущество перед любым другим софтом, разработанным под dump1090.

  • Будет ли детальный обзор на какое-нибудь оборудование?
    Ждите следующего поста о результатах, которые я получил при помощи разных антенн и тюнеров.

antennas

Изображение: тестирую антенны — антенна из банки, FlightAware, 2x 1090 MHz.

Дополнительные материалы

Также вам могут понравиться следующие блоги и статьи о том, что можно сделать с помощью Raspberry Pi и Docker:

Автор: Роман Моисеев

Источник [24]


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

Путь до страницы источника: https://www.pvsm.ru/raspberry-pi/261348

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

[1] FlightAware.com: http://ru.flightaware.com/about/

[2] FlightRadar24: https://www.flightradar24.com/

[3] PlaneFinder.net: https://planefinder.net/

[4] Raspbian Lite: https://www.raspberrypi.org/downloads/raspbian/

[5] FlightAware Pro Stick от ModMyPi: https://www.modmypi.com/raspberry-pi/breakout-boards/flightaware/flightaware-pro-stick-plus-usb-sdr-ads-b-receiver/?search=flight%20stick

[6] Generic DVB-T USB tuner from Pimoroni: https://shop.pimoroni.com/products/dvb-t-dongle-ideal-for-ads-b-real-time-plane-tracking

[7] NESDR Smart Premium SDR: http://www.ebay.co.uk/itm/NESDR-SMArt-Premium-RTL-SDR-Set-w-0-5PPM-TCXO-Aluminum-SMA-R820T2-RTL2832U/152142033580?ssPageName=STRK:MEBIDX:IT

[8] домашнюю версию 3 dBi: https://www.modmypi.com/electronics/antenna/antennas/3dbi-ads-b-1090mhz-sma-antenna-w-magnetic-base/?search=antenna

[9] Антенна FlightAware: https://www.modmypi.com/electronics/antenna/antennas/flightaware-1090mhz-ads-b-antenna-66cm--26in/?search=antenna

[10] официальном сайте Pimoroni: https://shop.pimoroni.com/products/5v-3a-barrel-jack-power-supply?utm_medium=cpc&utm_source=googlepla&variant=32491020362&gclid=Cj0KEQjwkZfLBRCzg-69tJy84N8BEiQAffAwqsLpydpxI6_vwflBxeoyjJEdJAw_ooGl-56ZN6Vv5QEaAntt8P8HAQ

[11] сайте ModMyPi: https://www.modmypi.com/raspberry-pi/set-up-kits/rpi3-model-b-kits/piaware-aircraft-tracking-kit-inc.-raspberry-pi-3

[12] Википедия: https://ru.wikipedia.org/wiki/ADS-B

[13] sub-miniature version A: https://ru.wikipedia.org/wiki/%D0%9A%D0%BE%D0%B0%D0%BA%D1%81%D0%B8%D0%B0%D0%BB%D1%8C%D0%BD%D1%8B%D0%B9_%D1%80%D0%B0%D0%B4%D0%B8%D0%BE%D1%87%D0%B0%D1%81%D1%82%D0%BE%D1%82%D0%BD%D1%8B%D0%B9_%D1%80%D0%B0%D0%B7%D1%8A%D1%91%D0%BC#SMA

[14] Antirez: https://github.com/antirez/dump1090

[15] MalcolmRobb: https://github.com/MalcolmRobb/dump1090

[16] Mutability: https://github.com/mutability/dump1090

[17] FlightAware: https://github.com/flightaware/dump1090

[18] статье на сайте FlightAware: http://ru.flightaware.com/adsb/mlat/

[19] http://192.168.0.10:8080/: http://192.168.0.10:8080/

[20] список необходимых деталей: https://puck.nether.net/~jared/blog/?p=148

[21] Hands-on Docker for Raspberry Pi: https://www.youtube.com/watch?v=7YlvS8YOnrY&t=595s&index=2&list=PLlIapFDp305D06X8xaLBKPRabDM2zgAFe

[22] Deep Dive — Docker Swarm Clustering on the Pi: https://blog.alexellis.io/live-deep-dive-pi-swarm/

[23] Create a hardened Raspberry Pi NAS: https://blog.alexellis.io/hardened-raspberry-pi-nas/

[24] Источник: https://habrahabr.ru/post/334360/?utm_source=habrahabr&utm_medium=rss&utm_campaign=best