mirror of
https://github.com/CopterExpress/clever-show.git
synced 2026-05-26 23:19:33 +00:00
135 lines
29 KiB
Markdown
135 lines
29 KiB
Markdown
# Настройка сервера
|
||
## Файл конфигурации
|
||
Конфигурация сервера задаётся в файле Server/server_config.ini, имеющем вид (по умолчанию):
|
||
```ini
|
||
[SERVER]
|
||
port = 25000
|
||
buffer_size = 1024
|
||
remove_disconnected = False
|
||
|
||
[BROADCAST]
|
||
use_broadcast = True
|
||
broadcast_port = 8181
|
||
broadcast_delay = 5.0
|
||
|
||
[NTP]
|
||
use_ntp = False
|
||
host = ntp1.stratum2.ru
|
||
port = 123
|
||
|
||
[CHECKS]
|
||
battery_percentage_min = 50.0
|
||
start_pos_delta_max = 1.0
|
||
time_delta_max = 1.0
|
||
```
|
||
Конфигурация по умолчанию является полностью работоспособной и не требует изменений для быстрого начала работы системы.
|
||
### Раздел 'Server'
|
||
В этом разделе задаются параметры сетевого взаимодействия сервера, доступны следующие параметры:
|
||
|
||
* `port` - TCP порт, на котором будут приниматься входящие соединения от клиентов (коптеров). При использовании broadcast данный порт будет сконфигурирован у клиента автоматически. *Рекомендуется изменить значение по умолчанию в целях безопасности* (любое пятизначное и более число, если другое ПО не использует выбранный порт).
|
||
* `buffer_size` - размер буфера при приёме и передаче данных. *Не рекомендуется изменять. Рекомендуется использовать единое значение у сервера и клиентов.*
|
||
* `remove_disconnected` - Определяет поведение при разрыве связи с клиентом. При значении `True` вся информация о клиенте *будет удалена* как из внутренней памяти, так и *из таблицы*. *Это может привести к 'скачкам' таблицы при отключении клиентов.* При значении `False` отключённые клиенты *не будут* удалены из таблицы, но будут отображены с подсвечиванием ячейки `copter ID` красным цветом. Все данные будут сохранены. При переподключении клиента, он будет ассоциирован с той же строкой таблицы, а ячейка со значением `copter ID` вновь станет зелёного цвета.
|
||
|
||
### Раздел 'Checks'
|
||
* `battery_percentage_min` - Минимальный заряд батарии коптера *в процентах* (дробное значение от 0 до 100), допустимый для взлёта. Значение меньше указанного будет отмечено как неудовлетворительное (см. раздел таблицы).
|
||
* `start_pos_delta_max` - Максимальное расстояние *в метрах* (дробное значение от 0 до 'inf') от текущего положения коптера до его точки взлёта в файле анимации, допустимое для взлёта. Допустимо использование строки 'inf' для любого допустимого расстояния. Значение больше указанного будет отмечено как неудовлетворительное (см. раздел таблицы).
|
||
* `time_delta_max` - Максимальная разница (абсолютное значение) *в секундах* (дробное значение от 0 до 'inf') между временем сервера и клиента (включая сетевую задержку), допустимая для взлёта. Допустимо использование строки 'inf' для любой допустимой разницы. Значение больше указанного будет отмечено как неудовлетворительное (см. раздел таблицы).
|
||
|
||
### Раздел 'Broadcast'
|
||
Сервер использует UDP broadcast (на адрес 255.255.255.255 с выбранным портом), чтобы передавать клиентам (коптерам) актуальную информацию о конфигурации сервера и собственном адресе сервера для подключения (IP адрес и порт сервера). Таким образом, обеспечивается автоматическое подключение клиентов к серверу без необходимости дополнительной ручной конфигурации. В данном разделе задаются параметры этого механизма.
|
||
* `use_broadcast` - будут ли использованы broadcast'ы для передачи данных (при значении `False` broadcast'ы НЕ будут отправляться). Используйте `False` в случае повышенных требований безопасности, перегруженности сети или невозможности передачи по широковещательному каналу (из-за конфигурации брандмауэра или сети)
|
||
* `broadcast_port` - UDP порт, по которому будет осуществляться отправка сообщений. *Рекомендуется изменить значение по умолчанию в целях безопасности.* **Внимание!** При изменении этого параметра клиенты НЕ смогут принимать сообщения автоконфигурации до изменения (вручную) соответствующего параметра в конфигурации клиента на равное значение.
|
||
* `broadcast_delay` - периодичность (в секундах, целочисленное значение), с которой будет происходить отправка broadcast сообщений. Увеличьте задержку для уменьшения нагрузки на сеть. *ИЛИ* Уменьшите задержку для уменьшения времени отклика и подключения при первом запуске клиентов.
|
||
### Раздел 'NTP'
|
||
Помимо синхронизации времени (с миллисекундной точностью) с помощью пакета chrony, предоставляется альтернатива - возможность использования внешних (при наличии соединения локальной сети с интернетом) или внутрисетевых NTP-серверов. **Внимание!** Для корректной работы системы, и сервер, *и* клиенты должны использовать единый способ синхронизации времени (набор параметров в этом разделе). Данный раздел полностью унифицирован и для сервера, и для клиентов.
|
||
* `use_ntp` - Определяет, будет ли использоваться синхронизация времени с помощью NTP. (при значении `False` будет использовано локальное время ОС (синхронизируется автоматически при использовании chrony). *Рекомендуется использование crhony, а не NTP*
|
||
* `host` - имя хоста или IP адрес NTP сервера (локального или удаленного)
|
||
* `port` - порт, используемый NTP сервером
|
||
|
||
# Интерфейс сервера
|
||
Сервер имеет визуальный графический интерфейс для удобства взаимодействия.
|
||
## Глоссарий
|
||
Некоторые термины, используемые для краткости записи:
|
||
* Готовый [к полёту] коптер:
|
||
Прошедший предполётную проверку (`Preflight check`) и имеющий удовлетворительные результаты по всем необходимым столбцам (зелёные ячейки в таблице). Учитываются проверки аккумулятора и сообщения selfcheck.
|
||
* Не готовый [к полёту] коптер:
|
||
НЕ прошедший предполётную проверку (`Preflight check`) (не имеющий её результатов в таблице - жёлтые ячейки) или же имеющий НЕудовлетворительные результаты (красные ячейки в таблице). Учитываются проверки аккумулятора и сообщения selfcheck.
|
||
|
||
## Меню
|
||
### Раздел 'Server'
|
||
|
||

|
||
|
||
Данный раздел содержит несколько утилит по отправке различных данных на *выбранные* клиенты. **Внимание!** Не пытайтесь использовать данные команды во время полёта коптеров!
|
||
* `Send Animations` - отправка файлов анимации (экспортированных аддоном к Blender) на выбранные клиенты (коптеры). В диалоговом окне необходимо выбрать *папку*, содержащую файлы анимации (автоматически создается аддоном). Каждый файл анимации будет отправлен на клиент с именем (copter ID), соответствующим имени файла без расширения.
|
||
* `Send Configurations` - отправка *единого* файла конфигурации клиента на все выбранные клиенты. В диалоговом окне необходимо выбрать *один* файл конфигурации в установленном формате. Файл конфигурации может быть неполным, в таком случае будут перезаписаны лишь указанные в файле параметры. *Не рекомендуется использовать данное действие для массовой перезаписи `Copter ID`, кроме значения `/hostname`.* **Внимание!** НЕ отправляйте на клиенты файл конфигурации сервера.
|
||
* `Send Launch files ` - отправка launch-файлов конфигурации сервиса `clever`. . В диалоговом окне необходимо выбрать *папку*, содержащую файлы конфигурации с расширением `.launch`. Все файлы с таким расширением будут отправлены *на каждый* из клиентов. **Внимание!** Существующие файлы конфигурации на коптерах будут перезаписаны, однако файлы, не отправленные сервером, не будут удалены или модифицированы.
|
||
* `Send Aruco map` - отправка *единого* файла карты aruco маркеров на все выбранные клиенты. В диалоговом окне необходимо выбрать *один* файл карты в установленном формате. Файл на клиенте будет перезаписан. После получения и записи файла клиент автоматически перезапустит сервис `clever`. Для возобновления работоспособности полётных функций и получения некоторых значений телеметрии *необходимо подождать* некоторое время до полного запуска сервиса.
|
||
* `Send Camera Calibrations` - отправка yaml-файлов калибрации камеры для сервиса `clever`. В диалоговом окне необходимо выбрать *папку*, содержащую файлы конфигурации с расширением `.yaml`. Каждый файл калибрации будет отправлен на клиент с именем (copter ID), соответствующим имени файла без расширения. **Внимание!** Существующий файл калибрации на коптере будет перезаписан.
|
||
* `Send FCU parameters` - отправка и запись *единого* файла конфигураций полётного контроллера (FCU) на все выбранные клиенты. В диалоговом окне необходимо выбрать *один* файл параметров в установленном формате. Параметры на полётном контроллере будут перезаписаны. После получения и записи файла клиент автоматически.
|
||
* `Developer mode`: **Внимание!** Используйте данные действия с большой осторожностью
|
||
* `Send any file` - отправка *одного* любого файла на все выбранные клиенты. В диалоговом окне необходимо выбрать *один* файл. Далее, необходимо указать путь, по которому данный файл будет записан на клиенты (не включая имя файла)
|
||
* `Send any command` - отправка и выполнение любой команды терминала на все выбранные клиенты. В диалоговом окне необходимо ввести требуемую команду. Команды *могут* использовать `sudo`-права.
|
||
* `Select all drones` (`Ctrl+A`) Выделяет все коптеры в таблице. При следующем вызове команды, выделение всех коптеров будет отменено.
|
||
|
||
### Раздел 'Drone'
|
||
|
||

|
||
|
||
* `Set Z offfset to ground` - Устанавливает собственный offset (отступ) каждого из выбранных клиентов на значение, равное текущему положению по координате Z
|
||
* `Reset Z offfset` - Устанавливает собственный offset (отступ) каждого из выбранных клиентов на значение `0`
|
||
* `Restart chrony` - Перезапускает сервис синхронизации времени `chrony` на выбранных клиентах.
|
||
* `Remove from table` - Удаляет выбранные коптеры из таблицы. **Внимание!** В случае, если клиент был подключен, будет произведено отключение. В случае если удалённый таким образом клиент исправно функционировал, он переподключится в кратчайшие сроки.
|
||
* `Developer mode`: **Внимание!** Используйте данные действия с большой осторожностью
|
||
* `Restart clever service` - Перезапускает сервис `clever` на выбранных клиентах. Для возобновления работоспособности полётных функций и получения некоторых значений телеметрии *необходимо подождать* некоторое время до полного запуска сервиса.
|
||
* `Restart clever-show service` - Перезапускает сервис шоу коптеров (клиента) `clever-show` на выбранных клиентах. Во время перезапуска клиенты будет отключены.
|
||
* `Update clever-show git` - Обновляет папку репозитория `clever-show` на выбранных клиентах. Файлы конфигурации клиента *не будут* перезаписаны. **Внимание!** Для того, чтобы изменения вступили в силу, *необходимо* перезапустить сервис `clever-show`.
|
||
* `Reboot all` - Полностью перезагружает систему выбранных клиентов. Во время перезапуска клиенты будет отключены.
|
||
|
||
## Боковая панель инструментов (команд)
|
||
### Управление
|
||
Данный раздел команд предназначен для выскоуровневого управления роем дронов.
|
||
* Кнопка `Preflight check` - Все выбранные клиенты выполняют самодиагностику и предполётную проверку. Результаты, вместе с другими параметрами клиента, будут отображены в таблице по мере поступления данных.
|
||
* Спинбокс `Start after N seconds` - Задаёт время задержки до синхронного запуска выполнения анимаций коптерами. *Не рекомендуется использовать `0` (нулевую задержку). Для загруженных\подверженных помехам\имеющих большой пинг сетей рекомендуется использовать бо́льшие значения (>5 секунд).*
|
||
* Кнопка `Start animation` - По истечению заданного в `Start after` времени, все выбранные коптеры совершат **взлёт**ные процедуры, перелетают на стартовые точки своих анимаций и *синхронно* выполнят полётное задание (анимацию). По окончанию анимации все коптеры выполнят посадку *на месте окончания своей анимации*. Кнопка деактивирована по умолчанию и если среди выбранных коптеров есть *не готовые коптеры* (все выбранные коптеры должны быть готовыми). *При нажатии запрашивается дополнительное предупреждение!*
|
||
* Кнопка `Pause` - Ставит на 'паузу' все выбранные коптеры (их очередь заданий): приостанавливается выполнение любого полётного задания. *Используйте в чрезвычайных случаях.* **Внимание!** Данная команда НЕ прерывает полёт коптера в уже указанную точку (например: элементы взлёта, посадки; следование до начальной точки анимации и т.д.)
|
||
* Кнопка `Resume` - Все выбранные коптеры *синхронизированно* продолжат выполнение своих очередей заданий (например: исполнение анимации)
|
||
* Кнопка `Stop` - Прерывает выполнение полётных заданий *ВСЕХ* подключенных коптеров. Сбрасывает очередь заданий - *действие необратимо*. **Используйте в экстренных случаях как одно из средств перехвата.** **Внимание!** Данная команда НЕ прерывает полёт коптера в уже указанную точку (например: элементы взлёта, посадки; следование до начальной точки анимации и т.д.)
|
||
* Кнопка `Emergency land` - Открывает диалоговое окно дополнительного модуля быстрого выбора коптера и его последующей экстренной посадки \ дизарма. *Смотреть далее.*
|
||
### Полётные функции (команды)
|
||
В данном разделе находятся команды, позволяющие напрямую управлять коптером(ами).
|
||
* Кнопка `Test leds` - Все выбранные коптеры выполняют двухсекундную анимацию (бегущие точки) светодиодной лентой (белым цветом). Команда *безопасна* и может быть использована для проверки работы светодиодных лент \ качества и задержки подключения к серверу \ определения соответствия коптера и его `Copter ID` в таблице.
|
||
* Кнопка `Takeoff` - Все выбранные коптеры **совершают взлёт**, после чего зависают над точкой взлёта. Аналогично `Start animation`, кнопка активна, *только* если все выбранные коптеры готовы. **Внимание!** Используйте осторожно, соблюдайте технику безопасности. Не применяйте во время выполнения других полётных функций!
|
||
* Кнопка `Flip` - Все выбранные коптеры **совершают флип (flip)** - переворот на 360 градусов вокруг одной из *горизонтальных* осей. **Внимание!** Используйте осторожно, соблюдайте технику безопасности. *Для исполнения флипа коптер должен иметь минимальную высоту >2м.* Не применяйте во время выполнения других полётных функций!
|
||
* Кнопка `Land` - ВСЕ коптеры прекращают выполнение своих полётных заданий, очищают очередь заданий и немедленно *переходят в режим посадки.* **Используйте в экстренных случаях как одно из средств перехвата.**
|
||
* Кнопка `Diarm` - ВСЕ коптеры прекращают выполнение своих полётных заданий, очищают очередь заданий и немедленно *отключают моторы (disarm).* ==Это может привести к падению и повреждению коптеров== **Используйте в крайних случаях как последнее из средств перехвата.**
|
||
|
||
## Таблица состояния коптеров (клиентов)
|
||
При первом подключении клиента к серверу в таблицу добавляется строка для отображения состояния клиента, содержащая начальные данные, переданные клиентом при подключении (`Copter ID`). Строки НЕ удаляются после зарегистрированного отключения клиента. Строки можно сортировать по возрастанию \ убыванию значений любого из столбцов (кликнув по заголовку столбца).
|
||
|
||
Ячейки таблицы подсвечиваются:
|
||
* жёлтым, если необходимое значение отсутствует
|
||
* красным, если значение (состояние) ячейки неудовлетворительно (согласно внутренним проверкам)
|
||
* зелёным, если значение (состояние) ячейки удовлетворительно (согласно внутренним проверкам)
|
||
### Столбцы таблицы
|
||
* `copter ID` - имя (идентификатор) клиента. Может быт сконфигурирован на стороне клиента. Отображается сразу при подключении клиента. Рядом с каждым ID коптера расположен чекбокс - коптеры, чей ID отмечен чекбоксом положительно (галочка), считаются *выбранными*.
|
||
* `animation ID` - внутреннее название файла анимации, подгруженного клиентом. Отображается после выполнения `selfcheck`. *Проверьте соответствие названий файлов анимаций у коптеров*
|
||
* `battery V` - абсолютное значение напряжения на аккумуляторе коптера (в Вольтах, по данным полётного контроллера). *Убедитесь, что напряжение не ниже порогового для вашего аккумулятора.* **При критически низком значении коптер считается не готовым** - блокируется возможность взлёта и старта анимации.
|
||
* `battery %` - относительное значение напряжения на аккумуляторе коптера. Значение рассчитывается по среднему напряжению (по данным полётного контроллера) на ячейку аккумулятора (банку). *Убедитесь, что уровень заряда перед вылетом не менее 30%* **При критически низком значении коптер считается не готовым** - блокируется возможность взлёта и старта анимации.
|
||
* `selfcheck` - Все дополнительные сообщения и ошибки при самодиагностике (*Смотреть далее.*). При успешном прохождении самодиагностики без ошибок выводится значение `OK`, ячейка подсвечивается зелёным цветом. **При наличии ошибок коптер считается не готовым** - блокируется возможность взлёта и старта анимации.
|
||
* `time delta` - Разница между временем на сервере и клиенте (в секундах). *При слишком больших значениях сигнализирует об отсутствии синхронизации времени между коптером и клиентом!* В это значение так же входит сетевая задержка.
|
||
|
||
# Дополнительные операции
|
||
## Selfcheck
|
||
..
|
||
|
||
## Emergency land
|
||
Модуль экстренной посадки/дизарма, предназначенный для быстрого поиска оператором визуально неисправного коптера методом бинарного поиска
|
||
### Интерфейс
|
||
* Зелёная кнопка `1` - ...
|
||
* Красная кнопка `2` - ...
|
||
* Кнопка `Land` - все коптеры в выбранной ('зелёной') группе совершат процедуру экстренной посадки (аналогично кнопке `Land` в панели инструментов).
|
||
* Кнопка `Disarm` - все коптеры в выбранной ('зелёной') группе *немедленно отключают моторы (disarm).* (аналогично кнопке `Disarm` в панели инструментов) ==Это может привести к падению и повреждению коптеров==.
|
||
### Алгоритм использования
|
||
* ...
|