- PVSM.RU - https://www.pvsm.ru -
Научно технический прогресс постепенный по своей природе. Никто не берет горсть песка с пляжа и делает из нее компьютер. Мы берем грубые инструменты и создаем с помощью них более качественные. Затем с помощью последних еще более точные и так далее. Каждое малое усовершенствование — это ступенька прогресса и все они должны быть пройдены.
Председатель Шенчжи Ян.

В сознании каждого человека есть одна простая мысль: космические технологии — это сложно. На самом деле это не так. Не все технологии, применимые в космической отрасли — это 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 программам.

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

Казалось бы вот оно, счастье. Однако, и тут есть несколько ложек дегтя:
Переписывать уже рабочий код, который используется уже много лет и знаком многим энтузиастам, задача неблагодарная. Но помучившись с виртуальными машинами и продравшись сквозь десяток ошибок компиляции, я решил пойти на невозможное: переписать ключевые блоки на 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/
Нажмите здесь для печати.