Техник Шоу Сервер
Сервер для управления группой дронов во время шоу. Отображает их состояние в реальном времени, позволяет отправлять команды, файлы анимаций и конфигураций.
Содержание
- Требования и запуск
- Структура проекта
- Общее устройство
- Главное окно
- Таблица дронов
- Кнопки управления
- Меню
- Типичные сценарии работы
1. Требования и запуск
Что нужно для запуска
- Python 3.9.7
- Менеджер виртуальных окружений (
venv или pyenv)
- Установленные библиотеки из
requirements.txt
Файл requirements.txt содержит:
configobj==5.0.6
PyQt5
PyQt5-sip
Quamash==0.6.1
selectors2==2.0.1
six==1.13.0
Как запустить
git clone https://github.com/Gromodzila/Technic-Show-Server.git
cd Technic-Show-Server
python3.9 -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt
cd server
python server.py
После запуска откроется главное окно с таблицей дронов и панелью управления.
2. Структура проекта
TehnicShowServer/
├── server/ # серверная часть
│ ├── server.py # точка входа, GUI, логика интерфейса
│ ├── config/ # конфигурационные файлы
│ │ ├── server.ini
│ │ └── spec/configspec_server.ini
│ ├── icons/ # иконки и splash-картинки
│ └── modules/ # модули сервера
│ ├── server_core.py # сетевое ядро: Server, Client
│ ├── copter_table.py # виджет таблицы дронов
│ ├── copter_table_models.py # модель данных дронов
│ ├── config_editor_models.py # редактор конфигов
│ ├── visual_land_dialog.py # диалог визуальной посадки
│ └── ui/ # сгенерированные формы PyQt5
│
├── lib/ # общие библиотеки
│ ├── __init__.py
│ ├── messaging.py # протокол обмена сообщениями
│ ├── config.py # работа с конфигурациями
│ └── lib.py # функция b_partial
│
└── requirements.txt
3. Общее устройство
Сервер состоит из двух частей:
- Сетевое ядро — слушает TCP-порт, принимает подключения от дронов, ведёт обмен сообщениями в формате JSON, поддерживает heartbeat и восстановление соединения.
- Графический интерфейс — окно оператора: таблица дронов, кнопки команд, меню, диалоги.
При запуске сервер:
- Читает конфигурацию из
config/server.ini
- Открывает TCP-порт (
25000 по умолчанию) для подключения дронов
- Запускает фоновый поток обработки клиентов
- Опционально рассылает UDP-broadcast, чтобы дроны нашли сервер автоматически
- Показывает главное окно оператора
Каждый дрон — отдельный TCP-клиент. Сервер может работать одновременно с десятками подключённых дронов.
4. Главное окно
Окно делится на три области:
- Центр — таблица дронов (занимает большую часть экрана)
- Справа — вертикальная колонка кнопок управления
- Сверху — строка меню
5. Таблица дронов
Каждая строка — один подключённый дрон. Первый столбец — флажок выбора.
Цвета ячеек
Цвет фона ячейки показывает статус проверки:
| Цвет |
Значение |
| Зелёный |
Проверка пройдена |
| Красный |
Проверка не пройдена |
| Жёлтый |
Данные отсутствуют |
| Маджента |
Устаревшая версия прошивки или конфигурации |
Столбцы
| Столбец |
Описание |
| Флажок(галочка) |
Дрон выбран. Команды применяются только к выбранным дронам |
| copter ID |
Имя дрона, например technic-0001 |
| version |
Версия git-коммита прошивки |
| configuration |
Версия конфигурационного файла |
| animation ID |
Название текущей анимации и её статус |
| battery |
Напряжение и процент заряда |
| FCU status |
Состояние полётного контроллера: STANDBY, ACTIVE и др. |
| sensors |
Статус калибровки сенсоров |
| mode |
Режим полёта |
| checks |
Результат самопроверки. Двойной клик открывает подробный отчёт |
| current x y z yaw frame_id |
Текущие координаты и ориентация дрона |
| start x y z yaw action delay |
Стартовая точка для анимации |
| last task |
Последнее выполненное задание |
| dt |
Разница времени между дроном и сервером |
Работа с таблицей
- Левый клик по флажку — выбрать или снять выбор дрона
- Двойной клик по
copter ID — открыть диалог редактирования имени
- Двойной клик по
checks — показать детальный отчёт самопроверки
- Правый клик по заголовку столбца — меню настройки видимых столбцов, их порядка и ширины
- Правый клик по ячейке
configuration — контекстное меню:
- Edit config — открыть редактор конфигурации дрона
- Copy config to selected — скопировать конфиг на другие выбранные дроны
Пресеты отображения столбцов (например, «Батарея и позиция», «Полный отчёт») сохраняются в конфиге сервера.
6. Кнопки управления
Все кнопки находятся в правой колонке главного окна и сгруппированы по назначению.
Панель запуска
| Элемент |
Действие |
| Start after |
Задержка в секундах перед стартом анимации |
| Preflight check |
Запрос телеметрии у выбранных дронов. Обновляет статусы в таблице |
| Start animation |
Запуск анимации: дроны взлетают и начинают движение через заданную задержку |
| Pause |
Пауза. При повторном нажатии превращается в Resume и продолжает анимацию с текущего места |
Панель посадки
| Элемент |
Действие |
| Land selected |
Посадка выбранных дронов. Плавное снижение в текущей точке |
| Land ALL |
Посадка всех подключённых дронов одновременно |
| Emergency land |
Аварийная посадка выбранных дронов. Быстрее обычной, без плавных траекторий |
Панель управления двигателями
| Элемент |
Действие |
| Disarm ALL |
Отключение моторов у всех дронов. Только после посадки |
| Disarm selected |
Отключение моторов у выбранных дронов. Только после посадки |
| Test leds |
Тест LED-подсветки. Помогает найти конкретный дрон в воздухе |
| Takeoff |
Взлёт выбранных дронов немедленно, без задержки |
| Z |
Галочка: взлёт на указанную высоту в метрах. Без галочки — высота по умолчанию |
| Flip |
Переворот (сальто) выбранных дронов. Только при активном FCU |
Панель обслуживания
| Элемент |
Действие |
| Reboot FCU |
Перезагрузка полётного контроллера. Дрон должен стоять неподвижно |
| Calibrate gyro |
Калибровка гироскопа. Дрон должен стоять неподвижно |
| Calibrate level |
Калибровка горизонта. Дрон должен стоять неподвижно |
7. Меню
Меню Server
| Пункт |
Действие |
| Edit server config |
Открыть редактор конфигурации сервера config/server.ini |
| Edit any config |
Открыть редактор любого .ini файла |
| Update server git |
Обновить исходники через git fetch и git pull --rebase |
| Restart server |
Перезапустить сервер |
Меню Table
| Пункт |
Действие |
| Toggle select |
Если выбраны все — снять выделение, иначе — выбрать всех |
| Select all |
Поставить галочки у всех дронов |
| Deselect all |
Снять галочки у всех дронов |
| Remove selected drones |
Убрать выбранных дронов из таблицы |
| Configure columns |
Открыть редактор пресетов столбцов |
Меню Selected drones
Команды применяются к дронам, у которых стоит галочка.
Подменю Send
| Пункт |
Действие |
| Animations |
Выбрать папку с анимациями .csv или .txt. Каждый файл уходит дрону, чей ID есть в имени файла |
| Camera calibrations |
Выбрать папку с калибровками камеры .yaml. Аналогичное сопоставление по ID |
| Aruco map |
Отправить карту ArUco. После отправки сервис technic на дроне перезапускается |
| Animation |
Отправить один файл анимации сразу всем выбранным дронам |
| Configuration |
Отправить .ini-файл конфигурации. Режимы Modify или Rewrite |
| Launch files folder |
Отправить папку с .launch и .yaml файлами |
| FCU parameters file |
Отправить файл параметров PX4 .params и запросить загрузку |
| File |
Отправить любой файл на любой путь дрона |
| Command |
Отправить произвольную команду дрону |
Прочее
| Пункт |
Действие |
| Retrive file |
Запросить файл с дрона и сохранить его локально |
Подменю Restart service
| Пункт |
Действие |
| chrony |
Перезапустить службу синхронизации времени на дроне |
| technic |
Перезапустить ROS-сервис technic |
| technic-show |
Перезапустить сервис technic-show |
Старт и высота
| Пункт |
Действие |
| Set start X Y to current position |
Записать текущие координаты как стартовую точку |
| Reset start position |
Сбросить стартовую точку к значению по умолчанию |
| Set Z offset to ground |
Записать текущее значение Z как смещение земли |
| Reset Z offset |
Сбросить смещение земли |
Прочее
| Пункт |
Действие |
| Reboot |
Перезагрузка операционной системы дрона. Занимает 30–60 секунд |
8. Типичные сценарии работы
Подготовка к шоу
- Включить дроны, дождаться их подключения. Строки появятся в таблице
- Поставить галочки у нужных дронов
- Нажать Preflight check. Убедиться, что ключевые столбцы зелёные
- Отправить файлы: анимации, конфигурации, карту ArUco
- Проверить, что версия прошивки и конфигурации совпадает у всех дронов
Запуск шоу
- Установить задержку Start after (например, 10 секунд)
- Нажать Start animation
- Следить за таблицей. При необходимости — Pause
Аварийные ситуации
- Один дрон ведёт себя нештатно: перехватить его через ручное управление
- Полный сбой: Land ALL или Emergency land(ознакомится перед применением)
Обслуживание
- Перезагрузить полётный контроллер — Reboot FCU
- Перезапустить ROS-сервис — Selected drones → Restart service → technic