Зачем и почему?
В жизни каждого человека есть время разбрасывать камни, а есть время собирать. После 12 лет работы в космической отрасли настало и мое время. И как мне видится есть противоречие между трендом в спутникостроении и технологическим процессами.
В чем суть? Главный тренд – это снижение стоимости аппаратов за счет более адекватной оценки рисков. И по идее весь процесс должен выглядеть так: вначале создается адекватная модель того, как будет жить и существовать спутник, затем с опорой на нее мы его строим, потом запускаем, получаем данные, корректируем нашу модель.
Но реальность такова:
Да-да, вы все правильно поняли, наземные испытания самые бесполезные для исходных моделей. Хотя казалось, это единственный момент, когда под нашим контролем все. Как мне кажется тут дело, в том, что в глазах конструкторов это просто железка, когда по факту, современные спутники - это беспилотники.
Которые уже могли бы решать, что им делать в части нештатных ситуаций, но эта задача целиком и полностью (ну почти) лежит на людях, управляющих аппаратом. А почему? – Да просто потому, что нету моделей, симулирующих подобные случаи. Потому что опыт их устранения вообще никак не используется в дальнейшем проектировании.
Но чтобы это в принципе было бы возможно, нужно чтобы логика, положенная в основу моделей, была единой для всей цепочки проектирования и управления. Поэтому я предлагаю создать единую библиотеку которое позволит что-то типа следующего:
Одно кольцо объединит их… К-хм... Понятно, что это только инструмент и чтоб исправить вышеозначенную проблему нужно еще много организаторский работы, но при такой схеме сделать это проще. Почему? Отвечаю:
Классическое преимущество разделенного кода - меньше времени на отладку и на внедрение исправлений.
Уже при разработке моделей можно разработать методики автоматизированной проверки на земле и обработки данных в процессе лета.
Позволяет проектировать опираясь на то, как будут аппаратом управлять и как его будет принимать заказчик.
Начинаем собирать камни
Прежде, по крайне мере в мире свободного ПО, такой задачи никто не ставил. Поэтому будем действовать по принципу: «Новое вино следует наливать в новые мехи». Сформулируем наши желания, пока не утруждая структурированием и конкретизацией:
Хочется, чтобы созданная библиотека не должна навязывать разработчикам язык программирования, на котором они будут писать;
Хочется, чтобы возможно было разрабатывать как клиент-серверные приложения, так и однопользовательские;
Хочется, чтобы можно было писать как целые комплексы взаимодействующих приложений, так и одно-единственное, работающее само по себе.
Из этого следует два вывода:
Выбирать приходится из С++ и Rust. В противном случае, всем остальным придется писать на том же языке, что и мы, быть может, добавится пара-тройка скриптовых, типа Python.
Нам точно потребуется ОРП-библиотеки, с помощью которых можно легко (относительно) переключится между серверной БД, например PostgreSQL и встроенной, такой как SQLLite. И желательно, чтобы он были на том языке, на котором написана вся библиотека.
И, казалось бы, все очевидно: Rust спроектирован с учетом накопленного опыта развития Си\C+, значит надо переходить на него, но не все так просто. Java, C#, D, были также разработаны с учетом того же, но C++ по-прежнему жив и активно развивается. А все дело в цене – сборщике мусора, который как не крути, приводит к увеличения времени исполнения, объему потребляемой памяти, а также порождает проблему неопределенности во времени высвобождения объекта. Это видно по многочисленным тестам.
Мой же опыт еще добавляет к этому, что проблемы с утечками памяти, хоть и уменьшаются, но не исчезают, а вот трудность обнаружения возрастает на порядки.
У Rust же другая беда. С++ хоть и считается мультипарадигменном, но сквозь весь язык просвечивает понятие «объект». А вот у нашего пациента в основу положена другая сущность - «данные». Казалось бы, в чем проблема? А она есть.
Хотя я уверен, что все знают основное свойство информации, но все же напомню: «Если Вы знаете математику, а Толя нет, то если вы передадите свои знания, то и Вы и Толя будут знать математику».
А вот «объект» пришел из физического мира, и там совсем другие свойства: «Если у Вас есть апельсин, а у Толи нет, то если Вы его передадите, то у Толи будет апельсин, а у вас нет». И принципы ООП тоже взяты оттуда же, вы только вспомните всех этих уточек у классиков.
Именно наличие повседневного опыта облегчает мозгу уложить эту абстракцию в голову. А вот с «данными» у нас ничего подобного нет, и по первости подсознательно пытаемся натянуть сову на глобус. Естественно, это не проходит бесследно ни для качества кода, ни для его производительности. И еще два года назад подобное можно было наблюдать в популярных математических библиотеках.
И надо сказать, что последнее обстоятельство сыграло немалую роль в том, что я поначалу отвернулся от Rust, и первый маленький прототип был создан на C++. Когда же я стал писать статью я решил проверить, как сейчас обстоят дела. Как оказалось много лучше чем в 2020.
Ну что ж, тогда рассмотрим те особенности, которые могут послужить на жизнестойкость проекта.
Rust |
C++ |
|
Кем развивается |
Rust Foundation |
Конгломератом различных компаний, специалисты которых раз в н лет собираются, чтобы утвердить новый стандарт. |
Компиляторы |
rustc |
gcc, clang, msvc, icc и т.д. |
Средства сборки |
Встроенный cargo |
Встроенных нет, стандарт дн-факто cmake, а вот альтернатива qbs прекратила развиваться |
Средства документирования |
Встроенные |
Встроенных нет, стандарт де-факт doxygen |
ОРП-библиотеки |
||
Библиотеки пользовательского интерфейса |
Что можно сказать: разработка Rust ведется гораздо более централизовано чем C++ . В этом есть как плюсы, например, скорость внедрение нововведений, так и минусы, например разработчики и менеджеры могут видеть будущее языка по-разному.
Децентрелизованность порождает большую живучесть, с одной стороны, но при этом принятие стандарта, а потом его реализация в каждом отдельном компиляторе может затянуться на годы, и то нет гарантий, что стандарт будет воплощен в полном объеме.
С++ древний язык, да при этом обеспечивающий прозрачную совместимость с С. Проектов, написанных на нем хороши много. А Qt, по моему опыту, лучшее что существует для кроссплатформенной разработки пользовательского интерфейса.
Но и в Rust дела уже идут в гору. Глядя на структуру diesel в его будущее верится без проблем. А вот что с будет с Azul мне лично не очень ясно. Но опять же, никто не мешает в проектах на Rust использовать сишное наследие в виде GTK, благо есть специальный пакет, актуальность которого поддерживается скриптами.
Так что считаем, что по основным параметрам паритет. Но есть еще один беспокоящий момент: поддержка cстандартной библиотеки в операционных системах реального времени.
Убедил, что Rust не нужно рассматривать? Нет? Вот и я себе не убедил, хотя, повторюсь, у меня был уже минимальный рабочий проект на C++. Но чтобы понять куда двигаться дальше придется его реализовать и на ржавчине. И вот подобный поворот я не ожидал, когда сел писать эту статью. Он поломал всю логику повествования и то, что я хотел сейчас сказать. И в следующей статье, которые неизвестно когда будет, по всей видимости, я буду сравнивать Rust и C++.
Комментарии (22)
Kelbon
22.12.2022 16:39Звучит интересно, удачи в реализации. Насчёт кода кажется вы могли бы использовать С++20 штуки для измерения времени(вместо простых чисел в math constants) и кажется с таким количеством интерфейсов(virtual) можно было бы подумать про стирание типов вместо обычного подхода с виртуальными функциями
DancingOnWater Автор
22.12.2022 17:13То, что есть в С++20 для временных шкал мне показалось, слишком громоздко для вычислений.
А вот про стирание типов не знал, пойду читать что это такое.
Kelbon
22.12.2022 17:33Сразу смотрите на библиотеки, с нуля реализовывать это всё будет неудобно. (у меня в статьях в профиле например много про это)
UstasAlex
22.12.2022 16:42Не совсем понятны некоторые утверждения. Например, что при предлагаемой логике будет понятно как будет приниматься КА. Так это известно всегда - есть ТЗ и заказчик принимает изделие сверяясь с каждой запятой этого ТЗ. И программы-методики отработки создаются исходя из необходимости подтверждения каждого пункта ТЗ. Затем, про аналогию с беспилотниками. Что беспилотник может делать самостоятельно, без команд с земли?
DancingOnWater Автор
22.12.2022 17:03Про ТЗ: это в идеальном мире, где и подрядчик и заказчик знаете все-все. В реальной космической отрасли сильно иначе. К сожалению, не редка ситуация, что те, кто делают модельный расчет для разработки конструкции, закладываются на такой тип управления, который земля не может обеспечить либо в принципе, либо без существенной переделки.
Второй момент: беспилотники могут парировать много нештатных ситуаций: от отказа одного из приборов, до нивелирования ряда факторов. И да, беспилотники бывают тоже разные: от крылатых ракет до глубоководных аппаратов.
UstasAlex
22.12.2022 18:01Может разговор про коммерческие спутники. То, что идет как госзаказ, ТЗ для заказчика это Библия. По крайней мере для носителей. А насчет моделей, так это зависит от исполнителей, а не от принятой системы проектирования. Вон, когда не учли азимут космодрома, выяснилось, что полезная нагрузка моделировалась как материальная трчка, а не как трехмеоный объект. Ну так сами себе злобные буратины.
DancingOnWater Автор
22.12.2022 18:07ТЗ на разработку ракета-носителей я не видел, но смотря на Ангару не думаю, что оно осталось.
И, если честно, я еще не разу не видел, чтобы при разработке нового изделия (а я сейчас говорю про разные отрасли) с новыми характеристиками ТЗ не переписывалось и не дополнялось по ходу.
UstasAlex
22.12.2022 18:14Ну, Ангара отдельная песня. За время ее разработки там сама идеология несколько раз поменялась.
А то, что корректируется ТЗ, да. Но это всегда утверждается заказчиком и, естественно, учитывается при разработке и отработке. И заказчик всегда отслеживает именно последний вариант.
UstasAlex
22.12.2022 18:09Про парирование отказов. Еще полвека назад это существовало в боевых ракетах. Велся постоянный контроль исправности оборудования (на основе мажоритара), забракованный прибор или пытались восстановить перезапуском, или отключали из контура управления, либо переходили на упрощенный алгоритм управления. Если этого нет в современных спутниках, то можно только посочувствовать.
DancingOnWater Автор
22.12.2022 18:21Такое, естественно есть, но вот в чем дело: ракете с неисправным прибором лететь недолго, да и задача всего одна, как-никак выполнить можно. А вот спутнику нужно жить долго и решать много задач. То что вы описывает упрощенной режим управления у нас это переход в безопасный режим. Но во многих ситуациях борт может сам проанализировать причину сбоя и выйти из безопасного режима и выполнить-таки задачу
UstasAlex
22.12.2022 18:32Не очень представляю как борт может определить причину сбоя. Например, это ТЗЧ или некондиционные комплектующие. Ну, и если это действительно сбой, то все само восстанавливается. В крайнем случае при перезагрузке. Для этого причину и знать не обязательно.
DancingOnWater Автор
22.12.2022 19:03Телеметрия сейчас обширна, можно многое понять.
Простым перезапуском, бывает, не обойдешься. Или не всегда есть супер простые критерии, чтобы выяснить что нужно дернуть.
UstasAlex
22.12.2022 18:17Кстати, есди я правидьно понял, то смысл вашей идеи в формализации обратной связи. От результатов испытаний и экспдуатации до исходной модели.
DancingOnWater Автор
22.12.2022 18:25Не скажу, что это идея, скорее это желание
UstasAlex
22.12.2022 18:37В этом случае сразу возникает вопрос про поддержание нескольких веток системы. Потому что есть задел, особенно если переходить на конвеерное производство. Плюс поддержка уже функционирующих КА. При этом система должна определять в какую ветку можно и нужно вносить изменения, а в какие нельзя.
DancingOnWater Автор
22.12.2022 19:07Очень хороший вопрос, но я что-то подобное делал. И мой опыт говорит,
что здесь в первую очередь играет проработанность идеологии изделия.UstasAlex
22.12.2022 19:32Согласен. К сожалению, такого я почти не видел. Кстати, это одна из причин таких жутких сроков разработки.
hw_store
Кажется, текст статьи не совсем раскрывает то, что обозначено в её заголовке, в особенности в первом слове заголовка... Может, чуть-чуть подредактировать то или другое?
DancingOnWater Автор
А что не так?
hw_store
Ну, я бы сказал, что Вы в статье ставите вопросы, а заголовок как бы подразумевает, что вы будете давать какой-то ответ. А вместо этого Вы только обозначаете неопределённости. Хотя это моё субъективное мнение как человека, далёкого от конструирования софтверных проектов
DancingOnWater Автор
Не знаю... у меня в голове такая стандартная конструкция "Как собрались что-то делать, но тут все пошло не так", вот если бы я сказал "как я писал\разрабатывал ...", то да, должен говорить о решениях. По крайне я руководствовался такой логикой.