Розробка мобільного приложення для керування дроном
Більшість дронів для 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 місяців. Оцінка після вивчення платформи дрона, вимог до функціональності та сертифікації (якщо потрібна публікація в сторах з дроном у категорії «небезпечні пристрої»).







