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

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

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

  • Raspberry Pi, SD-карта с Raspbian Lite

  • Лучше используйте Raspberry Pi 2 или 3, потому что у них больше памяти и они лучше подходят для многозадачности.

  • USB TV Tuner — цена вопроса от 8 до 30 долларов.

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

К большинству DVB-T тюнеров прилагаются антенны, которые скорее ловят сигналы TV на суше, а не нужные нам сигналы ADS-B на частоте 1090 мГц.

  • Если вам нужна антенна на 1090 мГц, можете купить домашнюю версию 3 dBi с функцией SMA. Антенна, которую я тестил, улавливала рейсы на расстоянии 240 км, если ее положить на подоконник.

  • Антенна FlightAware ловила сигнал в застроенной местности еще круче, на расстоянии свыше 400 км, когда я ее вывесил за окно. Говорят, результаты будут еще круче, если разместить ее на крыше.

  • Также вам понадобится источник питания на 2.5-3 Ампера, чтобы хватило на Pi и TV-тюнер наверняка. Можете подобрать себе что-нибудь на официальном сайте Pimoroni, поставщика приборов электропитания.

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

Ads-b

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

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

Dump1090

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

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

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

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

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

Dvb-t

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

Flightaware

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

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

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

Raspberry pi (с rtos) python = квадрокоптер?

Я бы посоветовал разделить управление и всю остальную периферию. Слишком много времени займет запуск реалтаймовой малины со всеми стабилизациями и управлением, это не учитывая видео. Проще будет взять готовую платформу для управления, на тех-же АТМегах или простеньком АРМе (не стоит пугаться отсутствия операционки, вцелом программирование контроллеров можно довести до компиляции и прошивки одной кнопкой за один вечер). Это решит проблему с датчиками положения и управлением двигателями и позволит получить хоть какой-то промежуточный результат своей работы. Потом на основе этой платы можно и вовсе реализовать автопилот и сократить управление коптером до лети вперед, повернись, поднимись выше и тд.

Далее дополнительно установить малину с обычным линуксом и наладить видеотрансляцию. Уже после этого можно будет сделать канал связи между малиной и полетным контроллером и передавать команды управления через вайфай-малину-интерфейс.

Полетный контроллер обойдется где-то 20-60$, а времени сэкономит уйму. Более того, отдельно покупать все то что есть на нем намного дороже.

Когда я собирал коптер, я купил Хоббикинг полетный контроллер с АТМегой32 на борту. Для них есть уйма самописных прошивок на С, думаю на С тоже будут. По существующим исходникам прошивок я менял как предполетную конфигурацию коптера, так и фильтры для стабилизации коптера в полете. Имея продвинутые датчики на полетном контроллере (гироскоп, GPS, дальномер) и достаточно памяти, можно вовсе свести ручное управление на нет.

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

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

Внешняя flash-память

Внешняя Flash-память W25Q16JVUXIQ объёмом 2 МБ.

Гирлянда


Главная фишка Пико — возможность программируемого ввода-вывода через блоки PIO, на которых можно реализовать произвольный интерфейс. В следующем примере заставим Pico рулить светодиодами WS2812.

Глоссарий

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

Декодер dump1090

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

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

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

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

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

Квадракоптер на raspberry pi 3 и java?

1) Советую сначала почитать про общие принципы управления коптерами. Зачем нужны ПИД-регуляторы, акселерометры итп.
2) Java – прямо скажем такой себе выбор. Жрет кучу памяти, работает малоэффективно.
3) Малина тоже такой себе выбор. Т.к. это система на чипе, то и все подлаги итп будут отображаться на IO операциях. Она неплохо подойдет как управление автопилотом итп, но не как непосредственное управление переферией.

Для непосредственного управления я бы предложил воспользоватся Atmel или STM. Писать можно на Сях или Arduino IDE. Второе тоже – выбор и вопросы по эффективности, но зато просто.
Малину бы заюзал в роли автопилота например.

Но вообще проще бы наверное было с самолётом-планером.

Кнопка bootsel

На плате Pi Pico расположена кнопка, которая служит для перевода платформы в режим загрузчика.

Код для arduino

Для работы примера скачайте и установите библиотеку Adafruit NeoPixel.

raspberry-pi-pico-example-arduino-ws2812-rainbow.ino
// Библиотека для работы со светодиодами WS2812#include <Adafruit_NeoPixel.h>
 
// Номер пина, к которому подключена матрица WS2812
constexpr uint8_t LED_PIN =11;
 
