トイドローン Tello をビジュアルプログラミングツール Node-REDで制御してみよう 第3回 ドローン状態確認編

こんにちは。田中です。

第2回では離着陸を行いましたが、今回は細かな操縦をする前に、Telloのバッテリー・現在飛行中の高度・使用経過時間といった状態を確認してみましょう。

今回の流れ

image

今回はこのように、Telloの状態確認することを体験します。

第2回では、いきなり離着陸をしましたが、実際のところ、電池残量によってTelloの接続が途切れやすかったり、実際に命令をしてもエラーが起こっていてうまくいかない場合もあります。

操縦時は、この状況確認の機能を使ってTelloの健康状態を気にしながら対応したほうが、安心して操作できるのでオススメです。

Node-REDの準備

まず、こちらのフローをインポートします。インポートの仕方は第2回を参考にしましょう。

[{"id":"bc2d5655.a445d8","type":"tab","label":"Tello 第3回","disabled":false,"info":""},{"id":"25ecbcab.6aff14","type":"udp out","z":"bc2d5655.a445d8","name":"","addr":"192.168.10.1","iface":"","port":"8889","ipv":"udp4","outport":"45678","base64":false,"multicast":"false","x":590,"y":120,"wires":[]},{"id":"a53cf385.2c3a2","type":"inject","z":"bc2d5655.a445d8","name":"","topic":"","payload":"takeoff","payloadType":"str","repeat":"","crontab":"","once":false,"onceDelay":"","x":250,"y":400,"wires":[["25ecbcab.6aff14"]]},{"id":"f1da2730.76ef68","type":"inject","z":"bc2d5655.a445d8","name":"","topic":"","payload":"land","payloadType":"str","repeat":"","crontab":"","once":false,"onceDelay":"","x":250,"y":440,"wires":[["25ecbcab.6aff14"]]},{"id":"22b53cad.20fa04","type":"inject","z":"bc2d5655.a445d8","name":"","topic":"","payload":"command","payloadType":"str","repeat":"","crontab":"","once":false,"onceDelay":"","x":240,"y":80,"wires":[["25ecbcab.6aff14"]]},{"id":"e86e87b4.222648","type":"comment","z":"bc2d5655.a445d8","name":"離着陸操作","info":"","x":240,"y":360,"wires":[]},{"id":"fb0ecdb5.7cd79","type":"udp in","z":"bc2d5655.a445d8","name":"","iface":"","port":"45678","ipv":"udp4","multicast":"false","group":"","datatype":"utf8","x":540,"y":240,"wires":[["d7209c8d.536c6"]]},{"id":"d7209c8d.536c6","type":"debug","z":"bc2d5655.a445d8","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","x":690,"y":240,"wires":[]},{"id":"a7051b93.daa4e8","type":"comment","z":"bc2d5655.a445d8","name":"ドローン命令の結果受信","info":"","x":590,"y":200,"wires":[]},{"id":"57700d17.00efa4","type":"inject","z":"bc2d5655.a445d8","name":"","topic":"","payload":"battery?","payloadType":"str","repeat":"","crontab":"","once":false,"onceDelay":"","x":240,"y":160,"wires":[["25ecbcab.6aff14"]]},{"id":"d6652dd0.16c4c","type":"comment","z":"bc2d5655.a445d8","name":"コマンド開始","info":"","x":230,"y":40,"wires":[]},{"id":"8b6ebe1d.1b704","type":"comment","z":"bc2d5655.a445d8","name":"バッテリー残量問い合わせ","info":"","x":190,"y":120,"wires":[]},{"id":"64c71155.7589","type":"comment","z":"bc2d5655.a445d8","name":"ドローンへ命令送信","info":"","x":570,"y":80,"wires":[]},{"id":"287554c8.67fe3c","type":"comment","z":"bc2d5655.a445d8","name":"飛行時間(秒)問い合わせ","info":"","x":190,"y":200,"wires":[]},{"id":"d1583a16.4b4158","type":"inject","z":"bc2d5655.a445d8","name":"","topic":"","payload":"time?","payloadType":"str","repeat":"","crontab":"","once":false,"onceDelay":"","x":250,"y":240,"wires":[["25ecbcab.6aff14"]]},{"id":"b459282a.4699a8","type":"inject","z":"bc2d5655.a445d8","name":"","topic":"","payload":"height?","payloadType":"str","repeat":"","crontab":"","once":false,"onceDelay":"","x":250,"y":320,"wires":[["25ecbcab.6aff14"]]},{"id":"3272a394.83c90c","type":"comment","z":"bc2d5655.a445d8","name":"飛行高度(cm)問い合わせ","info":"","x":180,"y":280,"wires":[]}]

インポートして読み込むと1つタブが増えています。

image

