Инструкция по эксплуатации программного обеспечения «DroneFlight»

Версия: 1.0.0


Термины и определения

ПК - персональный компьютер;

ОС - операционная система;

ПО - программное обеспечение;

Docker - открытая программная платформа для разработки, доставки и запуска приложений в изолированных контейнерах;

БпЛА - беспилотный летательный аппарат;

GSD (Ground Sample Distance) - расстояние на местности, занимаемое одним пикселем на аэрофотоснимке;

GNSS (ГНСС) - глобальная навигационная спутниковая система;

НСУ - наземная станция управления.

1. Общие сведения

Программный комплекс «DroneFlight» в автоматическом режиме выполняет полёт по заданному маршруту, фотографирование местности, обработку снимков и распознавание объектов поиска в природной среде посредством бортового вычислителя и камеры высокого разрешения в реальном времени на борту БпЛА.

На момент разработки применялись БпЛА квадро- и гексакоптерного типа с возможностью адаптации ПО к другим типам носителей.

2. Функциональные характеристики

Программный комплекс «DroneFlight» обладает следующим функционалом:

3. Требования к программно-аппаратному обеспечению

Программное обеспечение «DroneFlight» может быть адаптировано под разные типы носителей (БпЛА) и разную целевую нагрузку при наличии следующего оборудования: бортовой вычислитель, камера Sony (протокол PTP - Picture Transfer Protocol) и полётный контроллер (ArduPilot - MAVLink/MAVSDK).

ПО «DroneFlight» обеспечивает интеграцию указанного оборудования и реализует ключевой функционал при решении задачи поиска людей в природной среде в автоматическом режиме.

На данный момент для настройки БпЛА (полётного контроллера) используется общедоступное открытое ПО «MissionPlanner», для формирования и выполнения миссий - «QGroundControl».

3.1. Требования к программному обеспечению «DroneFlight»

ПО разрабатывалось в рамках следующего окружения:

3.2. Требования к аппаратному обеспечению «DroneFlight»

ПО разрабатывалось в рамках оборудования:

Оборудование для НСУ:

Объектив Sony FE 35mm f/1.8 (SEL35F18F) для данной камеры обеспечивает рабочую высоту в 100-120 метров (1.0-1.2 GSD). Объективы с фокусными расстояниями 55 и 85 мм обеспечат 1.0 GSD на высотах 150 и 230 метров соответственно.

Рекомендуются более мощные бортовые вычислители, обеспечивающие более высокую производительность и позволяющие увеличить перекрытие при фотографировании, либо снизить время на обработку снимков.

4. Предварительная настройка оборудования

4.1. Настройка бортового выччислителя

Предварительно требуется выполнить базовую установку ОС на бортовой вычислитель.

Отображение списка режимов производительности POWER MODEL:

$ less /etc/nvpmodel.conf | grep MODEL
# POWER_MODEL DEFINITIONS #
< POWER_MODEL ID=0 NAME=MAXN_SUPER >
< POWER_MODEL ID=1 NAME=10W >
< POWER_MODEL ID=2 NAME=15W >
< POWER_MODEL ID=3 NAME=20W >
< POWER_MODEL ID=4 NAME=40W >

Выставление режима максимальной производительности:

$ sudo nvpmodel -m 0

Подключение к бортовому вычислителю по SSH с использованием USB Type-C кабеля:

$ ssh <USERNAME>@192.168.55.1

, либо подключиться к бортовому вычислителю как к обычному ПК.

В файле /etc/udev/rules.d/99-nv-ufs-mount.rules необходимо выполнить настройку монтирования USB-накопителей следующим образом:

# Mount UFS card when detected.
ACTION=="add", KERNEL=="sd[a-z][0-9]", SUBSYSTEM=="block", RUN{program}+="/usr/bin/systemd-mount --no-block --automount=yes --collect $devnode /media/%E{ID_FS_LABEL}"
# Unmount UFS card when removed.
ACTION=="remove", KERNEL=="sd[a-z][0-9]", SUBSYSTEM=="block", RUN{program}+="/usr/bin/systemd-umount /media/%E{ID_FS_LABEL}"

Данные настройки позволят выполнять автоматическое монтирование USB-накопителей в директорию /media/<Метка_USB-накопителя>, например, /media/DroneFlight.

Для запуска ПО «DroneFlight» требуется Docker. Для установки и настройки Docker необходимо следовать официальной документации:

Для работы с 7z-архивами требуется установка пакета p7zip-full:

$ sudo apt update
$ sudo apt install p7zip-full

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

4.2. Настройка USB-накопителя (Type-A)

Результаты работы ПО «DroneFlight» опционально могут сохраняться на USB-накопитель. Перед использованием USB-накопителя требуется выполнить ряд действий.