// Количество светодиодов в матрице
constexpr uint8_t LED_COUNT =16;
 
// Создаём объект для работы со светодиодной матрицей
Adafruit_NeoPixel matrix = Adafruit_NeoPixel(LED_COUNT, LED_PIN, NEO_GRB   NEO_KHZ800);
 
void setup(){// Инициализация матрицы
  matrix.begin();// Устанавливаем яркость светодиодов// Диапазон значений от 0 до 255
  matrix.setBrightness(40);}
 
void loop(){// Заполняем матрицу по сегментам «бегущий огонь» красного цвета
  colorWipe(matrix.Color(255,0,0),100);// Заполняем матрицу по сегментам «бегущий огонь» зелёного цвета
  colorWipe(matrix.Color(0,255,0),100);// Заполняем матрицу по сегментам «бегущий огонь» синего цвета
  colorWipe(matrix.Color(0,0,255),100);// Гасим матрицу по сегментам «бегущая тень»
  colorWipe(matrix.Color(0,0,0),100);}
 
// Функция заполнения каждого сегментаvoid colorWipe(uint32_t c,uint8_t wait){for(uint16_t i =0; i < matrix.numPixels(); i  ){// Заполняем текущий сегмент выбранным цветом
    matrix.setPixelColor(i, c);
    matrix.show();// Ждём
    delay(wait);}}

После прошивки управляющей платформы, вы увидите заполнение по очереди каждого светодиода матрицы из красного, зелёного и синего цветов.Как следить за опознанными летающими объектами при помощи Raspberry Pi / Хабр

Код для micropython

Для работы примера скачайте и установите библиотеку MicroPython Neopixel Pi Pico.

raspberry-pi-pico-example-micropython-ws2812-rainbow.py
# Библиотека для работы с временемimporttime# Библиотека для работы со светодиодами WS2812from neopixel import Neopixel
 
# Номер пина, к которому подключена матрица WS2812
led_pin =11# Количество светодиодов
led_count =16
 
# Создаём объект для работы со светодиодной матрицей
strip = Neopixel(led_count,0, led_pin,"GRB")
 
# Создаём фиксированные цвета
red =(255,0,0)
green =(0,255,0)
blue =(0,0,255)
off =(0,0,0)
 
colors =(red, green, blue, off)
 
# Устанавливаем яркость светодиодов# Диапазон значений от 0 до 255
strip.brightness(40)
 
whileTrue:
    # Перебираем цветаfor color in colors:
        # Перебираем светодиодыfor i inrange(led_count):
            #Выставляем цвет светодиода
            strip.set_pixel(i, color)# Ждём 100 мсtime.sleep(0.1)# Обновляем изменения
            strip.show()

После прошивки управляющей платформы, вы увидите заполнение по очереди каждого светодиода матрицы из красного, зелёного и синего цветов.Как следить за опознанными летающими объектами при помощи Raspberry Pi / Хабр

Маячок

Для начала мигнём встроенным светодиодом на пине.

Микроконтроллер rp2040

Платформа Pi Pico выполнена на чипе собственной разработки RP2040 от компании Raspberry Pi Foundation. Кристалл содержит двухъядерный процессор на архитектуре ARM Cortex M0 с тактовой частотой до 133 МГц. На RP2040 также расположились часы реального времени, датчик температуры и оперативная память на 264 КБ.

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

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

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

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

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

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

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

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

Если вы не хотите запускать контейнер с привилегиями, то вы можете узнать 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

Порт micro-usb


Разъём USB Micro предназначен для прошивки и питания платформы Raspberry Pi Pico. Для подключения к ПК понадобится кабель USB (A — Micro USB).

Преобразователь напряжения

На плате расположен универсальный преобразователь питания RT6150-33GQW, который при низком входном напряжении поднимет питание до 3,3 вольт, а при высоком — понизит до 3,3 вольт. В итоге вы можете использовать широкий выбор источников питания.

Примеры работы

Рассмотрим несколько примеров работы программирования Pico на C через Arduino IDE.

Режимы загрузки

Raspberry Pi Pico поддерживает два метода загрузки: штатный режим и режим загрузчика.

Светодиодная индикация


Пользовательский светодиод на пине микроконтроллера. При задании значения высокого уровня светодиод включается, при низком – выключается.

Устанавливаем 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 .

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

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

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

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

Смотрите про коптеры:  Как выбрать самолет на радиоуправлении знает Planeta Hobby
Оцените статью
Радиокоптер.ру
Добавить комментарий