RaspberryPi
drone
Google-Home
tello

トイドローン Tello を Google Home を使って音声で制御

DJI と Intel が技術提供をしたことで話題のトイドローン Tello を Google Home を使って音声で制御できるようにしてみました。

「離陸して」

とか

「時計回りに10°回転して」

とか、こんな感じで音声で Tello を制御できます。

Tello を手のひらに置いて「離陸して」で離陸させて、「着陸して」で手のひらに着陸させれば間違いなくドヤ顔できます!

必要なもの

  • Tello
  • Raspberry Pi
    • Node 6以上
    • Wifiカード x 2
    • ngrok
  • Dialogflow アカウント
  • Google Home または Google Assistant アプリ

仕組み

仕組みを解説すると以下のような感じです。

  1. Raspberry Pi をインターネットと Tello それぞれに接続。このために2つの Wifi カードが必要です。
  2. Raspberry Pi 内では Node で作った Webhook 用のエンドポイントが常駐。ngrok で外部からの接続を許可する。
  3. Dialogflow でエージェントを作って、「離陸して」などの命令をインテントとして定義。
  4. インテントが発火したら Webhook を蹴っ飛ばして、そこから Tello に UDP でメッセージを送信。

正直めんどくさかったです。w

実装方法

Raspberry Pi に必要なソフトをインストール

  • Node 6.x 以上
  • ngrok
  • Wifi カード x 2

以上を必死こいて構築してください。

Webhook 用のスクリプトをセットアップ

ソースは以下です。

https://github.com/miya0001/tello-api

手順がめんどくさくて説明するのもめんどくさいのでソースを読んでください。笑

このあたりがミソで、ここで Tello に送るメッセージをごにょごにょしています。

https://github.com/miya0001/tello-api/blob/master/index.js#L31-L51

起動するには以下のような感じです。

$ node index.js
$ ngrok http 8080

PC の Wifi を Tello につなぐと以下のような curl コマンドで制御することも可能です。

$ curl http://localhost:8080/ -X POST -H 'Content-Type:application/json' -d "$(cat test/post.json)"

post.json の中身は以下のような感じ。

{
  "queryResult": {
    "intent": {
      "displayName": "up"
    }
  }
}

Dialogflow でエージェントを作成

エクスポートしたデータを、上述の GitHub リポジトリにコミットしておきました。

https://github.com/miya0001/tello-api/tree/master/dialogflow

.zip で固めてインポートできます。

感想

まず、タコ糸とか釣り糸は必須です。あと外では試さないようにしましょう。w
プロペラが2,3枚なくなることを覚悟してください!

  1. 飛ばしてる最中に「テスト用アプリから応答がありません」って自体に陥ると天井に張り付いたままバッテリーが切れて落ちてくるのを待つことになります。。。なぜかフルパワーでプロペラがまわりはじめることもあって、この場合かなり激しい動きをしてくれるので外では試さないようにしましょう。
  2. ドローンの音がうるさくて音声が認識されないことがあります。「着陸して」を聞き取ってもらえないときはつらい。
  3. 「時計回りに90°回転して」はやばい。精度が高いです。
  4. 「10cm下がって」の下がってをうまく聞き取れないときは、上に行きます。笑

なにかの本で Drone はラジコンヘリの進化系ではなくて、空を飛ぶスマートフォンだというようなことを読んだのですが、音声コマンドで静かに部屋の中を飛び回るドローンというのは将来あるかもしれないと思った!