00-头图1920-680_2x-w1280

ギークな人達のTELLOな話。あ、ギークじゃないよ(笑)

Amazonで『¥12,636』 というお手頃価格ながら機能満載のドローンが『Tello』です!

ドローン世界シェア7割を誇るDJI社と「Intel入ってる」でお馴染みのインテル社がパートナーシップを組んで生み出されたこのドローンは、『初心者向けの最強モデル』と言っても間違いないでしょう。

初心者向けのTELLOに関する記事は沢山あるので、本日はギークな人達にとってのTELLOとは?という観点で記事を書きたいと思います。

○プログラムでドローンを飛ばしてみよう!

2017年3月に発表された新学習指導要領で、2020年度から小学校でプログラミング教育が必修化されることが明示されました。数年前からプログラミング教育への関心は高まっていたものの、必修化後には小学校でどのような授業が展開されるか気になっている親御さんは多いと思います。

ドローン業界にも白羽の矢が立ちまして、ドローンを使ってプログラミングを学んでみようという教室が増えています。便利な世の中になりましたので、ビジュアルプログラミング言語「Scratch」を使ったり、TELLO専用の「DroneBlock」などを使って、初心者でもドローンを簡単に飛ばすことができます。

毎週金曜日に開催してドローン道場で、「DroneBlock」を使ったプログラミング勉強会を企画してみたところ、多くの方が参加してくださって盛り上がりました!

○それでは満足しないギークな人達

確かに、ドローンをプログラミングで飛ばすのは面白いのですが、「DroneBlock」で使えるコマンドは制限されていますので、ひと通りの動きを試すと飽きてしまうという弱点があります。

なにより、ドローンの魅力である『空撮』をプログラミングで実行できないというのは、とても残念です(´;ω;`) 

「アプリで写真や動画が撮影できるのに、なんでプログラミングで撮影できないんだろう?」と不思議に思っていましたら、公式のTello SDK(Software Development Kit:ソフトウェアを開発するために必要なプログラムや技術文書などをひとまとめにしたもの)に撮影機能が含まれていないからなんですね。(´・ω・`)ショボーン

僕のようなフツーの人はここで諦めるのですが、世の中にはギークな人達がいまして、「なにぃ~ SDKで公開されていないだと? それなら、通信内容を傍受して、仕組みをハックしてやるぜ!」と熱くなるみたいですw

で、本当に作っちゃったのがこちらw

すごいヽ(=´▽`=)ノ
こんな感じで、TELLOから地上局に送信されるストリーミングビデオを表示することができます。

 package main
 import (
     "fmt"
     "os/exec"
     "time"
     "gobot.io/x/gobot"
     "gobot.io/x/gobot/platforms/dji/tello"
 )
 func main() {
     drone := tello.NewDriver("8890")
     work := func() {
         mplayer := exec.Command("mplayer", "-fps", "25", "-")
         mplayerIn, _ := mplayer.StdinPipe()
         if err := mplayer.Start(); err != nil {
             fmt.Println(err)
             return
         }
         drone.On(tello.ConnectedEvent, func(data interface{}) {
             fmt.Println("Connected")
             drone.StartVideo()
             drone.SetVideoEncoderRate(4)
             gobot.Every(100*time.Millisecond, func() {
                 drone.StartVideo()
             })
         })
         drone.On(tello.VideoFrameEvent, func(data interface{}) {
             pkt := data.([]byte)
             if _, err := mplayerIn.Write(pkt); err != nil {
                 fmt.Println(err)
             }
         })
     }
     robot := gobot.NewRobot("tello",
         []gobot.Connection{},
         []gobot.Device{drone},
         work,
     )
     robot.Start()
 }

ちなみに、公式SDKによると、TELLOはIPアドレスが192.168.10.1/24で固定されているらしくて、地上局(PCとかMobile Device)とUDP:8889でやり取りするらしいです。

Tello <<- IP: 192.168.10.1 UDP PORT: 8889 ->> PC or Mobile Device

GobotのストリーミングではUDP:8890を使っているので、Wiresharkを使って通信を解析したんだろなと物思いに耽ってしまいました( ´ー`)フゥー...

○世界中にいるギークな人達

通信プロトコルをハックしたり、バイナリを解析したりするギークな人達がいて、その成果物をオープンソースで公開してくれるおかげで、世界中の開発者がいろいろ楽しい取り組みをすることができます。

↓このGithubとか神ですね! なんと慣性航法での位置取得まで可能になっていますw

海外の英語サイトには活発なコミュニティがあり、開発者同士で色々やり取りをしているみたいです。Google先生のおかげで日本語で読めば怖くないはずw

その中で気になったのが、TELLOで物体認識をさせているスレッドです。
まるで生き物のようにTELLOがボールに反応にしています。おお、これは面白い!

ふむふむ、どうやらさっきのGobotとは別に「TelloPy」というPythonのプログラムを使ってストリーミングを取得して、OpenCVで物体をトレースしているみたい。ディープラーニングを使っているのかなと思いましたが、ドローンのプログラミングのお師匠さんによると、OpenCVでもできますとのこと。奥が深いなぁ。

そうそう、TelloPyの作者のhanyazouさんは日本人みたいで、Twitterを見たら、昔はLinuxのカーネルとか開発していて、いまはWEBやらラズパイやら何やらでいろいろと面白いことをしているみたいです。

同じようなことを考える人は多いようで、機械学習の材料としてTELLOを使って物体認識している理系OLさんの記事もありました。TensorflowやKerasのようなフレームワークを使うと、微分積分や確率統計の知識がなくても、ディープラーニングを楽しめるのは嬉しいですね。

ひと昔前だと、「これを読め!」ってPRML渡されて、あまりの数式の多さに挫折するのが関の山でしたが、最近はGoogleのCoLabみたいな控えめに言っても凄すぎる無料の環境が出て、便利な世の中になりました(/・ω・)/

TELLOプログラミングも奥が深そうですね。僕も機械学習を勉強中なので、TELLOを使っていろいろ試したいと思いますヽ(=´▽`=)ノ
あ、ギークじゃないよ(笑)

P.S
今週金曜日は「ドローンと機械学習(AI)」をテーマにドローン道場を開催します!ご興味のある方は、ぜひ起業プラザまでお越しくださいませ。


この記事が気に入ったらサポートをしてみませんか?