ドローン(Tello)を自作アプリで操縦する 1
最近ドローンを買いました。
DJI Mavic miniとTelloです。
なぜ2つ買ったかというと、性能的にはMavic miniが上ですが、Telloはこんな感じで自作プログラムで飛ばすことができます。面白そう。
ただ、公式で用意されているEDUはブロックプログラミングみたい。
これはこれで教育的には非常にいいものかもしれませんが、個人的には何ならCで組み込みドローン開発したい勢いなので、もっとガンガンやりたい気分でした。
そこで、いい感じのを見つけました。
TELLO SDK
SDKと言っているのでライブラリとかかなあと思ったら、素のUDP通信リファレンスでした。(Pythonライブラリはあるみたいですが)
TELLOがルーター&アクセスポイントになって、UDPでコマンド送ると色々できるみたいです。
ということで、中身を見ていきます。
'2. ARCHITECTURE
Use Wi-Fi to establish communication between Tello and PC, Mac or Mobile deviceSend Command & Receive Response
Tello IP: 192.168.10.1 UDP PORT:8889 <<- ->> PC/Mac/Mobile
Remark1: Set up a UDP client on PC, Mac or Mobile device to send and receive message
from Tello via the same port.
Remark2: Send “command” command to Tello via UDP PORT 8889 to initiate Tello’s SDK
mode, before sending all other commands.Receive Tello State
Tello IP: 192.168.10.1 ->> PC/Mac/Mobile UDP Server: 0.0.0.0 UDP PORT:8890
Remark3: Set up a UDP server on PC, Mac or Mobile device and listen the message from
IP 0.0.0.0 via UDP PORT 8890. Do Remark2 to start receiving state data if you haven’t.Receive Tello Video Stream
Tello IP: 192.168.10.1 ->> PC/Mac/Mobile UDP Server: 0.0.0.0 UDP PORT:11111
Remark4: Set up a UDP server on PC, Mac or Mobile device and listen the message from
IP 0.0.0.0 via UDP PORT 11111.
Remark5: Do Remark2 if you haven’t. Then send “streamon” command to Tello via UDP
PORT 8889 to start the streaming.
UDPの経路は3通りで、ポート番号で役割が分かれています。
- コマンド送ってレスポンスを受ける8889番ポート
- Telloのステータスが常に送られてくる11111番ポート
- 映像が送られてくる11111ポート
これだけあれば映像&センサー情報を受けながらある程度自律運転できそう。
とりあえずコマンド送ってみる
C#でUDPを送ってみます。
using System;
using System.Net;
using System.Net.Sockets;
using System.Text;
namespace ConsoleTest
{
class Program
{
static void Main(string[] args)
{
UdpClient udpClient = new UdpClient(50000);
udpClient.Connect("192.168.10.1", 8889);
while (true)
{
Byte[] sendBytes = Encoding.ASCII.GetBytes(Console.ReadLine());
udpClient.Send(sendBytes, sendBytes.Length);
IPEndPoint RemoteIpEndPoint = new IPEndPoint(IPAddress.Any, 0);
Byte[] receiveBytes = udpClient.Receive(ref RemoteIpEndPoint);
string returnData = Encoding.ASCII.GetString(receiveBytes);
Console.WriteLine(returnData.ToString());
}
}
}
}
適当。
command
"command"文字列を送ると"ok"が返ってきました。これでSDK modeになるみたいです。
takeoff
"takeoff"を送ると、離陸しました。
前後左右移動
"forward","back","right","left"で高度と向きを保ったまま前後左右移動できます。
例えば"forward 100"で100cm前進します。前進動作が終わったら"ok"が返ってくるので、その間は何も送らないほうがいいみたいです。
上下移動
"up","down"で高度が変わります。
"up 50"で上方向に50cm上昇しました。
これから
基本、Tello側は機体制御に集中して、色々操縦はPCとかスマホ側でやる仕組みみたいです。
なので、これから2つくらいやってみます。
- M5Stack or M5Stick Cでコントローラ作る
- IMUで直感的に操作できそう
- 映像から顔認識して顔を追う
- OpenCVとかでできるかなぁと
- まぁ、それっぽいのやってみます
空き時間にちょろちょろとやっていきますー
Author And Source
この問題について(ドローン(Tello)を自作アプリで操縦する 1), 我々は、より多くの情報をここで見つけました https://qiita.com/ronkabu/items/b260693f977282efb9fb著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .