DJI Ryze Tello: программное управление дроном

Как следует из официальной документации, в создаваемой дроном Wi-Fi сети он имеет адрес 192.168.10.1 и принимает команды на порте UDP с номером 8889. Подключившись к сети, в первую очередь необходимо отправить команду command для перехода в режим управления (SDK mode), после этого можно отправлять любые другие команды.

Дополнительно можно получать состояние дрона на локальном порте UDP 8890, а также видеопоток с основной камеры, слушая локальный порт UDP 11111 (для запуска трансляции необходимо предварительно отправить команду streamon).

Конечной моей целью является создание полноценного мобильного приложения для управления дроном, но предварительно я хотел протестировать взаимодействие с устройством непосредственно через UDP.

Взаимодействие через UDP

Самый простой способ начать отправлять команды на DJI Ryze Tello – использовать бесплатную программу Packet Sender.



Как видно, команды успешно отправляются. При этом на исходящий UDP порт возвращаются корректные ответы, а значит всё работает как надо. Попробуем сделать то же самое из командной строки Windows 10.

Я использовал консольную утилиту Ncat (аналог легендарного Netcat) из пакета Nmap, который также бесплатен. Отправка команд осуществляется следующим образом:

echo | set /p="command" | ncat -u -p 8889 192.168.10.1 8889

Хитрый вызов echo нужен для того, чтобы команды отправлялись без дополнительных переносов строк, иначе дрон не будет их воспринимать. Я также указываю номер исходящего порта, т.к. ответы будут приходить именно на него. Это может быть любой доступный UDP порт, но для удобства я использую 8889. Перед этим также необходимо начать прослушивать этот порт в отдельном окне консоли:

ncat -l -u 8889

Также я протестировал отправку дроном информации о своём состоянии:

ncat -l -u 8890

И видеотрансляцию:

ncat -l -u 11111

С дешифровкой видеопотока ещё нужно будет разобраться, но в целом всё работает как и ожидалось. Можно наконец заняться программированием 🙂