Одна из задач, с которой мы столкнулись — оператор нефтепровода хотел инспектировать участки без сотовой связи. DJI SDK без интернета не активируется, а решение на MAVLink с офлайн-режимом сэкономило заказчику две недели простоя. Средняя задержка видео на DJI — 80–150 мс, но при неверной обработке на main thread она вырастает до 500 мс, что для FPV критично. Для отладки используем симуляторы SITL, что позволяет выявить ошибки до выезда на поле. Бюджет типового проекта на DJI SDK — от $10,000, экономия за счёт симулятора — до $5,000 на этапе тестирования.
Почему регистрация приложения в DJI SDK — проблема?
DJI Mobile SDK требует онлайн-регистрации AppKey на серверах DJI при первом запуске. Без интернета SDK не инициализируется — приложение не сможет управлять дроном в зоне без связи, пока хотя бы раз не пройдёт активацию. Для инспекции трубопроводов или полётов в ущельях это критично. DJI предлагает OfflineActivation через Enterprise-лицензию, но это отдельный договор. По данным DJI Developer Guide, этот режим требует дополнительной конфигурации. Мы помогаем клиентам оценить необходимость такого режима и, если нужно, реализуем поддержку офлайн-активации.
Типичная ошибка с жизненным циклом 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, но падали на реальном устройстве. Мы перехватываем такие состояния и гарантируем стабильность.
Как снизить задержку видео до 150 мс?
Декодирование H.264/H.265 через VideoFeeder даёт задержку 80–150 мс на SurfaceView — это норма. Но если обрабатывать кадры с ML-моделью на main thread, задержка вырастает до 500+ мс. Правильная схема — шаги:
- Декодированные кадры через MediaCodec с
BUFFER_FLAG_END_OF_STREAM. - ML-инференс на
Dispatchers.Default(отдельный поток). - Вывод результата со следующим кадром. Мы применяем этот подход в каждом проекте — цифры проверены на реальных полётах.
MAVLink на ArduPilot/PX4: архитектурные решения
Для кастомных платформ используем MAVLink — бинарный протокол с конкретными 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 не получен 3 секунды — триггерим аварийное состояние UI и блокируем все команды.
Важно: MAVLink-пакеты идут по UDP без доставки. Для команд с квитированием (COMMAND_LONG) дрон отвечает COMMAND_ACK. Если ACK не пришёл за 500 мс — повтор до 3 попыток, затем failure state. Всё реализуется вручную — в протоколе нет автоматического retry.
Как выбрать между DJI SDK и MAVLink?
| Критерий | DJI SDK | MAVLink (ArduPilot/PX4) |
|---|---|---|
| Простота старта | Высокая (готовые компоненты) | Низкая (нужна реализация протокола) |
| Задержка видео | 80–150 мс | Зависит от реализации |
| Офлайн-режим | Требует Enterprise-лицензии | Работает сразу |
| Кастомизация | Ограничена возможностями SDK | Полная свобода |
| Поддержка дронов | DJI, Autel, Parrot | Любые на ArduPilot/PX4 |
Сравнение: DJI SDK даёт в 2 раза меньшую задержку видео по сравнению с типовой реализацией MAVLink, но MAVLink позволяет полностью контролировать дрон без интернета.
UI для управления: джойстик, безопасность, телеметрия
Виртуальный джойстик — MotionEvent на View, нормализация в [-1, 1], отправка команд с частотой 20 Гц (раз в 50 мс). Ниже 10 Гц — дрон плавает, выше 30 Гц — лишняя нагрузка на канал. Обязательные элементы:
- Кнопка Return-to-Home с подтверждением (два тапа или hold 2 сек)
- Индикатор заряда батареи (красный при <20%)
- RSSI сигнала канала
- Блокировка взлёта при GPS < 6 спутников (для режима GPS Hold)
Подробнее: реализация джойстика требует нормализации координат и анти-джиттер фильтра, чтобы избежать дрожания курсора.
Процесс работы и сроки
| Этап | Длительность |
|---|---|
| Анализ платформы и требований | 5–10 дней |
| Проектирование архитектуры | 3–5 дней |
| Разработка ядра (управление, видео) | 2–4 недели |
| UI и маршруты | 2–4 недели |
| Тестирование (SITL + поле) | 1–2 недели |
| Деплой в сторах | 5–7 дней |
Базовое приложение на DJI SDK — 4–8 недель. Кастомное на MAVLink с расширенным UI и автономными миссиями — 3–6 месяцев. Оценку проводим бесплатно после изучения вашей задачи.
Что входит в разработку под ключ
- Исходный код с комментариями
- Документация по сборке и конфигурации
- Настроенные ключи и provisioning profiles
- Интеграция с App Store Connect / Google Play Console
- Обучение оператора работе с приложением
- Техническая поддержка на 3 месяца после релиза
Мы — команда с опытом в мобильной разработке для беспилотников. За это время сделали 30+ проектов для инспекции, сельского хозяйства и разведки. Если нужно надёжное приложение для управления дроном — свяжитесь с нами для бесплатной оценки. Получите консультацию по вашему проекту.







