36 KiB
Сервер
Приложение для создания и запуска шоу, настройки дронов, анимации и музыки.
Интерфейс сервера
Сервер имеет визуальный графический интерфейс для удобства взаимодействия.
Таблица состояния коптеров
При первом подключении клиента к серверу в таблицу добавляется строка для отображения состояния клиента, содержащая только имя клиента (copter ID). Если на клиентах настроена автоматическая передача телеметрии, данные в таблице будут обновляться автоматически. Так же возможно запросить телеметрию выбранных клиентов с помощью кнопки Preflight check Строки можно сортировать по возрастанию или убыванию значений любого из столбцов, кликнув по его заголовку.
Ячейки таблицы подсвечиваются:
- жёлтым, если необходимое значение отсутствует
- красным, если данные в ячейке не прошли проверку
- зелёным, если данные в ячейке прошли проверку
Коптер считается готовым к воспроизведению анимации, если все ячейки в строке прошли проверку и подсвечены зелёным.
Коптер считается готовым к полёту, если все ячейки в строке, кроме animation ID и dt, прошли проверку и подсвечены зелёным.
Столбцы таблицы
copter ID- имя клиента. Может быть сконфигурирован на стороне клиента. Отображается сразу при подключении клиента. Рядом с каждым ID коптера расположен чекбокс - коптеры, чей ID отмечен чекбоксом положительно (галочка), считаются выбранными. Ячейки в этом столбце всегда проходят проверку.version- хеш-код текущей git версии клиента. Ячейки в этом столбце всегда проходят проверку.animation ID- внутреннее название файла анимации, подгруженного клиентом. Ячейка в данном столбце не проходит проверку, если анимация отсутствует (значениеNo animation). В остальных случаях, если ячейка не пустая, она проходит проверку. Внимание! Проверьте соответствие названий файлов анимаций у коптеров перед запуском.battery- значение напряжения на аккумуляторе коптера в вольтах и заряд в процентах по данным полётного контроллера. Ячейка в данном столбце проходит проверку, если значение заряда батареи выше значения battery_percentage_min, задаваемого в настройках сервера. В остальных случаях, если ячейка не пустая, она не проходит проверку.system- состояние полётного контроллера. Ячейка в данном столбце проходит проверку, если её значениеSTANDBY. В остальных случаях, если ячейка не пустая, она не проходит проверку.sensors- состояние калибровки компаса, акселлерометра и гироскопа полётного контроллера. Ячейка в данном столбце проходит проверку, если её значениеOK. В остальных случаях, если ячейка не пустая, она не проходит проверку.mode- режим полётного контроллера. Ячейка в данном столбце не проходит проверку, если её значениеNO_FCUили содержитCMODE. В остальных случаях, если ячейка не пустая, она проходит проверку.checks- состояние самодиагностики коптера. Ячейка в данном столбце проходит проверку, если её значениеOK. В остальных случаях, если ячейка не пустая, она не проходит проверку.current x y z yaw frame_id- текущее положение коптера с указанием названия системы координат. Ячейка в данном столбце не проходит проверку, если её значениеNO_POSили содержитnan. В остальных случаях, если ячейка не пустая, она проходит проверку.start x y z- стартовое положение коптера для воспроизведения анимации. Ячейка в данном столбце не проходит проверку, если её значениеNO_POSили разница между текущим и стартовым положением коптера больше значения start_pos_delta_max. В остальных случаях, если ячейка не пустая, она проходит проверку.dt- разница между временем на сервере и клиенте в секундах, включая сетевую задержку. Ячейка в данном столбце проходит проверку, если её значение меньше значения time_delta_max, задаваемого в настройках сервера. В остальных случаях, если ячейка не пустая, она не проходит проверку. При слишком больших значениях сигнализирует об отсутствии синхронизации времени между коптером и клиентом.
Меню
Раздел Server
Данный раздел содержит несколько утилит по отправке различных данных на выбранные клиенты. Внимание! Не используйте данные команды во время полёта коптеров!
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- отправка одного любого файла на все выбранные клиенты. В диалоговом окне необходимо выбрать один файл. Далее, необходимо указать путь, по которому данный файл будет записан на клиенты (не включая имя файла).Send any command- отправка и выполнение любой команды терминала на все выбранные клиенты. В диалоговом окне необходимо ввести требуемую команду. Команды могут использоватьsudo-права.
Select all drones(Ctrl+A) - выделяет все коптеры в таблице. При следующем вызове команды, выделение всех коптеров будет отменено.
Раздел Drone
Set Z offfset to ground- устанавливает собственный отступ по Z каждого из выбранных клиентов в значение, равное текущему положению по координате Z. Можно применять для выравнимания общей высоты полёта коптеров.Reset Z offfset- устанавливает собственный отступ по Z каждого из выбранных клиентов в значение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- полностью перезагружает полётный контроллер и компьютер на выбранных коптерах. Во время перезапуска клиенты будут отключены.
Раздел Animation
Set start X Y to current position- устанавливает точку старта анимации у выбранных клиентов в значения текущей позиции по X Y.Reset start position- устанавливает точку старта анимации у выбранных клиентов в значения0.0,0.0.
Раздел Music
Select music file- загружает выбранный музыкальный файл для дальнейшего воспроизведения вручную или через определённое время после старта анимации. Поддерживаемые расширения:.mp3или.wav.Play music- воспроизводит загруженную музыку.Stop music- останавливает воспроизведение проигрываемой музыки.
Боковая панель команд
Управление
Данный раздел команд предназначен для выскоуровневого управления роем дронов.
- Спинбокс
Start after- задаёт время задержки синхронного запуска выполнения анимаций коптерами после нажатия на кнопкуStart animation. Для загруженных, подверженных помехам или имеющих большой пинг сетей рекомендуется использовать значения больше нуля. - Спинбокс
Music after- задаёт время задержки запуска музыки после нажатия на кнопкуStart animation. - Чекбокс
Play music- определяет, будет ли воспроизведена музыка при запуске анимации. - Кнопка
Preflight check- все выбранные клиенты выполняют самодиагностику и предполётную проверку. Результаты, вместе с другими параметрами клиента, будут отображены в таблице по мере поступления данных. Необходима в том случае, если на клиенте не настроена автоматическая передача телеметрии. - Кнопка
Start animation- посылает время старта анимации на все выбранные коптеры с учётом заданного в спинбоксеStart afterвремени. Все выбранные коптеры начинают синхронное воспроизведение анимации после нажатия на данную кнопку и через время, заданное в спинбоксеStart after. По окончанию анимации все коптеры выполнят посадку на месте окончания своей анимации. Кнопка активна только в том случае, если все коптеры готовы к воспроизведению анимации. При нажатии запрашивается дополнительное предупреждение. - Кнопка
Pause/Resume- ставит на паузу и возобновляет выполнение полётных задач. После каждого нажатия кнопка меняет состояние на обратное.- Состояние
Pause- ставит на паузу очередь заданий всех выбранных коптеров: приостанавливается выполнение любого полётного задания. Рекомендуется использовать в чрезвычайных ситуациях для определения неисправного коптера. Внимание! Данная команда НЕ прерывает полёт коптера в уже указанную точку (например: элементы взлёта, посадки; следование до начальной точки анимации и т.д.) - Состояние
Resume- все выбранные коптеры синхронизированно продолжат выполнение своих очередей заданий (например исполнение анимации)
- Состояние
- Кнопка
Stop and land all- прерывает выполнение полётных заданий ВСЕХ подключенных коптеров. Сбрасывает очередь заданий - действие необратимо. Выполняет полную остановку и немедленную посадку коптеров. Используйте в экстренных случаях как одно из средств перехвата. - Кнопка
Emergency land- открывает диалоговое окно модуля визуальной посадки неисправного коптера. Полное описание находится в конце статьи. - Кнопка
Disarm selected- все выбранные коптеры прекращают выполнение своих полётных заданий, очищают очередь заданий и немедленно отключают моторы. Это может привести к падению и повреждению коптеров. - Кнопка
Disarm ALL- ВСЕ коптеры прекращают выполнение своих полётных заданий, очищают очередь заданий и немедленно отключают моторы. Это может привести к падению и повреждению коптеров Используйте в крайних случаях как последнее из средств перехвата.
Тестовые команды
В данном разделе находятся команды, позволяющие напрямую управлять коптерами для их проверки.
- Кнопка
Test leds- все выбранные коптеры выполняют двухсекундную анимацию (бегущие точки) светодиодной лентой (белым цветом). Команда безопасна и может быть использована для проверки работы светодиодных лент, качества и задержки подключения к серверу или определения соответствия коптера и егоcopter IDв таблице. - Кнопка
Takeoff- все выбранные коптеры совершают вертикальный взлёт, после чего зависают над точкой взлёта. Кнопка активна, только если все выбранные коптеры готовы к полёту. Внимание! Используйте осторожно, соблюдайте технику безопасности. Не применяйте во время выполнения других полётных функций!- Чекбокс
Z- если чекбокс активен, коптер взлетит в указанное значение поz. Иначе коптерами будут использоваться значения по умолчанию, указанные в их конфигурациях, а взлёт будет производиться относительно текущей высоты. - Спинбокс
Z- задаёт значение координатыzвзлёта коптеров в метрах.
- Чекбокс
- Кнопка
Flip- все выбранные коптеры совершают флип (flip) - переворот на 360 градусов вокруг одной из горизонтальных осей. Внимание! Используйте осторожно, соблюдайте технику безопасности. Внимание! Для исполнения флипа коптер должен иметь минимальную высоту больше 2м. Внимание! Не применяйте во время выполнения других полётных функций! - Кнопка
Land- все выбранные коптеры прекращают выполнение своих полётных заданий, очищают очередь заданий и немедленно переходят в режим посадки. Используйте в экстренных случаях как одно из средств перехвата.
Системные команды
В данном разделе находятся команды, исполняемые непосредственно на полётном контроллере коптера.
- Кнопка
Reboot FCU- перезагружает полётные контроллеры всех выбранных коптеров. Можно использовать для обновления поворота коптера при его определении только с помощью инерциальной системы коптера, например при полёте по системе позиционирования Pozyx или с помощью Optical Flow. Для возобновления работоспособности полётных функций и получения некоторых значений телеметрии необходимо подождать некоторое время до перезагрузки полётного контроллера. - Кнопка
Calibrate gyro- переводит полётные контроллеры всех выбранных коптеров в режим калибровки гироскопа. Внимание! Коптеры должны быть неподвижны в течение калибровки. - Кнопка
Calibrate level- переводит полётные контроллеры всех выбранных коптеров в режим калибровки уровня горизонта. Внимание! Коптеры должны быть неподвижны в течение калибровки.
Настройка сервера
Файл конфигурации
Конфигурация сервера задаётся в файле server_config.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
broadcast_port = 8181
broadcast_delay = 5.0
[NTP]
use_ntp = False
host = ntp1.stratum2.ru
port = 123
Конфигурация по умолчанию является полностью работоспособной и не требует изменений для быстрого начала работы системы.
Раздел SERVER
В этом разделе задаются параметры сетевого взаимодействия сервера. Доступны следующие параметры:
port- TCP порт, на который будут приниматься входящие соединения от клиентов. При использовании broadcast данный порт будет сконфигурирован у клиента автоматически. Рекомендуется изменить значение по умолчанию в целях безопасности (любое пятизначное и более число, если другое ПО не использует выбранный порт).buffer_size- размер буфера при приёме и передаче данных. Не рекомендуется изменять. Рекомендуется использовать единое значение у сервера и клиентов.remove_disconnected- Определяет поведение при разрыве связи с клиентом. При значенииTrueвся информация о клиенте будет удалена как из внутренней памяти, так и из таблицы. Это может привести к 'скачкам' таблицы при отключении клиентов. При значенииFalseотключённые клиенты не будут удалены из таблицы, но будут отображены с подсвечиванием ячейки в столбцеcopter IDкрасным цветом. Все данные будут сохранены. При переподключении клиента, он будет ассоциирован с той же строкой таблицы, а ячейка со значениемcopter IDвновь станет зелёного цвета.
Раздел 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, чтобы передавать клиентам актуальную информацию о конфигурации сервера. Таким образом становится возможным автоматическое подключение клиентов к серверу без необходимости дополнительной ручной конфигурации. В данном разделе задаются параметры этого механизма:
use_broadcast- будут ли использованы broadcast'ы для передачи данных (при значенииFalsebroadcast'ы НЕ будут отправляться). ИспользуйтеFalseв случае повышенных требований безопасности, перегруженности сети или невозможности передачи по широковещательному каналу (из-за конфигурации брандмауэра или сети)broadcast_port- UDP порт, по которому будет осуществляться отправка сообщений. Рекомендуется изменить значение по умолчанию в целях безопасности. Внимание! При изменении этого параметра клиенты НЕ смогут принимать сообщения автоконфигурации до изменения (вручную) соответствующего параметра в конфигурации клиента на равное значение.broadcast_delay- периодичность (в секундах, целочисленное значение), с которой будет происходить отправка broadcast сообщений. Увеличьте задержку для уменьшения нагрузки на сеть. Уменьшите задержку для уменьшения времени отклика и подключения при первом запуске клиентов.
Раздел NTP
Помимо синхронизации времени (с миллисекундной точностью) с помощью пакета chrony, предоставляется альтернатива - возможность использования внешних (при наличии соединения локальной сети с интернетом) или внутрисетевых NTP-серверов. Внимание! Для корректной работы системы, и сервер, и клиенты должны использовать единый способ синхронизации времени (набор параметров в этом разделе). Данный раздел полностью унифицирован и для сервера, и для клиентов.
use_ntp- определяет, будет ли использоваться синхронизация времени с помощью NTP. (при значенииFalseбудет использовано локальное время ОС (синхронизируется автоматически при использовании chrony). Рекомендуется использование chrony, а не NTPhost- имя хоста или IP адрес NTP сервера (локального или удаленного)port- порт, используемый NTP сервером
Дополнительные операции
Emergency land
Модуль визуальной экстренной посадки, предназначенный для быстрого поиска оператором визуально неисправного коптера методом бинарного поиска. Для успешного применения на всех коптерах должна быть установлена светодиодная лента.
Интерфейс
При нажатии на кнопку Emergency land все коптеры делятся на 2 равные группы по порядку расположения в таблице. Первая половина коптеров зажигает светодиодную ленту зелёным цветом, вторая - красным. При нажатии на зелёную или красную кнопку происходит выбор группы, соответствующей цвету нажатой кнопки. Коптеры выбранного цвета снова делятся на две половины и каждая половина зажигает светодиодную ленту зелёным и красным цветом соответственно. Остальные коптеры выключают светодиодную ленту.
Нажимая на кнопки, соответствующие цвету группы, в которой находится неисправный коптер, можно определить его номер и выполнить экстренную посадку за логорифмическое количество шагов от количества коптеров, т.е. гораздо быстрее, чем перебирая коптеры по одному.
На любом шаге можно произвести посадку или выключение моторов всех коптеров, на которых включена светодиодная лента, нажав кнопку Land или Disarm.






