pySimScheduler ============== Это пакет для имитационного моделирования процессов в системах автоматического управления техническими объектами. Также пакет используется для управления реальными объектами в реальном времени. Объекты должны быть не очень быстрые -- постоянная времени объекта должна быть не менее 0,5 секунды. .. |date| date:: %d.%m.%Y .. note:: Проект находится в стадии активной разработки. Версия документации от |date|. .. toctree:: :maxdepth: 2 :caption: Содержание: description usage remote c api Предыстория проекта ------------------- В рамках реализации проекта <<Космическая миссия ReshUCube-3>>, лаборатория Малых космических аппаратов университета Решетнева совместно с лабораторией Космических систем и технологий ФИЦ КНЦ СО РАН разрабатывает систему ориентации для этого аппарата. Планируется управлять ориентацией сверхмалого спутника формата CubeSat 1U, используя активную магнитную систему ориентации,структура которой показана на рисунке. Она представляет собой классическую систему с обратной связью. .. image:: img/ADCS.png :alt: Структура системы ориентации малого КА. Состояние космического аппарата описывается угловой скоростью :math:`\omega^I` и кватернионом поворота :math:`\Lambda^{IB}` связанной системы координат относительно инерциального пространства. Состояние зависит от приложенного вращательного момента, который складывается из момента от аэродинамических сил :math:`M_\text{аэро}` и магнитного момента :math:`M_\text{магн}`. Управляющим является магнитный момент, который создан взаимодействием магнитных полей электромагнитного устройства (магнитной катушки) и магнитного поля Земли :math:`B`. Напряжение :math:`U` на катушках ЭМУ пропорционально сигналу управления :math:`u`. Регулятор формирует сигнал управления таким образом, чтобы измеренный кватернион поворота :math:`\Lambda^{OB}_\text{изм}` стал равен желаемому кватерниону :math:`\Lambda^{OB}_\text{жел}`, т.е. чтобы КА встал в заданную ориентацию. По форме это классический для таких задач ПД-регулятор (для Д-канала используется угловая скорость :math:`\omega^I_\text{изм}`). Отличный обзор современного состояния магнитных систем ориентации в [1]. В структурной схеме можно выделить группы блоков, которые имеют разную природу. Например, повороты КА, аэродинамические и магнитные моменты имеют физическую природу и действуют непрерывно; регулятор, наблюдатель и навигатор - это алгоритмы, работающие в бортовом вычислителе с некоторой периодичностью. Понятно, что при имитационном моделировании эти группы необходимо рассчитывать разными вычислительными методами, связывая их в единый расчёт чтобы получить совместное решение. Обычно это делается путём запуска моделей последовательно, на некоторый шаг времени, и последующего обмена расчётными данными между ними (технология co-simulation, см. обзор современного состояния этой темы в [2]). Именно на такой технологии решения построена `система моделирования SimInTech `_, однако ряд её особенностей не позволил реализовать в ней модель системы ориентации, и было принято решение переписать модели на Python, в результате чего был разработан диспетчер для совместного выполнения моделей, рассчитываемых различными алгоритмами. Почему не SimInTech ------------------- Сложности реализации в SimInTech были связаны со следующими моментами: * реализацией сложных алгоритмов обработки данных и управления * моделирование в ОС Linux SimInTech это система с компиляцией исходного кода в машинные коды, что позволяет выполнять моделирование очень быстро. Для задания собственных алгоритмов управления, содержащих сложные операции обработки сигналов датчиков и расчёта управления, используется блок <<Язык программирования>>, в котором можно описать алгоритм на встроенном языке программирования. Язык представляет собой диалект языка Pascal, адаптированный для задач программирования имитационных моделей, работающих во времени. Например, в нем введены секции кода, выполняющиеся на отдельных этапах моделирования (компиляция, инициализация, финализация); есть возможности для обращения к системным функциям и переменным; работа с базой данных сигналов моделей и ряд других. В следующих четырех абзацах будет описание моментов, которые не позволили использовать SimInTech; пожалуйста, не сочтите меня за высокомерного критикующего фарисея, а на самом деле думаю, что просто квалификации не хватило правильно применить инструмент. У ребят объективно все очень проработано. Язык в SimInTech достаточно глубоко специализирован, и не является полностью совместимым с языком Pascal (например, нет возможности задавать сложные типы переменных и объекты); на него нет сторонних компиляторов и отладчиков. Отладка же в среде программирования SimInTech реализована не слишком удобно, хотя все основные инструменты есть (точки останова, просмотр состояния переменных и др); статический анализатор кода (линтер) не реализован. По сообщениям отладчика и компилятора об ошибках сложно установить природу и причину ошибки - они малоинформативны. Принципиально возможно разработать блок с собственными алгоритмами, используя внешние для SimInTech средства (например, в виде динамической библиотеки .dll), но процедура создания описана только для Windows, с использованием среды Delphi. В 2020г. система SimInTech была успешно `портирована на ОС Linux `_ (ребята, огромное спасибо!), но, к сожалению, до настоящего времени отсутствует описание процедуры создания и подключения блоков в виде динамических .so библиотек. В последних версиях SimInTech появилась интеграция с языком программирования Python - можно разово (например, при инициализации) выполнить скрипт. Выполняется он внешним для SimInTech интерпретатором Python. Поскольку код Python не является компилируемым, при циклическом выполнении он будет выполняться достаточно долго (запуск интерпретатора, передача скрипта и параметров, выполнение, передача результатов). Кроме этого, при таком способе запуска крайне сложно реализовать хранение состояния объектов -- а именно это требовалось для алгоритма навигации. Основной код алгоритма навигации был написан и отлажен на Python, с использованием библиотек numpy и OreKit. Была предпринята попытка переписать хотя бы часть кода на встроенном языке SimInTech, но указанные выше сложности не позволили сделать эффективно работающий алгоритм. Тогда алгоритм на Python был подключен к пакету проектов SimInTech посредством обмена udp-пакетами. Был написан простейший сервер, принимающий udp-пакет с значением модельного времени и текущими сигналами состояния КА и датчиков; после расчёта кватерниона положения он отправлял результат обратно в SimInTech, где они складывались в базу сигналов. На стороне SimInTech при этом вызывался клиент, с периодичностью работы алгоритма. Это стандартный приём, используемый при необходимости совместной работы алгоритмов из разных систем. Когда же началось программирование наблюдателя (фильтр Калмана и служебные модели), стало видно, что в SimInTech остаётся только достаточно простая модель физики поворотов КА; возникла идея написать как её, так и диспетчер для запуска пакета алгоритмов на Python. Библиографические и иные ссылки ------------------------------- Документация, исходные коды диспетчера, примеры работы выложены на `GitFlic `_. 1. Ovchinnikov M. Yu., Roldugin D. S. A survey on active magnetic attitude control algorithms for small satellites // Progress in Aerospace Sciences, 2019, Vol. 109, p. 100546 2. Co-Simulation: A Survey / Gomes C., Thule C., Broman D. et al. // ACM Computing Surveys, 2018, Vol. 51, No. , p. 1-33 3. Lelekov A.T., Kureshov V.A. Remote Laboratory for the Design of Attitude Control Systems for Small Satellites // Instruments and Experimental Techniques, 2022, vol. 65, No. 5, 858-863 P.S. Я православный христианин. Все что у меня есть (способности, время и т.д.) дано на время, чтобы это всё было реализовано во благо и во славу Божию. Поэтому, стараясь выполнить свое предназначение, эту работу я делаю -- во славу Божию.