見出し画像

TELLO HACK DAY ~ドローンは箱である。プログラミングで魂を吹き込もう~

皆さん、こんにちは。

12月は忘年会シーズンなので、2018年シーズンの最終回となるドローン道場のテーマを決めました。そのテーマがこちら!

TELLO HACK DAY 
 ~ドローンは箱である。プログラミングで魂を吹き込もう~

『WIRED』日本版が復活したので、モロに影響されて中二病的なテーマなりました(笑)最初に「ドローンは箱に過ぎない」と言い切ったのは、クリス・アンダーソンだったはずw 蛇足ですが、『WIRED』日本版のケヴィン・ケリーの話が素晴らしいので、ぜひ読んでくださいヽ(=´▽`=)ノ

○初心者向けの最強モデルドローン『TELLO』

わずか$99(Amazonで\12,636)で、驚くべきほどの飛行性能と機能を満載しているドローンが『Tello』です!

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

まずは、TELLO公式のプロモーション動画を見て「すごーい」と感動してください(笑)

趣味のドローンとして十分に楽しめるのですが、このドローンはプログラミングでも動かすことができます。2017年3月に発表された新学習指導要領で、2020年度から小学校でプログラミング教育が必修化されることが明示されました。

数年前からプログラミング教育への関心は高まっていたものの、必修化後には小学校でどのような授業が展開されるか気になっている親御さんは多いと思います。

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

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

○Intel入ってる。 Intel Myriad VPU Powered Toy Drone

TELLOには、高度なイメージングとビジョン処理のためのオンボードのMovidius Myriad 2VPU(ビデオ処理ユニット)を搭載したIntelの14コアプロセッサが入っています。

インテルのMovidius Myriad 2 VPUは、業界を定義する常時使用のビジョンプロセッサーであり、IntelR社のMovidius の第2世代VPUです。Myriad 2は、今日市場に出ている何百万ものデバイスに使用されており、性能と低消費電力の両方が要求されるAIやVision分野で活躍しています。

主な利点は、下記の通りです。

・12個のプログラム可能なSHAVEコア + 専用ビジョンアクセラレータ + 2CPU
・超低電力設計のアーキテクチャ
・AI用に並列化された高性能VPU
・組み込みアプリケーション用の小型フットプリント

このようなクールなハードウエアにも関わらず、公式のTello SDKは非常に限定された機能しか提供されていません。

そこで、TELLO をHACKしようぜ!というコミュニティが活発に動いているわけです。

○見えない無線(WiFi)をアナライザーで見てみよう!

最初に、TELLOとモバイル端末の通信を見てみましょう。

無線LANの環境をチェックするには、現在の電波状況をビジュアルに表示するアプリ「Wifi Analyzer」がお勧めです。Android版のみしかなく、iPhoneには対応しないのが残念なところですが、Playストアから早速ダウンロードしてみましょう。

起動すると、こんな感じで近隣のアクセスポイントが利用しているチャンネルを表示されます。TELLOは、2.4GHz帯を使っているので、周りにある無線アクセスポイントと重なっている状態を見ることができます。

同じチャンネルだと電波干渉してつながりにくくなりそうなのは、直感的にわかりますね。具体的には、2.4GHzは1~13chまであり、1チャンネルあたり5MHzずつずれています。1チャンネルあたりの幅は20MHz、22MHzなどがあり、図にすると以下のようになります。

引用元:Allied telesis

TELLOの場合は、自動でチャンネルを調整して、できるだけ空いているチャンネルを選択してくれるのですが、そもそも2.4GHz帯に干渉する電波が多すぎるのです。アナライザーを使えば、見えない電波を見ることができるので、「この状態で飛ばすのは危ないな」と判断することができます。

人間には「見えないものは、良い方向に解釈してしまう」という宗教心理があります。例えば、声の素敵なサポートセンターのお姉さんは、美人に違いないと勝手に想像してしまうわけです(笑) 『見える化』することで、その幻想に惑わされずに、冷静な判断をすることができるようになります。

Wi-Fiのチャンネルについての基礎知識については、下記のページにわかりやすい解説がありましたので、興味のある方は御覧ください。

○通信の中身を見てみよう!パケットキャプチャによる通信解析入門

TELLOとモバイル端末の通信内容を解析してみましょう!

公式のTello SDKを確認すると、TELLOとモバイル端末間は『UDP』という
プロトコルで通信されています。

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

TELLOのIPアドレスは、『192.168.10.1』で固定IPになっており、そこでUDPのポート番号『8889』番で待ち受けしています。

IPアドレスとは、コンピュータで通信をするときに利用する住所のようなものであり、TELLOには『192.168.10.1』という『プライベートIPアドレス(これは、自宅や会社などで使うローカルなIPアドレスです)』が割り振られています。詳しくは、下記ページを御覧ください。

引用元:パソコン初心者講座

モバイル端末で接続するときには、『192.168.10.2』というIPアドレスがモバイル端末に割り当てられます。同じ、『192.168.10.0/24』のネットワークに属するので、TELLOとモバイル端末が通信できるわけです。

例えば、磯野家のマスオさんとサザエさんという例を考えます。『192.168.10.0/24』というネットワークが磯野家です。磯野家のマスオさんに割り振ら『192.168.10.0/24』というネットワークが磯野家です。磯野家のマスオさんに割り振られている番号が『192.168.10.1』です。サザエさんの番号は『192.168.10.2』です。

マスオさんとサザエさんは『日本語』で情報のやり取りをします。
TELLOとモバイル端末で通信するときには、『UDP』というプロトコル(お話するためのルール)を使って情報のやり取りをします。なんとなくイメージがつかめましたか?(余計にわからなくなったらごめんなさいm(_ _)m)

それでは、実際の流れているパケットを見てみましょう。パケットを見るためには、『Wireshark』というソフトウェアを利用します。

引用元:さくらのナレッジ

UDPのパケットが沢山流れている様子が見えますね。ここでも通信している中身の『見える化』しているわけです。こうやって16進数(コンピュータで処理するときは2進数)の通信が流れている様子を見れば、デジタルな世界を直感的にとらえることができます。

昔からドローンをされている方には、アナログの世界は得意だが、デジタルはちょっと苦手だと方も多いようです。最近では、『モノ』から『コト』へという流れが流行っていますが、日本ではモノとコトは本来一つです。

古い言葉では、モノは『霊』ですので、コトは『言』と合わせると言霊になります。日本では無意識に一元論になるので、意識的な二元論と衝突するという問題があります。うんちくを話すと長くなるので、この辺でやめておきます(笑)

○ドローンは箱である。プログラミングで魂を吹き込もう!

やっと、本題に到着しましたw
それでは、プログラミングを使ってTELLOを操作してみましょう!

教育向けのプログラミング言語には、ビジュアルプログラミング言語「Scratch」やTELLO専用の「DroneBlock」などがありますが、今回は『TELLO HACK DAY』 なので、ガチなプログラミング言語である『Python(パイソン)』を使います。

引用元:侍エンジニア塾

Pythonは「少ないコード量(文量)で簡単にプログラムがかける」「コードが読みやすい」といったメリットのある素晴らしい言語です。今話題の「人工知能(AI)」や「Web開発」、「教育の分野」など広い分野で使われています。

Python やそのパッケージをインストールする方法はいくつかありますが、ここではAnaconda(データサイエンス向けに作成された Pythonパッケージ)を使ってインストールすることにします。Pythonの幕の内弁当のようなものだと思ってください(笑)

引用元:Qiita

さて、プログラミング環境が整いましたら、続いてTELLOを操作するためのプログラミングパッケージです。『DroneBlock』では操作が制限されるので、カメラ画像も取得できる汎用性の高いパッケージがいいですよね。Go言語で書かれたGobotに実装されているものが有名なのですが、この後、ディープラーニングを行うことを見越して、python実装を探しました。

引用元:Gobot

下記の2つが見つかりましたが、pytelloの方は動画を録画して保存する仕様でリアルタイムな映像取得までは実装されていませんでしたので、TelloPyを使うことにします。先程のGobotを参考にして書かれたプログラムで作者は日本人の方です。なぜか親しみが湧きますね。

TelloPy (https://github.com/hanyazou/TelloPy) ★こっち
pytello (https://bitbucket.org/PingguSoft/pytello/src)

インストール方法は、GitHubに書かれていますので、そちらを参照してください。

○プログラミングで飛ばしてみる。

まずは、Telloの電源をONにした上で、Wi-FiでTelloとPCを接続します。
WiFiアクセスポイントの中に"TELLO-XXXXX"という名前のものが現れますので、接続してみましょう。接続した状態で以下のコマンドを実行してみてください。

コマンドを実行すると、ドローンが飛んで、しばらくしてから着陸します。

$ python -m tellopy.examples.simple_takeoff

下記のコマンドを実行すると、Telloのカメラ映像とエッジ抽出結果が表示されます。この辺りからプログラミングの本領発揮です。ドローンから取得した映像を、3D映像に加工したり、画面に写っている車の数を数えたり、道路の損傷を検出したりすることができるようになります。

$ python -m tellopy.examples.video_effect

TelloPyのサイトにある、video_effect.pyをダウンロードしてきて、物体認識のアルゴリズムであるSSD(Single Shot MultiBox Detector)を組み合わせると、リアルタイムの物体検出ができるようになります。こちらはMavicPro2を使った事例ですが、イメージは伝わったでしょうか。

Mac環境だとサクサク開発できるみたいなのですが、くぼーんはWindows環境なので、必要なソフトウェア(PyAV)がインストールできずに苦戦しています(;´∀`) こういう環境構築に時間がかかるんですよねw ディープ・ラーニングを使ったドローンの実験をしていきたいと思います。

○ハードウェアワークショップ、モーターを交換してみよう!

最後に、ハードウェアのHACKをしてみたいと思います。

実験台になってくれるTELLOは、久保家のTELLO一号機(通称:シメサバ君)です。モーター交換の手順は、インターネット上に記事や動画が豊富にありますので、何をするかは明確なのですが、実際にやってみるときは勇気がいりますw

ハードウェアの世界は、経験してなんぼの世界ですから、さっそくやってみましょう!

1.故障したモータケーブルを切る
2.モータの取り外し
3.替えモータの取り付け
4.ケーブルの接続(ハンダ付け)
5.動作確認

いかがだったでしょうか。
本年度のドローン道場は、明日で一旦終了になります。
右も左も分からない状態からのスタートでしたので、何をやればいいのか迷いましたが、毎週続けることで少し方向性が見えてきました。本業のIT技術を活かしながら、来年度もドローンの推進に貢献していきたいと思いますヽ(=´▽`=)ノ

最後に、ドローン道場のスペースを提供してくださった起業プラザさんに感謝の気持ちをこめてお礼を言いたいと思います。本当にありがとうございましたm(_ _)m 多謝

来年度もどうぞよろしくお願いたしますヽ(=´▽`=)ノ


いいなと思ったら応援しよう!