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

Enterprise Java на страже космоса

Научно технический прогресс постепенный по своей природе. Никто не берет горсть песка с пляжа и делает из нее компьютер. Мы берем грубые инструменты и создаем с помощью них более качественные. Затем с помощью последних еще более точные и так далее. Каждое малое усовершенствование — это ступенька прогресса и все они должны быть пройдены.

Председатель Шенчжи Ян.

image
В сознании каждого человека есть одна простая мысль: космические технологии — это сложно. На самом деле это не так. Не все технологии, применимые в космической отрасли — это Rocket science. И последние успехи в космонавтике, ренессанс космической тематики сподвигли меня на поиск проблемных областей, которые простой Enterprise Java разработчик может улучшить.

Предисловие

Самый простой способ — это пойти на сайт любой компании, работающей в космической отрасли, и поискать вакансии. Несмотря на то, что SpaceX [1] ищет программистов, мне было отказано на этапе резюме. Видимо, государственные контракты от NASA не позволяют им нанимать людей из других стран. Видимо, по этой же причине NASA [2] даже не ответили на моё резюме. JAXA [3] набирает не-программистов и тех, у кого японский не ниже уровня jlpt2.

С небольшими частными компаниями должно было бы быть значительно лучше. Но Planetary Resources [4] отказали на этапе резюме. Видимо, слишком маленькие, чтобы держать под рукой Enterprise Java разработчика. Planet [5] попросили написать программу на Си. Я конечно вспомнил синтаксис и смог, но после пары интервью они отказали. Видимо, слишком маленькая компания, у которой нет офиса в России, и переезд в другую страну они не потянут.

Ну и, наконец, дефолт сити. Роскосмос [6] — ни списка вакансий, ни требований.

Станции наблюдения за спутниками

Но мне повезло, и я случайно обнаружил проект Satnogs [7]. Это проект по созданию любительских станций наблюдения за спутниками по всему миру. Можно самому распечатать на 3д принтере части станции и по инструкции собрать. Также у них есть центральный сервер, который рассылает на станции запросы для наблюдения за пролетающими спутниками и собирает данные со всего мира: https://network.satnogs.org [8].

Для меня, как новичка в этой области, было не совсем понятно кому и зачем это нужно. Однако, повертевшись на форумах [9] и в mailing листах cubesat [10], я стал немного представлять проблематику.

Обычно маленькие спутники и кубсаты запускают университеты для отработки той или иной технологии [11]. Иногда их запускают даже солидные коммерческие компании для финальных тестов своих наработок [12]. Обычно эти компании и университеты достаточно небольшие и не могут себе позволить флот [13] для наблюдения за спутниками. Однако, понимание того, как ведет себя технология, важно в течении всего времени [14] полета, а не только во время пятиминутного интервала связи. Именно поэтому университеты и компании заинтересованы [15] в постоянном слежении за своими спутниками.

И тут на помощь должны прийти интернет и глобальная сеть наблюдения [16].

Телеметрия

По мере того, как спутник вращается на орбите, он периодически посылает телеметрию. Телеметрия [17] — это текущее состояние системы: напряжение батарей, момент вращения, температура и пр. Если постоянно получать эту информацию, то можно построить график изменения данных во времени и провести анализ.

Поскольку я прежде всего программист, меня заинтересовала именно программная часть, а в особенности digital signal processing. Как из .wav файла можно получить данные. Но прежде чем расчехлять прибор и начать кодить необходимо проанализировать существующие решения. Если вкратце, то эта область застряла где-то в 60х. Энтузиасты пересылают данные в виде скриншотов [18] к windows программам.

Enterprise Java на страже космоса - 2

Хотелось бы что-то более современное. Например, облачный сервис, который на вход получает .wav файл, а на выходе возвращает json. Почему именно такая архитектура?

  1. для того, чтобы отправить данные и получить результат не нужно специального ПО. Достаточно лишь curl, который есть во всех linux дистрибутивах;
  2. результат в текстовом формате упрощает разработку и интеграцию;
  3. микросервисная архитектура. Такой сервис будет отлично встраивается в другие более сложные системы.

Следующим этапом был выбор технологий. Поскольку специализированные железки для декодирования радио сигналов ну совсем никак не поставить в обычные датацентры, то необходимо программное декодирование. Тут все просто: gnuradio [19]. Это стандарт де-факто для программного декодирования — достаточно мощный и бесплатный инструмент, который поддерживает множество режимов и способов работы. Как раз то, что нужно для того, чтобы работать с зоопарком различных способов кодирования сигнала. Daniel Estévez написал [20] замечательные скрипты по декодированию сигналов различных спутников и приложил рабочие примеры.

