Ловлю картинки с МКС через чужие радиоприёмники по всему миру, не привлекая внимания санитаров
С 9 по 16 ноября МКС передаёт картинки в режиме SSTV. Это очередная серия ARISS, тема «Space Memories». Частота 437.550 МГц, режим Robot 36. Поймать картинку может любой, у кого есть приёмник на 70 см, антенна и пролёт станции над головой.
Сложности начинаются как раз с пролёта над головой. Хороших высоких пролётов над одним городом немного. На 70 см частота заметно уплывает из-за доплера, примерно на ±10 кГц за пролёт. Попытки сделать это на ручной рации у меня успехом не увенчались. Возможно "Нагойя-771" за 300 рублей была слишком оптимистичным вложением :)
Идея
По всему миру радиолюбители держат онлайн-приёмники OpenWebRX и WebSDR. Открываешь в браузере страницу, выбираешь частоту и слушаешь эфир где-нибудь в Германии или Чили. Многие из них стоят на 70 см.
Значит, МКС можно слушать не в одной точке, а везде, где она сейчас пролетает. Пока станция идёт над Европой, её по очереди ловят приёмник в Германии, потом в Польше, потом в Греции. Вручную так никто делать не будет: надо знать, кто видит станцию прямо сейчас, перестраивать частоту под доплер и записывать звук с десятка вкладок. Поэтому я собрал программу, которая делает это сама.
Да, в разработке активно принимал участие искусственный интеллект. В данное время я не вижу смысла учить питон и делать тоже самое, только хуже и медленнее. Принцип и методы я придумаю, а кодом пусть будут заниматься машины.
Как она росла
Сначала был консольный скрипт. Он считал пролёты по свежей орбите с CelesTrak и открывал пять проверенных приёмников. Звук забирался прямо со страницы, декодировался и сохранялся в картинки.
Первые грабли — скорость звука. Страница онлайн-приёмника играет звук не строго с нужной скоростью, а подгоняет его под свой буфер. Строка картинки от этого «плывёт» на процент и больше, и обычный декодер рисует косую кашу. Поэтому пришлось писать свой декодер. Он сам подстраивается под скорость, ищет синхроимпульсы сразу по нескольким соседним строкам и переживает провалы звука.
Вторые грабли — чужой приёмник общий. У OpenWebRX один тюнер на всех слушателей. Переключишь приёмник на 70 см — и все, кто его сейчас слушает, тоже окажутся на 70 см. Поэтому программа переключает только на время пролёта. Если кто-то вернул свой диапазон, она уступает, а в журнал пишет, сколько людей было на приёмнике.
Пять приёмников — мало. Добавил поиск по каталогам rx-tx.info, ReceiverBook и websdr.org. Программа сама проверяет, есть ли у приёмника 70 см и идёт ли звук. Сейчас в списке 197 приёмников из 41 страны, больше всего в Германии.
Потом понадобилось видеть, что происходит. Сначала был интерфейс в браузере, потом нормальное окно. Оформил его в стиле собственного недоделанного пульта управления Starship для Kerbal Space Program: чёрный фон, белый текст, оранжевым подсвечивается то, что сейчас в эфире.
Карта работает без интернета (Leaflet пусть в аду горит). На ней приёмники, трасса МКС, зона видимости и своё место. Отдельной головной болью была линия перемены дат: на ней рвались и трасса, и зона видимости.
Одна картинка с одного приёмника обычно с дырами. Звук пропадает, приёмник перестраивают, станция уходит за горизонт. Но одну и ту же картинку в это время ловят сразу несколько приёмников. Программа совмещает куски и усредняет каждую строку по всем приёмникам, где она принята прилично, поэтому шума становится меньше, чем у любого из них по отдельности.
Стопки. За неделю МКС много раз передаёт один и тот же набор картинок по кругу. Программа находит повторы из разных пролётов и складывает их. Из 10–20 плохих приёмов получается одна чистая картинка.
И последнее — готовая сборка для Windows. Почему бы и не поделиться, раз вышла такая интересная программа?
Что умеет
считает расписание пролётов на неделю вперёд и сама принимает каждый;
выбирает приёмники, над которыми станция выше всего, и по ходу пролёта передаёт эстафету следующим;
ведёт доплер для каждого приёмника отдельно;
показывает картинку прямо во время приёма, водопад и качество сигнала;
даёт послушать любой приёмник, громкость у каждого своя;
склеивает куски и складывает повторы;
после каждого сеанса пишет отчёт и ведёт рейтинг: какие приёмники реально дают картинки.
Что уже получилось
За первые два с половиной дня программа отработала 63 сеанса. Картинки пришли в 28 из них: 155 штук с 46 разных приёмников. Из них собралось 35 склеек и 10 стопок, в самой большой 20 приёмов.









Отобрал лучшие
Я понимаю, что сделал вещь "двойного назначения" и найдётся редиска, которая захочет с её помощью не декодировать картинки, а попортить жизнь остальным, но, что поделать.
Онлайн-приёмники, через которые работает программа, держат радиолюбители. Они бесплатно открыли их для всех, платят за интернет и железо сами и не обязаны терпеть, что кто-то их перегружает.
Важно понимать, как они устроены. У OpenWebRX один тюнер на всех слушателей. Если программа переключает приёмник на 70 см, все, кто его сейчас слушает, тоже окажутся на 70 см. Человек сидел, слушал свой любимый диапазон, и тут у него всё переключилось на МКС.
Сама программа старается вести себя аккуратно:
переключает приёмник только на время пролёта, примерно на 10 минут;
если кто-то вернул свой диапазон, она уступает и больше его не трогает;
в журнал пишет, сколько людей было на приёмнике;
по умолчанию держит открытыми не больше 8 приёмников одновременно;
в настройках есть режим «не переключать диапазон на OpenWebRX»: тогда программа слушает только те приёмники, которые и так стоят на 70 см.
Жёстко я ничего не ограничиваю: число приёмников можно поставить любое, проверять их можно хоть каждый час. Это ваш компьютер и ваше решение. Но настоятельно прошу:
не ставить больше 10–12 приёмников одновременно. Этого хватает, чтобы вести пролёт от края до края, и картинок больше не станет, а мешать вы будете уже десяткам людей. Мне хватает и восьми потоков, я с них получил 421 фото за последние двое суток и пара десятков из них очень даже ничего)). По ОЗУ, кстати, 4 гигабайта съедает работа сазу с 8 потоками аудио, приём, запись и декодировка;
запускать «Проверить все» и поиск приёмников перед акцией, а не постоянно: это тоже нагрузка на чужие серверы;
если владелец приёмника просит не переключать диапазон, ограничивает время или число слушателей, просто выключите этот приёмник в программе;
При первом запуске программа показывает эти правила и запускается только после согласия.
Программа распространяется «как есть», без каких-либо гарантий. Она делает то же, что человек делает руками в браузере: открывает общедоступные страницы приёмников, выбирает частоту и слушает. Ни один приёмник мне не принадлежит. За то, как вы используете программу, к скольким приёмникам подключаетесь и соблюдаете ли правила приёмников и законы своей страны, отвечаете вы сами. Я не отвечаю за блокировки, претензии владельцев и любые другие последствия.
Возможность сменить частоту с МКСной на частоту и траекторию Умки/любого другого объекта также имеется.









