Одна із задач, з якою ми зіткнулися — оператор нафтопроводу хотів інспектувати ділянки без стільникового зв'язку. 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+ проектів для інспекції, сільського господарства та розвідки. Якщо потрібен надійний додаток для керування дроном — зв'яжіться з нами для безкоштовної оцінки. Отримайте консультацію по вашому проекту.







