diff --git a/docs/ru/client.md b/docs/ru/client.md index e69de29..f407971 100644 --- a/docs/ru/client.md +++ b/docs/ru/client.md @@ -0,0 +1,176 @@ +# Клиент + +Приложение для удаленного синхронизированного управления дронами в шоу. + +* [Установка и запуск](start-tutorial.md#установка-и-запуск-клиента) +* [Настройка клиента](#настройка-клиента) + +## Настройка клиента + +### Файл конфигурации + +Конфигурация клиента задаётся в файле [client_config.ini](../../Drone/client_config.ini), имеющем следующий вид по умолчанию: + +```ini +[SERVER] +port = 25000 +broadcast_port = 8181 +host = 192.168.1.101 +buffer_size = 1024 + +[VISUAL_POSE_WATCHDOG] +timeout = 1.0 +action = emergency_land +emergency_land_thrust = 0.45 +emergency_land_decrease_thrust_after = 5.0 +timeout_to_disarm_after_watchdog_action = 10.0 + +[TELEMETRY] +frequency = 1 +transmit = True +land_if_pos_delta_bigger_than = 3.0 +log_cpu_and_memory = True + +[COPTERS] +frame_id = map +takeoff_height = 1.0 +takeoff_time = 5.0 +safe_takeoff = False +reach_first_point_time = 5.0 +land_time = 1.0 +x0_common = 0 +y0_common = 0 +z0_common = 0 +yaw = 180 +land_timeout = 10.0 + +[FLOOR FRAME] +parent = aruco_map +x = 2.4 +y = 12.4 +z = 6.4 +roll = 180 +pitch = 0 +yaw = -90 + +[ANIMATION] +takeoff_animation_check = True +land_animation_check = True +frame_delay = 0.1 +x_ratio = 1.0 +y_ratio = 1.0 +z_ratio = 1.0 + +[PRIVATE] +id = /hostname +restart_dhcpcd = True +use_leds = True +led_pin = 21 +x0 = 0 +y0 = 0 +z0 = 0 + +[FILETRANSFER] +files_directory = animation +animation_file = animation.csv + +[NTP] +use_ntp = False +host = ntp1.stratum2.ru +port = 123 + +``` + +Конфигурация по умолчанию является полностью работоспособной и не требует изменений для быстрого старта клиента. + +Для централизованной загрузки конфигурации на все коптеры нужно использовать пункт меню `Send configurations` на [сервере](server.md#раздел-server). Допускается загрузка неполного файла параметров конфигурации, с отсутствующими разделами или параметрами относительно конфигурации по умолчанию. + +#### Раздел SERVER + +В этом разделе задаются параметры сетевого взаимодействия клиента с сервером. Доступны следующие параметры: + +* `port` - TCP порт, на который будут приниматься входящие соединения от сервера. При использовании настройки [use_broadcast](server.md#раздел-broadcast) на сервере, данный порт будет сконфигурирован у клиента автоматически. *Рекомендуется изменить значение по умолчанию в целях безопасности* (любое пятизначное и более число, если другое ПО не использует выбранный порт). +* `broadcast_port` - UDP порт, на который по широковещательному каналу сервер передаёт свои настройки. С помощью данного механизма возможно автоматическое подключение клиента к серверу. +* `host` - IP адрес сервера. +* `buffer_size` - размер буфера при приёме и передаче данных. *Не рекомендуется изменять. Рекомендуется использовать единое значение у сервера и клиентов.* + +#### Раздел VISUAL_POSE_WATCHDOG + +В данном разделе настраивается программа экстренной защиты коптера от потери позиции или столкновения с объектом. + +* `timeout` - время срабатывания экстренной защиты после потери визуальной позиции, в секундах. +* `action` - действие при срабатывании экстренной защиты. Доступные варианты: `land` - посадка коптера в режиме полётного контроллера AUTO.LAND, `emergency_land` - посадка коптера с постепенным уменьшением мощности моторов, `disarm`- выключение моторов. +* `emergency_land_thrust` - начальная мощность, подаваемая на моторы в случае выбора действия `emergency_land` при срабатывании экстренной защиты, в процентах. +* `emergency_land_decrease_thrust_after` - время, через которое мощность на моторах плавно начинает уменьшаться в случае выбора действия `emergency_land` при срабатывании экстренной защиты, в процентах. +* `timeout_to_disarm_after_watchdog_action` - время, через которое коптер безусловно выключает моторы после срабатывания экстренной защиты, в секундах. + +#### Раздел TELEMETRY + +В данном разделе настраивается поток передачи телеметрии на сервер. + +* `frequency` - частота передачи данных на сервер, целочисленное значение, количество раз в секунду. +* `transmit` - логическое значение, определяет, нужно ли передавать данные на сервер. +* `land_if_pos_delta_bigger_than` - проверка на столкновение коптера с объектом. Работает в цикле телеметрии. Если расстояние между текущим положением коптера и положением, в котором он должен сейчас находиться, больше этого числа (в метрах), коптер очищает очередь задач и переходит в режим AUTO.LAND. +* `log_cpu_and_memory` - логическое значение, которое определяет, будет ли записываться в лог сервиса клиента clever-show состояние процессора и памяти. + +#### Раздел COPTERS + +* `frame_id` - название системы координат, в которой настроен коптер на удержание позиции. Если значение `floor` - клиент публикует статическую систему координат с названием `floor` и настройками из раздела [FLOOR_FRAME](#раздел-floor_frame). +* `takeoff_height` - высота взлёта коптера, в метрах. Используется в начале анимации или при тестировании коптера с сервера. +* `takeoff_time` - максимальное время взлёта коптера, в секундах. +* `safe_takeoff` - логическое значение, определяет, нужно ли производить посадку в безопасном режиме. +* `reach_first_point_time` - максимальное время полёта к первой точке анимации, в секундах. +* `land_time` - время зависания в конечной точке анимации перед посадкой, в секундах. +* `x0_common` - смещение по оси x, общее для всех коптеров, в метрах. +* `y0_common` - смещение по оси y, общее для всех коптеров, в метрах. +* `z0_common` - смещение по оси z, общее для всех коптеров, в метрах. +* `yaw` - поворот коптера при полёте по точкам, в градусах. Если значение `nan` - коптер сохраняет изначальную ориентацию в полёте. +* `land_timeout` - время таймаута посадки, после которого происходит выключение моторов коптера, в секундах. + +#### Раздел FLOOR_FRAME + +* `parent` - название опорной системы координат, относительно которой будет располагаться система координат `floor`. +* `x` - смещение системы координат `floor` по оси x относительно системы координат `parent`, в метрах. +* `y` - смещение системы координат `floor` по оси y относительно системы координат `parent`, в метрах. +* `z` - смещение системы координат `floor` по оси z относительно системы координат `parent`, в метрах. +* `roll` - поворот системы координат `floor` вокруг оси x относительно системы координат `parent`, в градусах. +* `pitch` - поворот системы координат `floor` вокруг оси y относительно системы координат `parent`, в градусах. +* `yaw` - поворот системы координат `floor` вокруг оси z относительно системы координат `parent`, в градусах. + +**Внимание!** Повороты `roll`, `pitch`, `yaw` производятся последовательно в указанном порядке. + +#### Раздел ANIMATION + +В данном разделе настраивается обработка анимации. + +* `takeoff_animation_check` - логическое значение, определяет, будет ли производиться автоматическая обработка старта анимации. **Если значение True**, при загрузке анимации проверяется взлёт коптеров. Если в файле анимации коптер взлетает с земли, при старте анимации будет применена *логика немедленного воспроизведения*: коптер сразу начинает следовать точкам, указанным в анимации. Если в файле анимации коптер начинает полёт в воздухе, при старте анимации будет применена *логика полёта к первой точке*: коптер в начале взлетает на высоту `takeoff_height` за время `takeoff_time`, затем перемещается к первой точке за время `reach_first_point_time`, и затем начинает следовать точкам, указанным в анимации. **Если значение False**, при загрузке анимации не проверяется взлёт коптеров, а при старте анимации действует *логика полёта к первой точке*. +* `land_animation_check` - логическое значение, определяет, будет ли производиться автоматическая обработка завершения анимации. **Если значение True**, при загрузке анимации проверяется посадка коптеров. Если в файле анимации коптер садится на землю и стоит до завершения анимации, проверка удалит все точки в анимации после начала посадки коптера. Таким образом, коптер в конце анимации зависнет над точкой посадки на время `land_time`, сядет автоматически и выключит моторы. **Если значение False**, при загрузке анимации не проверяется посадка коптеров и точкой посадки считается последняя точка в анимации. Например, если анимация посадки нарисована полностью и коптер стоит после посадки на земле некоторое время, а значение данного параметра **False**, всё это время у коптера будут включены моторы и он будет пытаться удержать указанную позицию посадки вплоть до завершении файла анимации, затем через время `land_time` перейдёт в редим посадки. +* `frame_delay` - время воспроизведения одного кадра в секундах. +* `x_ratio` - масштаб анимации по оси x +* `y_ratio` - масштаб анимации по оси y +* `z_ratio` - масштаб анимации по оси z + +#### Раздел PRIVATE + +* `id` - имя коптера, отображаемое в таблице. Если значение `/hostname` - имя определяется из файла `/etc/hostname`. +* `restart_dhcpcd` - логический параметр, определяет, требуется ли перезагрузка коптера при переименовании его `id` удалённо с сервера. +* `use_leds` - логический параметр, определяет, использует ли коптер светодиодную ленту. +* `led_pin` - номер пина GPIO на Raspberry Pi, к которому подключена светодиодная лента. +* `x0` - смещение по оси x, только для данного коптера. +* `y0` - смещение по оси y, только для данного коптера. +* `z0` - смещение по оси z, только для данного коптера. + +#### Раздел FILETRANSFER + +В этом разделе задаются параметры передачи файлов. + +* `files_directory` - директория для хранения файлов анимации (сейчас не используется). +* `animation_file` - название файла анимации, сохраняемое в клиенте. + +#### Раздел NTP + +Помимо синхронизации времени (с миллисекундной точностью) с помощью пакета chrony, предоставляется альтернатива - возможность использования внешних (при наличии соединения локальной сети с интернетом) или внутрисетевых NTP-серверов. **Внимание!** Для корректной работы системы, **и сервер, и клиенты** должны использовать единый способ синхронизации времени (набор параметров в этом разделе). Данный раздел полностью унифицирован и для сервера, и для клиентов. + +* `use_ntp` - определяет, будет ли использоваться синхронизация времени с помощью NTP. (при значении `False` будет использовано локальное время ОС (синхронизируется автоматически при использовании chrony). *Рекомендуется использование chrony, а не NTP* +* `host` - имя хоста или IP адрес NTP сервера (локального или удаленного) +* `port` - порт, используемый NTP сервером diff --git a/docs/ru/server.md b/docs/ru/server.md index 18bf67d..72a54b7 100644 --- a/docs/ru/server.md +++ b/docs/ru/server.md @@ -49,11 +49,11 @@ Данный раздел содержит несколько утилит по отправке различных данных на *выбранные* клиенты. **Внимание!** Не используйте данные команды во время полёта коптеров! -* `Send Animations` - отправка файлов анимации, экспортированных аддоном к Blender, на выбранные коптеры. В диалоговом окне необходимо выбрать *папку*, содержащую файлы анимации. Каждый файл анимации будет отправлен на клиент с именем, соответствующим имени файла без расширения. -* `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 animations` - отправка файлов анимации, экспортированных аддоном к Blender, на выбранные коптеры. В диалоговом окне необходимо выбрать *папку*, содержащую файлы анимации. Каждый файл анимации будет отправлен на клиент с именем, соответствующим имени файла без расширения. +* `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` - отправка *одного* любого файла на все выбранные клиенты. В диалоговом окне необходимо выбрать *один* файл. Далее, необходимо указать путь, по которому данный файл будет записан на клиенты (не включая имя файла). @@ -65,7 +65,7 @@ ![Скриншот раздела Drone](../assets/server-drone.png) * `Set Z offfset to ground` - устанавливает собственный отступ по Z каждого из выбранных клиентов в значение, равное текущему положению по координате Z. Можно применять для выравнимания общей высоты полёта коптеров. -* `Reset Z offfset` - устанавливает собственный отступ по Z каждого из выбранных клиентов в значение `0` +* `Reset Z offfset` - устанавливает собственный отступ по Z каждого из выбранных клиентов в значение `0`. * `Restart chrony` - перезапускает сервис синхронизации времени `chrony` на выбранных клиентах. Используйте для ручной синхронизации в случаях, если время между сервером и клиентами не синхронихированно. * `Remove from table` - удаляет выбранные коптеры из таблицы. **Внимание!** В случае, если клиент был подключен, будет произведено отключение. В случае если удалённый таким образом клиент исправно функционировал, он переподключится в кратчайшие сроки. * `Developer mode`: **Внимание!** Используйте данные действия с большой осторожностью. @@ -163,7 +163,7 @@ port = 123 В этом разделе задаются параметры сетевого взаимодействия сервера. Доступны следующие параметры: -* `port` - TCP порт, на котором будут приниматься входящие соединения от клиентов (коптеров). При использовании broadcast данный порт будет сконфигурирован у клиента автоматически. *Рекомендуется изменить значение по умолчанию в целях безопасности* (любое пятизначное и более число, если другое ПО не использует выбранный порт). +* `port` - TCP порт, на который будут приниматься входящие соединения от клиентов. При использовании broadcast данный порт будет сконфигурирован у клиента автоматически. *Рекомендуется изменить значение по умолчанию в целях безопасности* (любое пятизначное и более число, если другое ПО не использует выбранный порт). * `buffer_size` - размер буфера при приёме и передаче данных. *Не рекомендуется изменять. Рекомендуется использовать единое значение у сервера и клиентов.* * `remove_disconnected` - Определяет поведение при разрыве связи с клиентом. При значении `True` вся информация о клиенте *будет удалена* как из внутренней памяти, так и *из таблицы*. *Это может привести к 'скачкам' таблицы при отключении клиентов.* При значении `False` отключённые клиенты *не будут* удалены из таблицы, но будут отображены с подсвечиванием ячейки в столбце `copter ID` красным цветом. Все данные будут сохранены. При переподключении клиента, он будет ассоциирован с той же строкой таблицы, а ячейка со значением `copter ID` вновь станет зелёного цвета. @@ -187,7 +187,7 @@ port = 123 Помимо синхронизации времени (с миллисекундной точностью) с помощью пакета chrony, предоставляется альтернатива - возможность использования внешних (при наличии соединения локальной сети с интернетом) или внутрисетевых NTP-серверов. **Внимание!** Для корректной работы системы, **и сервер, и клиенты** должны использовать единый способ синхронизации времени (набор параметров в этом разделе). Данный раздел полностью унифицирован и для сервера, и для клиентов. -* `use_ntp` - Определяет, будет ли использоваться синхронизация времени с помощью NTP. (при значении `False` будет использовано локальное время ОС (синхронизируется автоматически при использовании chrony). *Рекомендуется использование chrony, а не NTP* +* `use_ntp` - определяет, будет ли использоваться синхронизация времени с помощью NTP. (при значении `False` будет использовано локальное время ОС (синхронизируется автоматически при использовании chrony). *Рекомендуется использование chrony, а не NTP* * `host` - имя хоста или IP адрес NTP сервера (локального или удаленного) * `port` - порт, используемый NTP сервером