docs: Review article about server

This commit is contained in:
Arthur Golubtsov
2019-12-24 19:45:25 +03:00
parent 4da5a91e53
commit bb8a90bc40

View File

@@ -1,11 +1,19 @@
# Настройка сервера
## Файл конфигурации
Конфигурация сервера задаётся в файле Server/server_config.ini, имеющем вид (по умолчанию):
Конфигурация сервера задаётся в файле [server_config.ini](../../Server/server_config.ini), имеющем следующий вид по умолчанию:
```ini
[SERVER]
port = 25000
buffer_size = 1024
remove_disconnected = False
[CHECKS]
battery_percentage_min = 50.0
start_pos_delta_max = 1.0
time_delta_max = 1.0
[BROADCAST]
use_broadcast = True
@@ -16,62 +24,70 @@ broadcast_delay = 5.0
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'
В этом разделе задаются параметры сетевого взаимодействия сервера, доступны следующие параметры:
### Раздел [SERVER]
В этом разделе задаются параметры сетевого взаимодействия сервера. Доступны следующие параметры:
* `port` - TCP порт, на котором будут приниматься входящие соединения от клиентов (коптеров). При использовании broadcast данный порт будет сконфигурирован у клиента автоматически. *Рекомендуется изменить значение по умолчанию в целях безопасности* (любое пятизначное и более число, если другое ПО не использует выбранный порт).
* `buffer_size` - размер буфера при приёме и передаче данных. *Не рекомендуется изменять. Рекомендуется использовать единое значение у сервера и клиентов.*
* `remove_disconnected` - Определяет поведение при разрыве связи с клиентом. При значении `True` вся информация о клиенте *будет удалена* как из внутренней памяти, так и *из таблицы*. *Это может привести к 'скачкам' таблицы при отключении клиентов.* При значении `False` отключённые клиенты *не будут* удалены из таблицы, но будут отображены с подсвечиванием ячейки `copter ID` красным цветом. Все данные будут сохранены. При переподключении клиента, он будет ассоциирован с той же строкой таблицы, а ячейка со значением `copter ID` вновь станет зелёного цвета.
* `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' для любой допустимой разницы. Значение больше указанного будет отмечено как неудовлетворительное (см. раздел таблицы).
### Раздел [CHECKS]
В этом разделе задаются параметры проверок коптера, которые регулируются на стороне сервера. Доступны следующие параметры:
* `battery_percentage_min` - Минимальный заряд батарии коптера, допустимый для взлёта. Указывается *в процентах* (дробное значение от 0 до 100). Значение меньше указанного будет отмечено в столбце `battery` как неудовлетворительное.
* `start_pos_delta_max` - Максимальное расстояние от текущего положения коптера до его точки взлёта в файле анимации, допустимое для взлёта. Указывается *в метрах* (дробное значение от 0 до 'inf'). Значение больше указанного будет отмечено в столбце `start x y z` как неудовлетворительное. Допустимо использование строки 'inf' для любого допустимого расстояния.
* `time_delta_max` - Максимальная разница (абсолютное значение) между временем сервера и клиента (включая сетевую задержку), допустимая для взлёта. Указывается *в секундах* (дробное значение от 0 до 'inf'). Значение больше указанного будет отмечено в столбце `dt` как неудовлетворительное.
### Раздел [BROADCAST]
Сервер может использовать UDP broadcast, чтобы передавать клиентам актуальную информацию о конфигурации сервера. Таким образом становится возможным автоматическое подключение клиентов к серверу без необходимости дополнительной ручной конфигурации. В данном разделе задаются параметры этого механизма:
### Раздел 'Broadcast'
Сервер использует UDP broadcast (на адрес 255.255.255.255 с выбранным портом), чтобы передавать клиентам (коптерам) актуальную информацию о конфигурации сервера и собственном адресе сервера для подключения (IP адрес и порт сервера). Таким образом, обеспечивается автоматическое подключение клиентов к серверу без необходимости дополнительной ручной конфигурации. В данном разделе задаются параметры этого механизма.
* `use_broadcast` - будут ли использованы broadcast'ы для передачи данных (при значении `False` broadcast'ы НЕ будут отправляться). Используйте `False` в случае повышенных требований безопасности, перегруженности сети или невозможности передачи по широковещательному каналу (из-за конфигурации брандмауэра или сети)
* `broadcast_port` - UDP порт, по которому будет осуществляться отправка сообщений. *Рекомендуется изменить значение по умолчанию в целях безопасности.* **Внимание!** При изменении этого параметра клиенты НЕ смогут принимать сообщения автоконфигурации до изменения (вручную) соответствующего параметра в конфигурации клиента на равное значение.
* `broadcast_delay` - периодичность (в секундах, целочисленное значение), с которой будет происходить отправка broadcast сообщений. Увеличьте задержку для уменьшения нагрузки на сеть. *ИЛИ* Уменьшите задержку для уменьшения времени отклика и подключения при первом запуске клиентов.
### Раздел 'NTP'
* `broadcast_delay` - периодичность (в секундах, целочисленное значение), с которой будет происходить отправка broadcast сообщений. Увеличьте задержку для уменьшения нагрузки на сеть. Уменьшите задержку для уменьшения времени отклика и подключения при первом запуске клиентов.
### Раздел [NTP]
Помимо синхронизации времени (с миллисекундной точностью) с помощью пакета chrony, предоставляется альтернатива - возможность использования внешних (при наличии соединения локальной сети с интернетом) или внутрисетевых NTP-серверов. **Внимание!** Для корректной работы системы, и сервер, *и* клиенты должны использовать единый способ синхронизации времени (набор параметров в этом разделе). Данный раздел полностью унифицирован и для сервера, и для клиентов.
* `use_ntp` - Определяет, будет ли использоваться синхронизация времени с помощью NTP. (при значении `False` будет использовано локальное время ОС (синхронизируется автоматически при использовании chrony). *Рекомендуется использование crhony, а не NTP*
* `use_ntp` - Определяет, будет ли использоваться синхронизация времени с помощью NTP. (при значении `False` будет использовано локальное время ОС (синхронизируется автоматически при использовании chrony). *Рекомендуется использование chrony, а не NTP*
* `host` - имя хоста или IP адрес NTP сервера (локального или удаленного)
* `port` - порт, используемый NTP сервером
# Интерфейс сервера
Сервер имеет визуальный графический интерфейс для удобства взаимодействия.
![Интерфейс сервера](img/server_gui.png)
## Глоссарий
Некоторые термины, используемые для краткости записи:
* Готовый [к полёту] коптер:
Прошедший предполётную проверку (`Preflight check`) и имеющий удовлетворительные результаты по всем необходимым столбцам (зелёные ячейки в таблице). Учитываются проверки аккумулятора и сообщения selfcheck.
* Не готовый [к полёту] коптер:
НЕ прошедший предполётную проверку (`Preflight check`) (не имеющий её результатов в таблице - жёлтые ячейки) или же имеющий НЕудовлетворительные результаты (красные ячейки в таблице). Учитываются проверки аккумулятора и сообщения selfcheck.
* Удовлетворительный - прошедший проверку определённых условий. В таблице отмечается зелёным цветом.
* Готовый к полёту: прошедший предполётную проверку и имеющий удовлетворительные результаты по всем столбцам, кроме `animation ID` и `dt`.
* Готовый к воспроизведению анимации: прошедший предполётную проверку и имеющий удовлетворительные результаты по всем столбцам.
* FCU - Flight Controller Unit, полётный контроллер.
## Меню
### Раздел 'Server'
![Скриншот меню](img/server-server.png)
Данный раздел содержит несколько утилит по отправке различных данных на *выбранные* клиенты. **Внимание!** Не пытайтесь использовать данные команды во время полёта коптеров!
* `Send Animations` - отправка файлов анимации (экспортированных аддоном к Blender) на выбранные клиенты (коптеры). В диалоговом окне необходимо выбрать *папку*, содержащую файлы анимации (автоматически создается аддоном). Каждый файл анимации будет отправлен на клиент с именем (copter ID), соответствующим имени файла без расширения.
* `Send Configurations` - отправка *единого* файла конфигурации клиента на все выбранные клиенты. В диалоговом окне необходимо выбрать *один* файл конфигурации в установленном формате. Файл конфигурации может быть неполным, в таком случае будут перезаписаны лишь указанные в файле параметры. *Не рекомендуется использовать данное действие для массовой перезаписи `Copter ID`, кроме значения `/hostname`.* **Внимание!** НЕ отправляйте на клиенты файл конфигурации сервера.
* `Send Launch files ` - отправка launch-файлов конфигурации сервиса `clever`. . В диалоговом окне необходимо выбрать *папку*, содержащую файлы конфигурации с расширением `.launch`. Все файлы с таким расширением будут отправлены *на каждый* из клиентов. **Внимание!** Существующие файлы конфигурации на коптерах будут перезаписаны, однако файлы, не отправленные сервером, не будут удалены или модифицированы.
* `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 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`) Выделяет все коптеры в таблице. При следующем вызове команды, выделение всех коптеров будет отменено.
@@ -93,17 +109,17 @@ time_delta_max = 1.0
![Скриншот раздела](img/server-animation.png)
- `Set start X Y to current position` - Устанавливает точку старта анимации у выбранных клиентов на значения текущей позиции по X Y
- `Reset start position` - Устанавливает точку старта анимации у выбранных клиентов на значения `0.0`, `0.0`
- `Set start X Y to current position` - Устанавливает точку старта анимации у выбранных клиентов на значения текущей позиции по X Y.
- `Reset start position` - Устанавливает точку старта анимации у выбранных клиентов на значения `0.0`, `0.0`.
### Раздел 'Music'
![Скриншот раздела](img/server-music.png)
- `Select music file` - Загружает выбранный музыкальный файл (поддерживаемые расширения: `.mp3`, `.wav`) для дальнейшего воспроизведения вручную или
- `Play music` - Воспроизводит загруженную музыку
- `Select music file` - Загружает выбранный музыкальный файл (поддерживаемые расширения: `.mp3`, `.wav`) для дальнейшего воспроизведения вручную или через определённое время после старта анимации.
- `Play music` - Воспроизводит загруженную музыку.
- `Stop music` - Останавливает воспроизведение проигрываемой музыки (запущенной вручную или автоматически)
- `Stop music` - Останавливает воспроизведение проигрываемой музыки.
@@ -114,54 +130,57 @@ time_delta_max = 1.0
Данный раздел команд предназначен для выскоуровневого управления роем дронов.
* Спинбокс `Start after N seconds` - Задаёт время задержки до синхронного запуска выполнения анимаций коптерами. *Не рекомендуется использовать `0` (нулевую задержку). Для загруженных\подверженных помехам\имеющих большой пинг сетей рекомендуется использовать бо́льшие значения (>5 секунд).*
* Спинбокс `Music after N seconds` - Задаёт время задержки до запуска музыки при запуске анимации. Задержка *не складывается с задержкой запуска коптеров* (`Start after N seconds`).
* Спинбокс `Start after` - Задаёт время задержки синхронного запуска выполнения анимаций коптерами после нажатия на кнопку `Start animation`. Для загруженных\подверженных помехам\имеющих большой пинг сетей рекомендуется использовать значения больше нуля.
* Спинбокс `Music after` - Задаёт время задержки запуска музыки после нажатия на кнопку `Start animation`.
* Чекбокс `Play music ` - Определяет, будет ли воспроизведена музыка при запуске анимации.
* Кнопка `Preflight check` - Все выбранные клиенты выполняют самодиагностику и предполётную проверку. Результаты, вместе с другими параметрами клиента, будут отображены в таблице по мере поступления данных.
* Кнопка `Start animation` - По истечению заданного в `Start after` времени, все выбранные коптеры совершат **взлёт**ные процедуры, перелетают на стартовые точки своих анимаций и *синхронно* выполнят полётное задание (анимацию). По окончанию анимации все коптеры выполнят посадку *на месте окончания своей анимации*. Кнопка деактивирована по умолчанию и если среди выбранных коптеров есть *не готовые коптеры* (все выбранные коптеры должны быть готовыми). *При нажатии запрашивается дополнительное предупреждение!*
* Кнопка `Preflight check` - Все выбранные клиенты выполняют самодиагностику и предполётную проверку. Результаты, вместе с другими параметрами клиента, будут отображены в таблице по мере поступления данных. Необходима в том случае, если на клиенте не настроена автоматическая передача телеметрии.
* Кнопка `Start animation` - По истечению заданного в спинбоксе `Start after` времени, все выбранные коптеры начинают синхронное воспроизведение анимации. По окончанию анимации все коптеры выполнят посадку *на месте окончания своей анимации*. Кнопка активна только в том случае, если все коптеры готовы к воспроизведению анимации. При нажатии запрашивается дополнительное предупреждение.
* `Pause/Resume` - Позволяет ставить на паузу и возобновлять выполнение полётных задач. После каждого нажатия кнопка меняет состояние на обратное.
* Состояние`Pause` - Ставит на 'паузу' все выбранные коптеры (их очередь заданий): приостанавливается выполнение любого полётного задания. *Используйте в чрезвычайных случаях.* **Внимание!** Данная команда НЕ прерывает полёт коптера в уже указанную точку (например: элементы взлёта, посадки; следование до начальной точки анимации и т.д.)
* Состояние `Resume` - Все выбранные коптеры *синхронизированно* продолжат выполнение своих очередей заданий (например: исполнение анимации)
* Кнопка `Stop and land alll` - Прерывает выполнение полётных заданий *ВСЕХ* подключенных коптеров. Сбрасывает очередь заданий - *действие необратимо*. Выполняет полную остановку и немедленную посадку коптеров. **Используйте в экстренных случаях как одно из средств перехвата.**
* Кнопка `Emergency land` - Открывает диалоговое окно дополнительного модуля быстрого выбора коптера и его последующей экстренной посадки \ дизарма. *Смотреть далее.*
* Кнопка `Disarm selected` - все выбранные коптеры прекращают выполнение своих полётных заданий, очищают очередь заданий и немедленно *отключают моторы (disarm).* Это может привести к падению и повреждению коптеров
* Состояние`Pause` - Ставит на паузу очередь заданий всех выбранных коптеров: приостанавливается выполнение любого полётного задания. Рекомендуется использовать в чрезвычайных ситуациях для определения неисправного коптера. **Внимание!** Данная команда НЕ прерывает полёт коптера в уже указанную точку (например: элементы взлёта, посадки; следование до начальной точки анимации и т.д.)
* Состояние `Resume` - Все выбранные коптеры *синхронизированно* продолжат выполнение своих очередей заданий (например исполнение анимации)
* Кнопка `Stop and land all` - Прерывает выполнение полётных заданий *ВСЕХ* подключенных коптеров. Сбрасывает очередь заданий - *действие необратимо*. Выполняет полную остановку и немедленную посадку коптеров. **Используйте в экстренных случаях как одно из средств перехвата.**
* Кнопка `Emergency land` - Открывает диалоговое окно дополнительного модуля быстрого выбора коптера и его последующей экстренной посадки \ дизарма. *Полное описание в конце статьи.*
* Кнопка `Disarm selected` - все выбранные коптеры прекращают выполнение своих полётных заданий, очищают очередь заданий и немедленно *отключают моторы (disarm).* Это может привести к падению и повреждению коптеров.
* Кнопка `Disarm ALL` - ВСЕ коптеры прекращают выполнение своих полётных заданий, очищают очередь заданий и немедленно *отключают моторы (disarm).* Это может привести к падению и повреждению коптеров **Используйте в крайних случаях как последнее из средств перехвата.**
### Полётные функции (команды)
В данном разделе находятся команды, позволяющие напрямую управлять коптером(ами).
* Кнопка `Test leds` - Все выбранные коптеры выполняют двухсекундную анимацию (бегущие точки) светодиодной лентой (белым цветом). Команда *безопасна* и может быть использована для проверки работы светодиодных лент \ качества и задержки подключения к серверу \ определения соответствия коптера и его `Copter ID` в таблице.
* Кнопка `Takeoff` - Все выбранные коптеры **совершают взлёт**, после чего зависают над точкой взлёта. Аналогично `Start animation`, кнопка активна, *только* если все выбранные коптеры готовы. **Внимание!** Используйте осторожно, соблюдайте технику безопасности. Не применяйте во время выполнения других полётных функций!
* Чекбокс `Z` - Если чекбокс активен, то будет и, будет использовано значение спинбокса `Z` (см. далее) при выполнении взлёта. Иначе коптерами будут использоваться значения по умолчанию, указанные в их конфигурациях.
* Спинбокс`Z` - Задаёт значение целевой высоты взлёта коптеров в метрах.
* Кнопка `Takeoff` - Все выбранные коптеры **совершают вертикальный взлёт**, после чего зависают над точкой взлёта. Кнопка активна, *только* если все выбранные коптеры готовы к полёту. **Внимание!** Используйте осторожно, соблюдайте технику безопасности. Не применяйте во время выполнения других полётных функций!
* Чекбокс `Z` - Если чекбокс активен, коптер взлетит в указанное значение по `z`. Иначе коптерами будут использоваться значения по умолчанию, указанные в их конфигурациях, а взлёт будет производиться относительно текущей высоты.
* Спинбокс`Z` - Задаёт значение координаты `z` взлёта коптеров в метрах.
* Кнопка `Flip` - Все выбранные коптеры **совершают флип (flip)** - переворот на 360 градусов вокруг одной из *горизонтальных* осей. **Внимание!** Используйте осторожно, соблюдайте технику безопасности. *Для исполнения флипа коптер должен иметь минимальную высоту >2м.* Не применяйте во время выполнения других полётных функций!
* Кнопка `Land` - ВСЕ коптеры прекращают выполнение своих полётных заданий, очищают очередь заданий и немедленно *переходят в режим посадки.* **Используйте в экстренных случаях как одно из средств перехвата.**
* Кнопка `Land` - Все выбранные коптеры прекращают выполнение своих полётных заданий, очищают очередь заданий и немедленно *переходят в режим посадки.* **Используйте в экстренных случаях как одно из средств перехвата.**
### Системные команды
- Кнопка `Reboot FCU` - перезагружает полётные контроллеры всех выбранных коптеров. ля возобновления работоспособности полётных функций и получения некоторых значений телеметрии *необходимо подождать* некоторое время до перезагрузки полётного контроллера.
- Кнопка `Calibrate gyro` - переводит полётные контроллеры всех выбранных коптеров в режим калибровки гироскопа. Перед калибровки необходимо убедится, что все коптеры неподвижно стоят на ровном полу параллельно полу (и будут в течение всего периода калибровки).
- Кнопка `Calibrate level` - переводит полётные контроллеры всех выбранных коптеров в режим калибровки уровня горизонта. Перед калибровки необходимо убедится, что все коптеры неподвижно стоят на ровном полу параллельно полу (и будут в течение всего периода калибровки).
- Кнопка `Reboot FCU` - перезагружает полётные контроллеры всех выбранных коптеров. Для возобновления работоспособности полётных функций и получения некоторых значений телеметрии *необходимо подождать* некоторое время до перезагрузки полётного контроллера.
- Кнопка `Calibrate gyro` - переводит полётные контроллеры всех выбранных коптеров в режим калибровки гироскопа. Коптеры должны быть неподвижны в течение калибровки.
- Кнопка `Calibrate level` - переводит полётные контроллеры всех выбранных коптеров в режим калибровки уровня горизонта. Коптеры должны быть неподвижны в течение калибровки.
## Таблица состояния коптеров (клиентов)
При первом подключении клиента к серверу в таблицу добавляется строка для отображения состояния клиента, содержащая начальные данные, переданные клиентом при подключении (`Copter ID`). Строки НЕ удаляются после зарегистрированного отключения клиента. Строки можно сортировать по возрастанию \ убыванию значений любого из столбцов (кликнув по заголовку столбца).
При первом подключении клиента к серверу в таблицу добавляется строка для отображения состояния клиента, содержащая начальные данные, переданные клиентом при подключении (`Copter ID`). Строки можно сортировать по возрастанию \ убыванию значений любого из столбцов (кликнув по заголовку столбца).
Ячейки таблицы подсвечиваются:
* жёлтым, если необходимое значение отсутствует
* красным, если значение (состояние) ячейки неудовлетворительно (согласно внутренним проверкам)
* зелёным, если значение (состояние) ячейки удовлетворительно (согласно внутренним проверкам)
### Столбцы таблицы
* `copter ID` - имя (идентификатор) клиента. Может быт сконфигурирован на стороне клиента. Отображается сразу при подключении клиента. Рядом с каждым ID коптера расположен чекбокс - коптеры, чей ID отмечен чекбоксом положительно (галочка), считаются *выбранными*.
* `copter ID` - идентификатор клиента. Может быть сконфигурирован на стороне клиента. Отображается сразу при подключении клиента. Рядом с каждым ID коптера расположен чекбокс - коптеры, чей ID отмечен чекбоксом положительно (галочка), считаются *выбранными*.
* `version` - хеш-код текущей git версии клиента.
* `animation ID` - внутреннее название файла анимации, подгруженного клиентом. Отображается после выполнения `selfcheck`. *Проверьте соответствие названий файлов анимаций у коптеров*
* `battery V` - абсолютное значение напряжения на аккумуляторе коптера (в Вольтах, по данным полётного контроллера). *Убедитесь, что напряжение не ниже порогового для вашего аккумулятора.* **При критически низком значении коптер считается не готовым** - блокируется возможность взлёта и старта анимации.
* `battery %` - относительное значение напряжения на аккумуляторе коптера. Значение рассчитывается по среднему напряжению (по данным полётного контроллера) на ячейку аккумулятора (банку). *Убедитесь, что уровень заряда перед вылетом не менее 30%* **При критически низком значении коптер считается не готовым** - блокируется возможность взлёта и старта анимации.
* `animation ID` - внутреннее название файла анимации, подгруженного клиентом. Отображается после выполнения `selfcheck`. *Проверьте соответствие названий файлов анимаций у коптеров перед запуском.*
* `battery V` - абсолютное значение напряжения на аккумуляторе коптера в вольтах по данным полётного контроллера. *Убедитесь, что напряжение не ниже порогового для вашего аккумулятора.* **При критически низком значении коптер считается не готовым** - блокируется возможность взлёта и старта анимации.
* `battery %` - относительное значение напряжения на аккумуляторе коптера. Значение рассчитывается по среднему напряжению (по данным полётного контроллера) на ячейку аккумулятора (банку). *Убедитесь, что уровень заряда перед вылетом не менее установленного в настройках сервера.* **При критически низком значении коптер считается не готовым** - блокируется возможность взлёта и старта анимации.
* `checks` - Все дополнительные сообщения и ошибки при самодиагностике (*Смотреть далее.*). При успешном прохождении самодиагностики без ошибок выводится значение `OK`, ячейка подсвечивается зелёным цветом. **При наличии ошибок коптер считается не готовым** - блокируется возможность взлёта и старта анимации.
* `time delta` - Разница между временем на сервере и клиенте (в секундах). *При слишком больших значениях сигнализирует об отсутствии синхронизации времени между коптером и клиентом!* В это значение так же входит сетевая задержка.
# Дополнительные операции
# Дополнительные операции [TODO]
## Selfcheck
..
## Emergency land
## Emergency land {: #emergency-land }
Модуль экстренной посадки/дизарма, предназначенный для быстрого поиска оператором визуально неисправного коптера методом бинарного поиска
### Интерфейс
* Зелёная кнопка `1` - ...