Глава 2. Обзор графического интерфейса
2.1. Вход в Графический интерфейс
После обновления камеры и подключения ее к БПЛА можно приступать к работе с графическим интерфейсом.
Для этого:
Перенесите дрон в защищенный куб и подайте питание на полетный контроллер, либо снимите винты и подайте питание вне защищенной зоны.
Для доступа к графическому интерфейсу необходимо подключить ПК к Wi-Fi сети, на которую настроена камера (см. подраздел 1.3.2).
После подключения к Wi-Fi необходимо открыть браузер и в адресной строке вбить: http://trackingcam3.local:80 , либо ввести IP-адрес камеры. О том, как узнать IP камеры в подразделе 1.3.3.
Пример ввода в адресной строке (помните о том, что ваш IP будет отличаться): http://192.168.1.65:80.
Подключение по IP является приоритетным, если в одном рабочем пространстве производятся работы с несколькими БПЛА.
2.2 Окно состояния дрона

Рисунок 2.1. Окно “Предполетная проверка” графического интерфейса
Здесь отображаются активные сенсоры: акселерометр и гироскоп, барометр, датчик расстояния, интегрированный в модуль Optical Flow, сам модуль Optical Flow, датчик температуры и GPS. Иконка подсвечивается синим в случае, если датчик подключен и работает. Если связь между полетным контроллером и модулем нарушена или датчик не подключен и полетный контроллер не получает с него данных, то иконка не будет подсвечиваться.
Текущий заряд батареи дрона.
Текущие значения управляющих каналов с пульта управления.
Вкладка меню – здесь можно переключиться между блочным программированием (blockly), окном настройки и окном настройки алгоритмов компьютерного зрения.
Строка состояния ARM - выводит ошибки, препятствующие запуску БВС;
Текущий режим полета – ANGLE (стабилизация по углу), AltHold (удержание по высоте) и PosHold (удержание положения).
Текущие показания одометрии (положения БПЛА), рассчитанного, исходя из показаний датчика Optical Flow.
Текущие показания датчика углового положения, углы крена тангажа и рыскания.
Статус лидара (лазерного дальномера): true – если датчик подключен, false – данные от датчика не поступают.
Статус камеры: true – изображение с камеры получено, false – данных от камеры нет.
Стрим изображения с камеры, на котором отображаются детектируемые ArUco маркеры и цветовые блобы.
2.3 Окно программирования Blockly
Данное окно позволяет реализовывать автономный полет дрона с помощью блочного программирования. Программы можно сохранять и загружать из памяти квадрокоптера.

Рисунок 2.2. Интерфейс окна “Программирование Блокли” графического интерфейса
Интерфейс Blockly:
Выпадающее меню для сохранения, загрузки программ и создания нового рабочего пространства;
Кнопка Запуска программы для выполнения программы;
Кнопка Пауза. При нажатии на нее дрон выполняет текущую программу и ожидает повторного нажатия на кнопку Запуска для продолжения выполнения скрипта, либо нажатия на кнопку Пошагового исполнения (5);
Кнопка Сброса полностью останавливает работу скрипта. после нажатия на нее нужно заново запускать исполнение программы, либо возвращаться к ручному режиму управления;
Кнопка Пошагового выполнения скрипта. Выполнение блоков кода происходит не автоматически, а только после нажатия на данную кнопку;
Стек вызова визуализирует последовательность вызова управляющих команд;
Очистка стека вызова;
Доступные для использования блоки;
Управление рабочим пространством, удаление блока.
2.4 Методы программирования Blockly

Рисунок 2.3. Обзор блока “API Дрона”
В доступных блоках есть вкладка “API Дрона”, позволяющая реализовывать автономный полет дрона с помощью блочного программирования.
Для программирования используются следующие функциональные блоки (методы программирования Blockly):
- Задержка (мс) – остановить выполнение программы на заданное время в миллисекундах

- Взлететь – дрон выполняет взлет до высоты 1 метр
- Посадка – дрон садится на землю
- Задать угол рыскания – выставить угол рыскания дрона (рекомендуется использовать текущий угол рыскания и к нему добавлять необходимое значение). Принимает значения в радианах.

- Задать скорость XY – задать линейную скорость полета дрона (значения в м/c). Рекомендуется использовать данную функцию с осторожностью, так как при ошибке выполнения программы дрон необходимо будет перехватить пультом.

- Задать скорость XY и рыскание – задать линейную и угловую скорость полета дрона (значения в м/c, угловая в рад/c). Рекомендуется использовать данную функцию с осторожностью, так как при ошибке выполнения программы дрон необходимо будет немедленно перехватить пультом.

- Лететь в XY дрон – полет в заданные координаты XY относительно текущего положения дрона. То есть текущее положение дрона принимается начальной точкой отсчета, при этом ось X дрона направлена по углу тангажа (pitch), а ось Y по углу крена (roll). (положительные значения по X – вперед, по Y – влево)

- Лететь в XY одометрия – полет в заданные координаты XY относительно точки включения дрона. При включении дрона и взлете выше 15 см начинается расчет относительной одометрии при помощи датчика Optical Flow, таким образом данная функция позволяет отправить дрон в координаты относительно точки взлета (X вперед, Y влево).

Стоит учесть
расчет при помощи Optical Flow не точен и может иметь накапливающуюся погрешность. Также при неправильной калибровке или установке датчика показания могут быть неверными.
- Задать высоту – позволяет задать высоту полета дрона (от 0,2 до 2 метров).
- Обнулить оптическую одометрию – позволяет обнулить значения одометрии, можно использовать в случаях, когда положение дрона возможно узнать с большой точностью (например, при детектировании ArUco-маркера).

- Получить оптическую одометрию – позволяет получить текущие показания оптической одометрии для дальнейшей обработки.

- Для каждого элемента в списке точек лидара – позволяет выполнить цикл по текущим значениям лидара (для расширенной версии набора с лазерным дальномером).

- Получить крен/тангаж/рыскание – позволяет получить текущие значения углов поворота дрона.
- Получить высоту по барометру – получение текущих показаний барометрического датчика высоты.

- Получить ARM – получение текущих arm флагов (значения флагов аналогичны значениям на главном экране).

- Для каждого из ArUco маркеров – получение текущих детектируемых маркеров в виде массива и проход в цикле по ним (позиция и ориентация маркеров относительно камеры).

Для каждой позиции относительно ArUco маркера – получение текущих позиций камеры относительно маркеров.

- Получить значение освещенности – получает текущие показания датчика освещенности, если датчик не подключен, вернет ноль.
- Задать светодиод – задает значение для светодиода. Доступны Красные (R), Зеленые (G) и Голубые (B) каналы, можно использовать для информирования о каких-либо действиях (принимает значения от 0 до 255).

- Задать динамик – реализует управление пьезоизлучателем, посредством управления частотой и громкостью (частота до 5000, громкость до 255).

- Получить показания датчиков расстояния – реализует чтение показаний датчиков расстояния (0 – если подключен один датчик, 1-3 – если подключено несколько датчиков).
- Для каждого блоба в массиве блобов – получение цветового блоба из детектируемых в данный момент цветовых блобов. Позволяет получить его id, координаты центра и размер.

- Напечатать в стек вызовов - инструмент, который можно использовать для отладки, печатает заданное значение или строку в стек вызовов красным цветом.