Подключить USB-накопитель (Type-A) к бортовому вычислителю и выполнить команду отображения списка блочных устройств:

$ lsblk

Если USB-накопитель определился как /dev/sd[a-z][0-9], например,

$ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
sda 8:0 1 58,6G 0 disk
└─sda1 8:1 1 58,6G 0 part

, то далее требуется отмонтировать и отформатировать USB-накопитель следующим образом:

$ sudo umount /dev/sda1
$ sudo mkfs.ext4 -L DroneFlight /dev/sda1

В данном случае меткой USB-накопителя будет DroneFlight, файловая система - Ext4.

Если USB-накопитель определился как /dev/sd[a-z], например, /dev/sda, то перед форматированием потребуется предварительно выполнить партиционирование, например, командой fdisk. Далее выполнить действия на предыдущих шагах.

4.3. Настройка камеры Sony ILX-LR1

Для настройки камеры предварительно требуется установить объектив (в данном случае Sony FE 35mm f/1.8 (SEL35F18F)) и открыть защитную крышку.

Камера Sony ILX-LR1 не имеет собственного дисплея и встроенного аккумулятора. Настройка выполняется при подключении камеры к монитору ПК через HDMI-разъём.

При настройке камеры для БпЛА могут быть следующие рекомендации. Поскольку БпЛА выполняет фотографирование в движении, во избежание смазанных снимков имеет смысл уменьшать выдержку (Shutter Speed). При использовании фиксированного подвеса камеры (без стабилизации) и объектива Sony FE 35mm f/1.8 (SEL35F18F) приемлемым значением для Shutter Speed является значение 1/3200. Слишком короткая выдержка может приводить к появлению "шума". Остальные настройки могут быть выставлены автоматически.

Пример снимка с указанными настройками (высота полёта БпЛА 100-120 метров, горизонтальная скорость 10 м/с):

4.4. Настройка полётного контроллера БпЛА (ArduPilot)

На момент использования ПО «DroneFlight» полётный контроллер БпЛА должен быть предварительно настроен. БпЛА должен быть способен выполнять полёты без использования программного комплекса «DroneFlight». Для настройки полётного контроллера (БпЛА) требуется использовать официальную документацию.

При использовании ПО «DroneFlight» дополнительная настройка полётного контроллера БпЛА не требуется. Подключение полётного контроллера к бортовому вычислителю выполняется кабелем USB Type-C - USB Type-A.

5. Установка программ

При установке общедоступного открытого ПО рекомендуется использовать официальную документацию:

5.1. Установка «DroneFlight»

Программное обеспечение «DroneFlight» устанавливается на бортовом вычислителе.

Для установки ПО «DroneFlight» требуется распаковать архив droneflight_1.0.0.7z с указанием пароля.

Пароль к архиву droneflight_1.0.0.7z доступен в файле CREDENTIALS.txt.

$ 7z x droneflight_1.0.0.7z

Структура файлов должна выглядеть следующим образом:

droneflight
├── data
│ ├── droneflight
│ │ ├── bin
│ │ │ └── droneflight
│ │ └── logs
│ ├── entrypoint.sh
│ ├── fonts
│ │ └── roboto
│ │ ├── LICENSE.txt
│ │ └── Roboto-Regular.ttf
│ └── model.engine
└── docker-compose.yml

, где