前回のフローは削除

前回のフローについては、今回のフローに注力するために削除しておきます。

image

タブをダブルクリックして、

image

タブの詳細画面からDeleteを押して削除します。

image

削除できればタブは今回のひとつだけになります。

読み込まれたフロー

image

読み込まれたフローはこのようになっております。コメントを入れて各機能を動かすinjectノードを整理しました。

ドローン情報問い合わせ

Ryze Techの資料が集まっているページから現状のSDKの資料を見てみると、

Tello SDK Documentation EN_1.3.pdf

いろいろな情報がTelloから問い合わせできますが、全部対応するとフローがややこしくなるので、今回はシンプルにTelloのバッテリー・現在飛行中の高度・使用経過時間といった状態を確認することに注力します。

image

たとえば、バッテリー状態を聞くコマンドは、

image

となっていて、

battery?

という疑問符がついたメッセージで問い合わせます。まるでホントにドローンに聞くみたいで可愛いですね。

image

ちなみに、現在飛行中の高度は height? 、使用経過時間は time? です。

Telloからの返答はどう受け取っているか

Telloからの返答はどう受け取ってるのでしょうか?

image

このやり取りに注目です。

image

いままでTelloにデータを送っているudpノードをダブルクリックして設定を見てみましょう。

image

今回は、8889への送信だけでなく、

bintd to local port という機能を使って、返答を45678番というポートに転送させています。

image

つまり、こちらのudpポートで45678番というポートの情報受け取るので、Telloの返答が受信できます。

動かしてみる

まず、今回ははじめてデバッグを行ってみます。

image

この緑のノードがdebugノードと言って、左のサイドバーのデバックタブから、このノードに流れ込むデバッグログが確認できます。

image

おそらく、最初の表示時はこのように情報タブが表示されています。

image

虫のボタンを押して、まず、デバッグタブを表示させます。

起動からコマンド成立まで

image

今回はTelloを飛ばさずに確認することが可能です。まず、第2回を参考に電源を入れてWi-Fiを接続します。

image

コマンド開始を押してみると、

このように接続され緑のランプが点灯します。

image

デバックタブにもokと返答が帰ってきます。ここでerrorが返ってくる場合は、電池残量が少なくなっていて接続が不安定だったり、Wi-Fi環境が良くなくつながりにくい場合があります。

  • Wi-Fi環境が良くなくつながりにくいと予想される場合
    • 電源を入れ直して試してみる
  • 電池残量が少なくなっていて接続が不安定と予想される場合
    • そもそも以降のアクションができず電池残量が確認ができないが電池を充電し直してみる
    • スマートフォンの操縦アプリのほうで頑張って接続してみて電池残量を確認

など試してみましょう。

バッテリー情報を取得してみる

さて、うまく接続できたら、いよいよバッテリー情報を取得してみます。

このまま命令をせずにしばらく待つと接続が解除されてしまうので、すぐにやってみましょう。

image

こちらをクリックします。するとTelloにデータが送られ返答が返ってきます。

image

いまは92%の電池残量があると確認できました。

ドローン操縦でデータを確認するのは重要

ということで、うまくいきました。

image

今回はバッテリー残量のみでしたが、さらに飛行させてみると、飛行時間や飛行高度を問い合わせることも可能です。

Ryze Techの資料が集まっているページから現状のSDKの資料を見てみると、

Tello SDK Documentation EN_1.3.pdf

そのほかにも、飛行中の加速度センサーや機体などもSDKの仕様を見ると確認できるようです。

このように、ドローン操縦時、データを確認するのは、人間でいうと健康状態を確認するようなものです。どれくらい飛行させることが出来るか把握できたり、飛行の状況を判断できます。

Tello はトイドローンではありますが、このような機能から、もし本当に実際にドローンを動かすときの様々な注意点を体験できるので、是非試してみてください!


この記事を書いた人
SeigoTanaka
2004年よりフリーランス。以後、FLASH制作を中心にインタラクティブコンテンツを主に行い現在に至る。最近ではWEBフロントエンドをベースにしながらも、情報とインターフェースが合わさるアプローチという視点でIoTやMixed Realityといった技術も取り入れながら活動しています。ウォンバットが好き。 2018-2019 Microsoft MVP ( Windows Development ) 2018-2019 IBM Champion。

週1日~/リモートの案件に興味はありませんか?

週1日~/リモートの関わり方で、「開発案件」や「企業のIT化や設計のアドバザリーなどの技術顧問案件」を受けてみませんか?副業をしたい、独立して個人で仕事を受けたエンジニア・デザイナー・PM・技術顧問の皆様のお仕事探し支援サービスがあります。

お仕事をお探しの方へ

お仕事をお探しの方(無料登録)
法人の方(IT課題の相談)