Разработка мобильного приложения для управления дроном
Большинство дронов для B2B и B2C-рынка предоставляют мобильный SDK: DJI Mobile SDK (iOS/Android), Parrot Ground SDK, Autel SDK, Skydio. Приложение «с нуля» без SDK — это реализация MAVLink поверх UDP/TCP напрямую на дрон, что имеет смысл для кастомных платформ на ArduPilot или PX4. Разберём оба подхода, потому что требования к архитектуре — принципиально разные.
DJI SDK: где теряют время
Регистрация приложения и офлайн-режим
DJI Mobile SDK требует регистрации AppKey на сервере DJI при каждом первом запуске. Без интернета SDK не инициализируется в полном объёме. Это означает: приложение не может управлять дроном в зоне без связи, пока хотя бы раз не прошло онлайн-регистрацию. Для промышленных применений (инспекция трубопроводов, работа в ущельях) — это жёсткое ограничение. DJI предоставляет OfflineActivation через Enterprise-лицензию, но это отдельный договор с ценой от нескольких тысяч долларов в год.
Жизненный цикл ProductKey и подключение
Алгоритм подключения в DJI SDK 5.x:
-
SDKManager.getInstance().init()вApplication.onCreate() -
SDKManager.getInstance().registerApp()— асинхронно, callback вISDKManagerCallback - Только после
onRegisterSuccessначинаем слушатьKeyedStoreилиFlightController
Типичная ошибка: разработчик вызывает FlightController.getState() до завершения регистрации, получает null, не обрабатывает это и приложение крашится с NPE при первом реальном полёте. В SDK 4.x это было особенно неочевидно — некоторые методы «работали» на симуляторе DJI, но падали на реальном устройстве.
Video feed и задержка
DJI SDK декодирует H.264/H.265 поток с дрона через собственный VideoFeeder. Задержка стриминга на SurfaceView — 80–150 мс в нормальных условиях. Если пытаться обрабатывать кадры через ML (обнаружение объектов) и делать это на main thread — задержка вырастает до 500+ мс и управление становится небезопасным. Правильная схема: декодированные кадры через MediaCodec с BUFFER_FLAG_END_OF_STREAM обработкой, ML-инференс в отдельном корутинном dispatcher с Dispatchers.Default, результат отображается с следующим кадром.
MAVLink на ArduPilot/PX4: архитектурные решения
Для кастомных платформ используем dronefleet/mavlink (Java/Android) или MAVLink.swift (iOS). Протокол — бинарный, конкретные message ID для управления: SET_POSITION_TARGET_LOCAL_NED, COMMAND_LONG с MAV_CMD_NAV_TAKEOFF / MAV_CMD_NAV_LAND.
Соединение: Wi-Fi точка доступа дрона → UDP сокет порт 14550. На Android — DatagramSocket в CoroutineScope(Dispatchers.IO), heartbeat каждые 1000 мс через HEARTBEAT message. Если heartbeat не получен от дрона 3 секунды — триггер аварийного состояния в UI, блокировка всех команд управления.
Критичная деталь: MAVLink-пакеты идут по UDP без гарантии доставки. Для команд с квитированием (COMMAND_LONG) дрон отвечает COMMAND_ACK. Если ACK не пришёл за 500 мс — повтор, максимум 3 попытки, потом failure state. Это надо реализовывать руками — никакого автоматического retry в протоколе нет.
UI для управления: задержка и безопасность
Виртуальный джойстик — самый распространённый способ управления. Реализация: MotionEvent на View, нормализация координат до диапазона [-1, 1], отправка команды с частотой 20 Гц (раз в 50 мс). Ниже 10 Гц — дрон начинает «плавать», выше 30 Гц — лишняя нагрузка на канал связи без прироста управляемости.
Обязательные элементы безопасности в UI:
- Кнопка Return-to-Home с подтверждением (два тапа или hold 2 сек)
- Индикатор уровня заряда батареи дрона с цветовой индикацией (красный при <20%)
- Отображение RSSI сигнала RC/Wi-Fi канала
- Блокировка команд взлёта при GPS < 6 спутников (для режимов с GPS Hold)
Тестирование без дрона
DJI предоставляет Simulator в DJISDK — эмулятор полёта с телеметрией. Для MAVLink — ArduPilot SITL (Software In The Loop) с симуляцией физики. Оба позволяют прогонять автоматизированные тесты полётных сценариев. UI-тесты через Espresso/XCUITest с мок-репозиторием телеметрии.
Процесс и сроки
Приложение с DJI SDK, базовым управлением и видеопотоком — 4–8 недель. Кастомное решение на MAVLink с расширенным UI, автономными миссиями и аналитикой — 3–6 месяцев. Оценка после изучения платформы дрона, требований к функциональности и сертификации (если нужна публикация в сторах с дроном в категории «опасные устройства»).