Работа приложения выполняется в рамках базового Docker-образа droneflightru/droneflight-edge:1.0.0. Для загрузки Docker-образа из приватного репозитория DockerHub (https://hub.docker.com/u/droneflightru) требуется предварительная аутентификация:

$ docker login -u droneflightru

Пароль к приватному репозиторию доступен в файле CREDENTIALS.txt.

Выполнение успешной аутентификации:

$ docker login -u droneflightru
i Info → A Personal Access Token (PAT) can be used instead.
To create a PAT, visit https://app.docker.com/settings
Password:
WARNING! Your credentials are stored unencrypted in '/home/edge/.docker/config.json'.
Configure a credential helper to remove this warning. See
https://docs.docker.com/go/credential-store/
Login Succeeded

Выполнение загрузки базового Docker-образа droneflightru/droneflight-edge:1.0.0:

$ docker pull droneflightru/droneflight-edge:1.0.0

Отображение списка Docker-образов:

$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
droneflightru/droneflight-edge 1.0.0 38ce8e691199 About an hour ago 24.6GB

Установка ПО «DroneFlight» на бортовой вычислитель завершена.

6. Эксплуатация программ

Подключение предварительно настроенного оборудования:

6.1. Настройка ПО «DroneFlight»

При установке ПО «DroneFlight» на бортовой вычислитель была получена следующая структура файлов:

droneflight
├── data
│ ├── droneflight
│ │ ├── bin
│ │ │ └── droneflight
│ │ └── logs
│ ├── entrypoint.sh
│ ├── fonts
│ │ └── roboto
│ │ ├── LICENSE.txt
│ │ └── Roboto-Regular.ttf
│ └── model.engine
└── docker-compose.yml

, где

Содержимое папки data будет смонтировано и доступно в Docker-контейнере по пути /root/data.

Содержимое скрипта data/entrypoint.sh, содержащего команды при запуске Docker-контейнера:

#!/bin/bash
#
# sshd
#
/usr/sbin/sshd -D
#/usr/sbin/sshd
#
# droneflight
#
#(cd /root/data/droneflight && /root/data/droneflight/bin/droneflight \
# --connection_url \
# serial:///dev/serial/by-id/usb-ArduPilot_Pixhawk6X-bdshot_2C004D001251333234373134-if00:57600 \
# --model_path /root/data/model.engine \
# --threshold 0.7 \
# --mission_dir /root/data/missions \
# --archive_dir /media/DroneFlight \
# --draw_slices true \
#> /root/data/droneflight/logs/droneflight_`date +%s`.log 2>&1)

В данном случае при запуске Docker-контейнера будет выполняться только запуск SSH-демона - команда /usr/sbin/sshd -D (порт 2222).

После подключения полётного контроллера к бортовому вычислителю USB-кабелем Type-C - Type-A станет доступен список устройств, например,

$ ls -1 /dev/serial/by-id/
usb-ArduPilot_Pixhawk6X-bdshot_2C004D001251333234373134-if00
usb-ArduPilot_Pixhawk6X-bdshot_2C004D001251333234373134-if02

В файле data/entrypoint.sh требуется внести изменения в значение переменной --connection_url в соответствии с полученным выводом устройств. В данном случае формат подключения: serial://[path][:baudrate].

Для запуска Docker-контейнера требуется перейти в ранее распакованную папку и на одном уровне с файлом docker-compose.yml выполнить команду:

$ docker compose up -d
[+] Running 1/1
✔ Container toolchain-droneflight-edge-1 Started

Список запущенных Docker-контейнеров:

$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
2b4b2426b54b droneflightru/droneflight-edge:1.0.0 "/root/data/entrypoi…" 34 seconds ago Up 33 seconds toolchain-droneflight-edge-1

Доступ в контейнер по SSH (пользователь root, пароль доступен в файле CREDENTIALS.txt):

$ ssh -p 2222 root@192.168.55.1

Проверка приложения (вывод списка параметров приложения):

root@edge:~# /root/data/droneflight/bin/droneflight --help
droneflight: /root/data/droneflight/bin/droneflight <flags>
Flags from droneflight.cpp:
-archive_dir (The archive directory) type: string
default: "/media/DroneFlight"
-batch_size (The batch size) type: uint32 default: 8
-camera_x_pitch (The camera XPitch deg) type: double
default: 31.199999999999999
-camera_y_roll (The camera YRoll deg) type: double default: 0
-camera_z_yaw (The camera ZYaw deg) type: double default: 0
-connection_timeout (The connection timeout (in seconds)) type: double
default: 3
-connection_url (The connection URL) type: string default: ""
-draw_slices (Draw slices) type: bool default: false
-focal_length (The focal length) type: double default: 35
-log_level (The log level (trace, debug, info, warn, error, critical, off))
type: string default: "info"
-min_threshold (The min threshold) type: double
default: 0.10000000000000001
-mission_dir (The mission directory) type: string default: "missions"
-model_path (The model path) type: string default: ""
-photo_height (The photo height) type: int32 default: 6336
-photo_width (The photo width) type: int32 default: 9504
-sensor_height (The sensor height) type: double default: 23.800000000000001
-sensor_width (The sensor width) type: double default: 35.700000000000003
-slice_overlap_height_ratio (The slice overlap width ratio) type: double
default: 0.11
-slice_overlap_width_ratio (The slice overlap width ratio) type: double
default: 0.13439999999999999
-threshold (The threshold) type: double default: 0.69999999999999996

Большинство параметров имеют значения по-умолчанию. Значения могут быть переопределены в параметрах скрипта data/entrypoint.sh.

Краткое описание параметров приложения droneflight:

Требуемые изменения входных параметров вносятся в файл data/entrypoint.sh и редактируются комментарии (символы #) следующим образом:

#!/bin/bash
#
# sshd
#
#/usr/sbin/sshd -D
/usr/sbin/sshd
#
# droneflight
#
(cd /root/data/droneflight && /root/data/droneflight/bin/droneflight \
--connection_url \
serial:///dev/serial/by-id/usb-ArduPilot_Pixhawk6X-bdshot_2C004D001251333234373134-if00:57600 \
--model_path /root/data/model.engine \
--threshold 0.7 \
--mission_dir /root/data/missions \
--archive_dir /media/DroneFlight \
--draw_slices true \
> /root/data/droneflight/logs/droneflight_`date +%s`.log 2>&1)

, где ssh-демон запускается без ключа -D.

С этого момента запуск приложения droneflight будет выполняться в автоматическом режиме при включении бортового вычислителя и автоматическом запуске Docker-контейнера. SSH-доступ в контейнер сохранится.

6.2. Настройка миссии в «QGroundControl»

В данном руководстве отсутствует информация по установке и полной настройке ПО «QGroundControl» (необходимо использовать официальную документацию). Кратко изложены некоторые настройки при создании миссий.

Открыть приложение «QGroundControl»:

Для создания миссии требуется нажать на кнопки Plan / Survey в панели инструментов:

Далее требуется нажать на кнопки Pattern / Survey:

В верхней панели инструментов выбрать тип Basic:

Далее потребуется изменить расположение и форму области фотографирования (при необходимости создать несколько областей), добавить промежуточные путевые точки.

Перекрытие курсовое и боковое, высота фотографирования или GSD (Grnd Res), угол прохождения БпЛА (Angle), расстояние разворота (Turnaround dist) задаются в панели инструментов для заданной области Survey. Кнопкой Rotate Entry Point задаётся точка входа в область фотографирования.

На следующей вкладке на панели инструментов выполняется настройка параметров камеры:

В списке выбирается Custom Camera, указываются размеры сенсора камеры, размеры снимков и фокусное расстояние объектива.

В данном примере указаны настройки для камеры Sony ILX-LR1 и объектива Sony FE 35mm f/1.8 (SEL35F18F).

На следующей вкладке на панели инструментов выполняется настройка рельефа:

Значение Relative To Launch может быть изменено, например, на Calculated Above Terrain. В этом случае БпЛА будет огибать рельеф местности на основе значений карты высот.

В нижней панели траектория движения начала учитывать рельеф местности.

По каждой области Survey указывается итоговая статистика:

Нажатием на кнопки Waypoint добавляются промежуточные путевые точки, для которых задаются высота и скорость полёта:

По окончании настройки миссии анализируются общие параметры (дистанция, время полёта и другие параметры):

Нажатием на кнопку Upload Required происходит загрузка миссии на полётный контроллер:

В случае успешной загрузки отобразится Done. Для перехода в режим полёта требуется нажать на кнопку Fly в панели инструментов. Перевод слайдера в верхней части приложения инициирует начало выполнения автоматического полёта по заданному маршруту:

6.3. Выполнение автоматического полёта

В момент завершения формирования миссии и загрузки её на полётный контроллер БпЛА, подаётся питание на целевую нагрузку: сначала на камеру, затем на бортовой вычислитель.

Формирование миссии может занимать длительное время и преждевременное включение целевой нагрузки будет разряжать аккумуляторы БпЛА.

В момент включения бортового вычислителя автоматически будет запущено ПО «DroneFlight». ПО «DroneFlight» выполнит инициализацию камеры, подключение к полётному контроллеру, загрузку миссии в память приложения. Готовность ПО «DroneFlight» к полёту можно будет зафиксировать на слух при выполнении камерой трёх тестовых снимков (без сохранения на SD-карту камеры и без сохранения на файловую систему бортового вычислителя).

В этот момент в ПО «QGroundControl» требуется сдвинуть слайдер для начала автоматического полёта.

Отслеживание выполнения миссии:

6.4. Результат работы ПО «DroneFlight»

Результатом работы ПО «DroneFlight» является:

Log-файл работы приложения содержит информацию о работе приложения для конкретного полёта с заданным уровнем логирования.

Набор данных сохраняется на USB-носитель (или в директорию на файловой системе бортового вычислителя) - параметр --archive_dir в скрипте data/entrypoint.sh.

Если по какой-либо причине запись данных на USB-носитель будет невозможна (или, например, архив данных будет повреждён), данные будут доступны на файловой системе бортового вычислителя в директории /root/data/missions (параметр --mission_dir).

Набор данных имеет следующую структуру файлов:

├── checksum.txt
├── results.zip
└── track.gpx

, где

Проверка контрольной суммы архива выполняется следующей командой:

$ sha256sum -c checksum.txt
results.zip: OK

Если контрольная сумма корректна, выполняется распаковка архива results.zip:

$ unzip results.zip

Структура файлов архива:

├── detections
├── images
├── photos
├── previews
├── results.fb
├── results.json
├── results.zip
└── track.gpx

, где

Для анализа полученных данных используется ПО «DroneFlight Viewer».