micro:witch で Tello を制御する(その1)

micro:witch を使って下さっている、とある学校の先生から、「micro:witchでドローンのTelloを操作したいのだけど、どうしたらよいか?」という問い合わせがあった。

調べてみると、UDP を使った簡単なプログラムで Tello を制御することができるらしく、MakeCode のプログラムを作って micro:bit から Tello を制御する例も見つかった。方法としては、micro:bit から bluetooth 経由でPCにデータを送り、PC側で受け取ったデータを UDP に流せば良いようだ。

残念ながら micro:witch が内部的に利用している MicroPython では、メモリ容量の関係から bluetooth のサポートがない。つまり、micro:witch でも bluetooth 関連のブロックを追加することはできない。

ある程度自由にドローンの制御を行うとするなら、Tello のコマンドを micro:bit で生成・送信できるようにするべきだろう。幸い、単なる文字列で一定の操作はできるようだ。一方で、 micro:bit がUDP通信できない以上、PCやそれに類する中継装置が必要となる。

そこで、以下のような構成を考えてみた。

  1. MicroPython の radio 機能を使って micro:bit (A) が文字列を送信するようなプログラムを micro:witch で作る。
  2. micro:bit (B) が文字列を受け取ったら、UART で送る。(radio-UART ブリッジ)
  3. M5StickC が UART で文字列を受け取ったら、UDP で送る。(UART-UDP ブリッジ)
  4. Tello が動く。

超面倒くさい流れではあるが、原理的には不可能ではなさそうだ。それだけでなく、メリットも少しある。

PCを使う場合には、Tello のアクセスポイントにwifiで接続させることになる。他にネットの接続装置がなければ、インターネットに接続されてないPCを扱うことになる。MakeCode などのプログラミング環境を利用するには、プログラミングのたびにネット接続を切り替える必要があって面倒だ。

その点、上の構成であれば 、常に Tello のアクセスポイントに接続するようにM5StickC のプログラムを作っておいたり、M5StickC から(B)に電源を供給することで、radio->UDP の一体的なモジュールができるので、PCレスで Tello の接続環境を構築できることになる。

実現までの課題は以下の通り。

  • micro:witch にUART関係のブロックを追加すること。
  • micro:witch で radio-UART のプログラムを作成すること。
  • M5StickC に UART-UDP のブリッジプログラムを作成すること。
  • Tello の実機を手に入れること(笑)

ということを思いついたのは昨日である。アマゾンで Tello を注文したら今日の夕方に届いた(アマゾン⇒ヤマトさまさま)ので、突貫工事でコーディングしてみたら、動いた。具体的には(A)で “takeoff” や “land” を radio 送信したら、Tello が離陸したり、着陸した。

ただ、時間切れでパッケージとしてまとめられなかったので、明日やる予定。