Files
clever-show/docs/ru/client.md
2019-12-26 02:41:17 +03:00

177 lines
16 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Клиент
Приложение для удаленного синхронизированного управления дронами в шоу.
* [Установка и запуск](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 сервером