Разработка программных средств отображения телеметрии стратосферных спутников
Авторы: Медведев Сергей Игоревич, Белокопытова Лариса Алексеевна
Научный руководитель: Алешко Роман Александрович
Рубрика: 7. Технические науки
Опубликовано в
C международная научная конференция «Исследования молодых ученых» (Казань, апрель 2025)
Дата публикации: 25.03.2025
Статья просмотрена: 2 раза
Библиографическое описание:
Медведев, С. И. Разработка программных средств отображения телеметрии стратосферных спутников / С. И. Медведев, Л. А. Белокопытова. — Текст : непосредственный // Исследования молодых ученых : материалы C Междунар. науч. конф. (г. Казань, апрель 2025 г.). — Казань : Молодой ученый, 2025. — URL: https://moluch.ru/conf/stud/archive/534/18897/ (дата обращения: 03.04.2025).
Препринт статьи
В данной статье описывается разработка программного обеспечения для отображения телеметрических данных стратосферных спутников. Приложение реализовано на языке Python с использованием библиотеки PySide6 для создания графического интерфейса, а для дизайна окон применён PyQTDesigner. Программа обеспечивает прием и обработку данных в формате JSON, поступающих с бортовых приборов, таких как дозиметр, барометр, компас, гироскоп, акселерометр, GPS и датчик температуры и влажности. Для визуализации данных используются карты (библиотека folium), 3D-визуализация наклонов, компаса и акселерометра (с применением VTK и matplotlib), а данные сохраняются в базу данных SQLite. Результаты экспериментов показали, что разработанное ПО позволяет в реальном времени отслеживать параметры полёта, проводить анализ и отображение телеметрии.
Ключевые слова : стратосферный спутник, телеметрия, Python, PyQt, VTK, SQLite, многопоточность.
Введение
Стратосферные спутники — это аппараты, работающие в ближнем космосе (высота 20–50 км), что требует точного мониторинга их состояния. Телеметрические данные включают параметры ориентации, показания датчиков, координаты и энергопотребление. Для их обработки и визуализации необходимо программное обеспечение, способное работать в реальном времени и предоставлять интуитивно понятный интерфейс. В данной статье представлено решение, разработанное на Python с использованием библиотек.
Методология
Выбор инструментов:
— Python выбран благодаря богатой экосистеме библиотек;
— PySide6 (Qt) обеспечивает создание графического интерфейса;
— VTK используется для 3D-визуализации ориентации аппарата;
— Folium отображает траекторию движения на карте;
— SQLite сохраняет историю телеметрии;
— Matplotlib интегрирован для построения графиков ускорений.
Архитектура приложения
Приложение состоит из следующих модулей:
— Чтение данных: поддержка COM-порта и файлов JSON;
— Обработка данных: парсинг JSON, валидация, преобразование и отображение.
Визуализация:
— 3D-виджеты (наклон спутника, компас, акселерометр);
— Карта с маршрутом;
— Текстовые показания датчиков.
Сохранение данных: запись в SQLite с разделением на таблицы по времени сеанса.
Для избежания блокировки интерфейса при обработке данных используется многопоточность на основе QThread.
Приложение разделено на несколько модулей:
— TelemetryViewer: Главное окно приложения, в котором объединяются все виджеты и компоненты;
— MapWidget: Виджет для отображения карты с маршрутом, реализованный с использованием библиотеки folium и элемента QWebEngineView;
— TiltWidget: 3D-визуализация наклонов спутника с использованием VTK;
— CompassWidget: 3D-визуализация компаса, также основанная на VTK.
— AccelWidget: Отображение данных акселерометра с помощью matplotlib;
— SerialReader и DataReaderThread: Потоки для чтения телеметрических данных из последовательного порта и файлов;
— DatabaseManager: Модуль для работы с базой данных SQLite, в которой хранятся полученные данные.
Реализация
Главное окно
Интерфейс пользователя был разработан с использованием PyQTDesigner, что позволило создать современное и интуитивно понятное окно приложения. При запуске пользователь видит окно с различными панелями:
Текстовые данные (температура, высота, скорость, заряд батареи и т. д.),
Карта с маршрутом полёта,
3D-визуализации:
— Виджет наклона (TiltWidget),
— Виджет компаса (CompassWidget),
— Виджет акселерометра (AccelWidget).
Макет приложения имеет вид рис. 1.
Рис. 1. Макет приложения
Описание протокола телеметрии
Со спутника поступают сообщения в формате JSON, пример которого:
{«dr»:0.05»,ad»:0.24»,td»:23»,bat»:100»,mps»:0»,deg»:0»,chyx»:89.59»,chzx»:353.14»,tx»:0.16»,ty»:2.36»,tz»:-3.13»,tb»:29.1»,alt»:0.082966»,salt»:-17.80188»,cx»:925»,cy»:4002»,cz»:-327»,gx»:0»,gy»:0»,gz»:0»,ax»:0»,ay»:0»,az»:0»,gs»:true»,sc»:0»,d»:29»,mh»:1»,y»:2025»,hr»:15»,m»:14»,s»:5»,u»:4.56»,i»:3276.7»,p»:14942.5»,c»:26} {«pc»:19»,pres»:101544»,t»:24.2»,h»:24.6»,lat»:0»,lng»:0»,galt»:0}
Краткое описание ключевых параметров:
Дозиметр: ad — накопленная доза, dr — доза в час, td — температура дозиметра, bat — заряд батареи.
Барометр: tb — температура, pres — давление, alt — высота относительно начальной, salt — абсолютная высота над уровнем моря.
Датчик тока и напряжения: u — напряжение, i — ток, p — мощность.
Компас: cx, cy, cz — компоненты, chyx, chzx — направления.
Гироскоп и акселерометр: gx, gy, gz — угловые скорости, ax, ay, az — ускорения, tx, ty, tz — углы наклона.
GPS: gs — статус, lat — широта, lng — долгота, mps — скорость, deg — курс, galt — высота GPS.
Датчик температуры и влажности: t — температура, h — влажность.
Прочее: c — счётчик сообщений.
Чтение данных
SerialReader: поток для асинхронного чтения данных с COM-порта.
DataReaderThread: альтернативный поток для чтения из файла.
Данные передаются через сигналы data_received и data_ready.
Обработка телеметрии
Класс DataEntry хранит параметры, такие как температура (t), влажность (h), координаты (lat, lng), углы наклона (tx, ty, tz). Пример парсинга JSON:
telemetry_dict = json.loads(data)
telemetry = DataEntry(**telemetry_dict)
TiltWidget: отображает 3D-модель спутника с использованием VTK. Наклон обновляется через update_orientation().
transform.RotateX(ty)
transform.RotateY(tx)
CompassWidget: визуализирует направление с помощью 3D-стрелки.
AccelWidget: использует Matplotlib для отрисовки векторов ускорений.
На рис. 2 показана 3D-визуализация телеметрии.
Рис. 2. 3D-визуализация
Карта
Виджет MapWidget на основе Folium обновляет маршрут через JavaScript:
self.page().runJavaScript(f«updateMap({lat}, {lon});")
База данных
Класс DatabaseManager создает таблицы в SQLite, структура которых зависит от времени запуска. Данные сохраняются методом save_to_database().
Результаты
Приложение успешно демонстрирует прием телеметрических данных, их парсинг и сохранение в базе данных. На основе полученных данных приложение обновляет графический интерфейс в реальном времени:
Карта с маршрутом полёта обновляется с использованием JavaScript внутри HTML-страницы, отображаемой в QWebEngineView.
3D-визуализации реализованы с помощью VTK и matplotlib, что позволяет наблюдать динамику наклона спутника, работу компаса и данные акселерометра.
Обработка данных включает проверку наличия всех необходимых параметров и расчет дополнительных величин (например, расчет высоты по барометрическим данным).
В ходе испытаний было выявлено, что реализованная архитектура обеспечивает гибкость и масштабируемость системы. Использование потоков позволяет эффективно обрабатывать входящие данные, а модульная структура кода упрощает дальнейшее развитие и добавление новых функций.
Приложение имеет вид показанный на рис.3.
Рис. 3. Интерфейс приложения: панель параметров (слева), карта (центр), 3D-виджеты (над картой)
Заключение
Разработанное программное средство для отображения телеметрии стратосферных спутников демонстрирует высокую эффективность в сборе, обработке и визуализации данных в реальном времени. Применение Python и современных библиотек для построения графического интерфейса и 3D-визуализации позволило создать удобное и информативное приложение. В будущем возможно расширение функциональности за счет интеграции дополнительных модулей анализа, оптимизации алгоритмов обработки данных и поддержки новых протоколов связи. Дальнейшее развитие может включать:
— Добавление аналитических графиков.
— Реализацию алгоритмов прогнозирования.
— Поддержку сетевого взаимодействия.
Код проекта доступен в репозитории: https://github.com/MercuryKira/ArctickZond_telem_viewer.