魔法の杖(micro:bit)でトイドローンTelloを操作してみた[Magic Wand]

初めてのQiita投稿です。
誤りやアドバイスがありましたら、コメントにてビシバシご指摘頂けると助かります。喜びます。

# 作ったもの
micro:bitを搭載した杖でトイドローンTelloを操作してみました。

杖を振った方向にドローンを移動させることができるため、子供でもドローンを直感的に操作できます。まさに気分は魔法使い🌀

この作品は[ヒーローズ・リーグ2019](https://hl2019.we-are-ma.jp)のMAリーグと学生リーグにて決勝まで残りました🙌
<blockquote class="twitter-tweet"><p lang="ja" dir="ltr"><a href="https://twitter.com/hashtag/%E3%83%92%E3%83%BC%E3%83%AD%E3%83%BC%E3%82%BA%E3%83%AA%E3%83%BC%E3%82%B0?src=hash&amp;ref_src=twsrc%5Etfw">#ヒーローズリーグ</a> 学生リーグ2019決勝審査会 タッチ＆トライ時間 <a href="https://t.co/40NOwl1zZ5">pic.twitter.com/40NOwl1zZ5</a></p>&mdash; t_furu ♨ #AKIあきラジオ #オオエン (@t_furu) <a href="https://twitter.com/t_furu/status/1195543436088107009?ref_src=twsrc%5Etfw">November 16, 2019</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>
<blockquote class="twitter-tweet"><p lang="ja" dir="ltr"><a href="https://twitter.com/hashtag/%E3%83%92%E3%83%BC%E3%83%AD%E3%83%BC%E3%82%BA%E3%83%AA%E3%83%BC%E3%82%B0?src=hash&amp;ref_src=twsrc%5Etfw">#ヒーローズリーグ</a> Magic Wand! 杖の操作でドローンが動くのはさながらクディッチですね！ <a href="https://t.co/5vnzhQqEKN">pic.twitter.com/5vnzhQqEKN</a></p>&mdash; ヒーローズ・リーグ＠授賞式は12/8(日) (@mashupaward) <a href="https://twitter.com/mashupaward/status/1203157135531528193?ref_src=twsrc%5Etfw">December 7, 2019</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

作品の紹介動画は[こちら](https://www.youtube.com/watch?v=Rd0O-0LGskQ)

# ソース
ソースはGitHubで公開しております。
https://github.com/daiking1756/drone_app

# 環境
- macOS Mojave 10.14.6
- node.js 10.13.0

# きっかけ
昔から某魔法使いファンタジー映画が好きで、劇中の[有名なワンシーン](https://youtu.be/nAQBzjE-kvI?t=57)を再現してみたかった。

そんな時に次の2つの記事を見つけました。

- [「Google Homeに話しかけてドローンを音声操作してみる」](https://qiita.com/miso_develop/items/a482dc4d168ec0a33818)
- [「micro:bitとWebBluetoothで通信してみました」](https://qiita.com/yokmama/items/5522fabfb5b9623278e2)

更に杖もダイソーグッズで作れるらしいです。
https://matome.naver.jp/odai/2142524916452195501

これらを組み合わせたら杖でドローンを操作できるぜ！
ということで作ってみました。

# システム構成
![図1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/322403/1a506587-e862-8827-74f2-9f1e5a4704f2.png)

- micro:bitとサーバ(フロントエンド)はWebBluetoothで接続 [(参考記事)](https://qiita.com/yokmama/items/5522fabfb5b9623278e2)
- サーバのフロントエンドとバックエンドはSocket.ioで非同期通信
- サーバ(バックエンド:node.js)とTelloは同じネットワーク上でUDPパケットを伝送することで通信 [(参考記事)](https://qiita.com/miso_develop/items/a482dc4d168ec0a33818)

# [Tello](https://www.ryzerobotics.com/jp/tello)
DJI社が販売しているトイドローン。[公式SDK](https://terra-1-g.djicdn.com/2d4dce68897a46b19fc717f3576b7c6a/Tello%20%E7%BC%96%E7%A8%8B%E7%9B%B8%E5%85%B3/For%20Tello/Tello%20SDK%20Documentation%20EN_1.3_1122.pdf)が公開されていてプログラムから手軽に制御することができます。

TelloはWi-Fi親機になっています。
プログラムからTelloを操作するには、

1. サーバ(今回はPC)をTelloと同じネットワークに接続
2. 公式SDKに沿ってUDPパケットを送信
3. 以上

とっても簡単ですね！

# micro:bit
ちっちゃいマイコン。
各種センサやBluetooth、5×5のLEDマトリックスなどが付いています。
ブロックプログラミングが可能です。

実際に使用したmicro:bit側のプログラムはこんな感じです。
<img width="729" alt="スクリーンショット 2019-12-10 23.18.43.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/322403/044c0ab3-ea1c-dec7-fa10-ab6b463c5fdd.png">

やってることは、ジェスチャーを検出したら対応する文字列をBluetoothで接続したサーバに送信しているだけです。

サーバのプログラムは参考記事とほとんど同じため省略します。

# 杖でドローンを操作
菜箸にグルーガンで形を作って絵の具で色を塗った魔法の杖にmicro:bitとモバイルバッテリーを装着します。
これにて完成！
![IMG_20191024_183114.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/322403/b273381e-5162-a201-7eec-0cd1d0fa02c7.jpeg)

# 起動手順
- TelloのWi-Fiにサーバ(PC)を接続
- ```node server.js```
- ブラウザで`localhost:3000`にアクセス
- CONNECTボタンより、ブラウザとmicro:bitをWebBluetoothで接続
- micro:bitのLEDマトリクスに「✔」が表示されれば準備完了

***冒頭の動画のように、杖の動きに対応してドローンが動きます***

# Telloに鏡を貼ってステルス化
ここまで読んで
「あれ、これってただmicro:bitでドローンを操作しているだけで、劇中のシーンとは全然違くね？」と思った方は正しいです。
ここから、いくつかの仕掛けを加えて、劇中のシーンっぽくなるように仕上げていきます。

- Telloに鏡を貼る
- この状態で森や砂漠にTelloを持っていく
- 周囲の景色が鏡に反射してTelloが視認し難くなる(ステルス化)
- 上に軽いものを乗せると、その物体だけが浮いているように見える
- 「Wingardium leviosa(浮遊せよ)」状態！！！！！！[(参考動画)]((https://youtu.be/Rd0O-0LGskQ?t=69))
![tello3.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/322403/2b1433a5-88c3-011f-1d4b-c345358976ce.jpeg)

# まとめ
TelloはpythonやJSで簡単に制御できた。
ドローン入門にはもってこい。

micro:bitもこんなに簡単に使えるんだなぁと感じた。

***子供の頃やってみたかったこと駆動で開発するのは楽しい！***

#参考
- [Google Homeに話しかけてドローンを音声操作してみる](https://qiita.com/miso_develop/items/a482dc4d168ec0a33818)
- [micro:bitとWebBluetoothで通信してみました](https://qiita.com/yokmama/items/5522fabfb5b9623278e2)
- [Tello](https://www.ryzerobotics.com/jp/tello)
- [Tello公式SDK](https://terra-1-g.djicdn.com/2d4dce68897a46b19fc717f3576b7c6a/Tello%20%E7%BC%96%E7%A8%8B%E7%9B%B8%E5%85%B3/For%20Tello/Tello%20SDK%20Documentation%20EN_1.3_1122.pdf)