Enterprise Java на страже космоса - 3

Казалось бы вот оно, счастье. Однако, и тут есть несколько ложек дегтя:

  1. GPLv2 [21]. Это не позволит вам писать коммерческий софт по декодированию сигналов. И уж точно не подходит для облачного сервиса — кто-то должен платить за хостинг [22].
  2. Безумная связка C/C++/Python/Swig. Если вкратце, то в gnuradio есть понятие блока. Это такой атомарный преобразователь сигнала. Когда сигнал декодируется данные проходят через множества, связанных между собой, блоков, и на выходе из последнего блока получается результат. Так вот, блоки можно писать на С++ и python. А раз можно писать, значит кто-то обязательно напишет. В итоге, часть блоков написана на Python 2, часть на Python 3 [23], часть на C++, который иногда не компилируется [24] и не всегда устанавливается [25], и все это связано через SWIG [26].

Переписывать уже рабочий код, который используется уже много лет и знаком многим энтузиастам, задача неблагодарная. Но помучившись с виртуальными машинами и продравшись сквозь десяток ошибок компиляции, я решил пойти на невозможное: переписать ключевые блоки на Java [27]. Разумеется бездумно переписывать все подряд блоки не имеет смысла, поэтому я решил проверить концепцию, переписав только блоки, нужные для декодирования aausat-4 [28]. В итоге у меня получилось сделать бинарно совместимые с gnuradio блоки и декодировать сигнал.

Поскольку концепция оказалась успешной, я решил запустить облачный сервис [29], который по сути предоставляет REST интерфейс к библиотеке jradio [27]. Следующим этапом я планирую подключить его к satnogs [8] для декодирования данных.

Выводы

Даже если вы Enterprise Java разработчик, вы можете помочь Элону. Возможно, по прошествии времени Вы сможете говорить внукам что шаттл, который летает между Марсом и Землей, каждую секунду выполняет Ваш код. Дерзайте!

Автор: dernasherbrezon

Источник [30]


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

Путь до страницы источника: https://www.pvsm.ru/java/252112

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

[1] SpaceX: http://www.spacex.com/careers

[2] NASA: https://www.linkedin.com/jobs/search/?keywords=nasa&f_C=2003

[3] JAXA: http://global.jaxa.jp/about/employ/index.html

[4] Planetary Resources: http://www.planetaryresources.com/careers/#pri-workplace

[5] Planet: https://www.planet.com/company/careers/?office=View%20All&department=Software%20Engineering

[6] Роскосмос: https://www.roscosmos.ru/23310/

[7] Satnogs: https://geektimes.ru/post/241834/

[8] https://network.satnogs.org: https://network.satnogs.org

[9] форумах: https://community.satnogs.org

[10] cubesat: http://www.cubesat.org/mailinglist

[11] технологии: http://sail.planetary.org

[12] наработок: https://www.nasa.gov/centers/ames/engineering/projects/nodes

[13] флот: https://geektimes.ru/company/mailru/blog/280132/

[14] течении всего времени: https://geektimes.ru/post/251506/

[15] заинтересованы: http://www.space.aau.dk/aausat4/index.php?n=Main.ReportBeaconsAndPassInfo

[16] глобальная сеть наблюдения: https://en.wikipedia.org/wiki/Space_Communications_and_Navigation_Program

[17] Телеметрия: https://ru.wikipedia.org/wiki/Телеметрия

[18] скриншотов: http://www.dk3wn.info/p/?cat=8

[19] gnuradio: http://gnuradio.org

[20] написал: https://github.com/daniestevez/gr-satellites

[21] GPLv2: https://habrahabr.ru/post/284392/

[22] хостинг: https://www.reg.ru/?rlink=reflink-717

[23] Python 3: https://github.com/gnuradio/gnuradio/issues/1153

[24] не компилируется: http://stackoverflow.com/questions/24898791/gnu-radio-build-error-no-rule-to-make-target-filter-generated-includes-neede

[25] не всегда устанавливается: https://wiki.gnuradio.org/index.php/MacInstall

[26] SWIG: http://www.swig.org

[27] Java: https://github.com/dernasherbrezon/jradio

[28] aausat-4: https://github.com/daniestevez/gr-aausat

[29] облачный сервис: https://r2cloud.ru

[30] Источник: https://geektimes.ru/post/287852/