# Клиент clever-show Приложение для удаленного синхронизированного управления дронами в шоу и модуль экстренной защиты дронов. * [Установка и запуск](start-tutorial.md#установка-и-запуск-клиента) * [Настройка клиента](#настройка-клиента) ## Настройка клиента ### Файл конфигурации Конфигурация клиента задаётся в файле [client_config.ini](../../Drone/client_config.ini), имеющем следующий вид по умолчанию: ```ini [SERVER] port = 25000 broadcast_port = 8181 host = 192.168.1.101 buffer_size = 10000 [VISUAL_POSE_WATCHDOG] timeout = 1.0 pos_delta_max = 3.0 action = emergency_land emergency_land_thrust = 0.45 emergency_land_decrease_thrust_after = 5.0 timeout_to_disarm = 10.0 [TELEMETRY] transmit = True frequency = 1 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_after_rename = True use_leds = True led_pin = 21 x0 = 0 y0 = 0 z0 = 0 [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` - время срабатывания экстренной защиты после потери визуальной позиции, в секундах. * `pos_delta_max` - максимальная разница между текущим положением и точкой, в которой сейчас должен находиться коптер, в метрах. Требуется для проверки на столкновение коптера с объектом. Если расстояние между текущим положением коптера и положением, в котором он должен сейчас находиться, больше этого числа (в метрах), срабатывает экстренная защита. * `action` - действие при срабатывании экстренной защиты. Доступные варианты: `land` - посадка коптера в режиме полётного контроллера AUTO.LAND, `emergency_land` - посадка коптера с постепенным уменьшением мощности моторов, `disarm`- выключение моторов. **Внимание!** Не рекомендуется использовать режим AUTO.LAND с выключенным барометром - при потере источника высоты в полёте, например показаний лазера или визуальной позиции, режим AUTO.LAND не гарантирует посадку коптера, так как ориентируется на показания высоты. Для посадки коптера при его позиционировании с использованием визуальной позиции или лазера и возможности потери данных с этих систем рекомендуется использовать режим `emergency_land`. * `emergency_land_thrust` - начальная мощность, подаваемая на моторы в случае выбора действия `emergency_land` при срабатывании экстренной защиты. Безразмерная величина, от 0 (отсутствие мошности) до 1 (полная мощность). Для гарантированной посадки рекомендуется устанавливать в значение, меньшее по величине на 5-10 процентов, чем газ висения (параметр `MPC_THR_HOVER` в px4). * `emergency_land_decrease_thrust_after` - время, через которое мощность на моторах плавно начинает уменьшаться в случае выбора действия `emergency_land` при срабатывании экстренной защиты, в секундах. * `timeout_to_disarm` - время, через которое коптер безусловно выключает моторы после срабатывания экстренной защиты, в секундах. #### Раздел TELEMETRY В данном разделе настраивается поток передачи телеметрии на сервер. * `transmit` - логическое значение, определяет, нужно ли передавать данные на сервер. * `frequency` - частота передачи данных на сервер, целочисленное значение, количество раз в секунду. * `log_cpu_and_memory` - логическое значение, определяет, будет ли записываться в лог сервиса клиента clever-show состояние процессора и памяти. #### Раздел COPTERS В данном разделе находятся настройки, влияющие на процесс полёта коптера. * `frame_id` - название системы координат, относительно которой будут публиковаться координаты точек для воспроизведения анимации. Если значение `floor` - клиент публикует статическую систему координат с названием `floor` и настройками из раздела [FLOOR_FRAME](#раздел-floor_frame). **Внимание!** Убедитесь, что коптер удерживает позицию в данной системе координат. Для этого вы можете воспользоваться командой [Takeoff](server.md#тестовые-команды) из серверного приложения. Коптер взлетит на высоту `takeoff_height` относительно текущей. * `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 Данный раздел описывает смещение системы координат с названием `floor` и используется только при указании параметра `frame_id` как `floor` в разделе [COPTERS](#раздел-copters). * `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, только для данного коптера. #### Раздел NTP Помимо синхронизации времени (с миллисекундной точностью) с помощью пакета chrony, предоставляется альтернатива - возможность использования внешних (при наличии соединения локальной сети с интернетом) или внутрисетевых NTP-серверов. **Внимание!** Для корректной работы системы, **и сервер, и клиенты** должны использовать единый способ синхронизации времени (набор параметров в этом разделе). Данный раздел полностью унифицирован и для сервера, и для клиентов. * `use_ntp` - определяет, будет ли использоваться синхронизация времени с помощью NTP. (при значении `False` будет использовано локальное время ОС (синхронизируется автоматически при использовании chrony). *Рекомендуется использование chrony, а не NTP* * `host` - имя хоста или IP адрес NTP сервера (локального или удаленного) * `port` - порт, используемый NTP сервером