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