Scratch+Telloの書籍ができました。以下のリンクからどうぞ(Amazonのアフィリです)。ついでに関連商品も貼っておきましょう!

 

ちょっと注意

Telloで使えるコントローラーはGamesir "T1d"でこれはTello専用です。汎用のBluetoothコントローラーは使えないので注意してください。加えてT1dは汎用のゲームコントローラーとしては使えません。

あくまでも試した範囲ですが、Androidスマホの場合に使えないケースがあります。ただし、使えない場合、アプリに対する権限が与え足りない場合があるので注意してください。アプリを一旦削除し、再インストールする際に要求してくる権限を全て許可すると動作する場合があります。

API 1.3について

TelloのAPIがバージョンアップされています。書籍で解説しているAPIは1.0ですが、1.3は上位互換のため書籍の内容はそのままご利用いただけます。ただし、1点注意があり、API 1.3以降では15秒以上何も指示を出さない場合には自動で着陸します。このため上空に待機した状態で15秒以上放置しておくと自動着陸しますので注意してください。

Tell EDUについて

Ryze(DJI)からTello EDUが発売されました。Tello EDUのAPIは2.0ですが、APIは上位互換のため、書籍の内容はTello EDUでもそのままお使いいただけます。ただし、書籍の内容はTell EDUで拡張された機能のサポートはしていません。

TelloとTello EDUのちがいについてはこのページの最後の方をみてください。

ScratchでTelloを使うには

・上のリンクからNode.jsをダウンロードしてインストール
・上のリンクからTello.js and Tello.s2eをダウンロード&展開
・Tello.jsを適当なフォルダに置き、そのフォルダで node Tello.js を実行
・Scratchを起動し、シフトを押しながら
 『ファイル』『実験的なHTTP拡張を読み込み』でTello.s2eを読み込む
・『スクリプト』の『その他』にTello用のコントロールがある

 Ryze Tello Scratch拡張の日本語化版

Ryzeから配布されているScratch拡張を日本語化しました。漢字版と、ひらがなのみ版が入っています。

Scratch-Tello.zip

Raspberry Pi対応版 Scratch拡張機能

Raspberry Pi版のScratchはScratch 2のHTTP拡張機能が使えないため、Tello拡張機能をJS版で作成しました。Raspberry Pi上でScratchを使用する場合にはこれを使用してください。シフト+ファイルの"Import experimental extension"で "/home/pi/tellocont.js" 等のようにRaspberry Pi上のjsファイルのフルパスを指定して読み込めば使用できます。下のzipファイルに入っているtellocont.jsが英語版、tellocontJp.jsが日本語版です。

なおこの拡張はRyzeから配布されているnode.jsのプログラム、Tello.jsを必要とします。Raspberry Piにnodejsをインストールし、

nodejs Tello.js

で起動しておいてください。

tellocont.zip

Tello用Scratchスクリプトセット

ScratchスクリプトでTelloを制御します。
スプライトが実際の飛行のように動きます。

Tello-Visual.zip

スプライトを操作してTelloを飛ばす

スプライトを操作した位置にTelloを移動します。要するにマウスでTelloを操作します。
tキーで離陸、sキーで処理実行します。
(時間遅延があるので注意)

Tello-Vcon.zip

Telloをn角形で飛行させる

Telloをn角形で飛行させる場周飛行のサンプルです。Scratchによる演算でnの数と飛行半径を指定するとその通りに飛ぶデモンストレーションです。

 2018-07-08.png

tello-flyrect.zip

2018-07-08_2.png

tello-flyrect1.zip

WindowsでPythonを使いたい場合には

WIndows 10 2018 april update以降であればWSL(Windows Subsystem for Linux)のUbuntu等からPythonがごく普通に使え(Python 3)、Telloの制御もできます。

WSLを使うにはまず『Windows機能の有効化または無効化』から"Windows Subsystem for Linux"にチェックを付け有効化し、その後にMicrosoftストアで"Ubuntu"を検索してインストールしてください。bashを起動すればごく普通にPythonが使え、UDPでの通信も行えます(=Telloが動きます)。

Pythonで場周飛行させる

半径と多角形数を指定してTelloを場周飛行させます。

fly_circle.zip

TelloとTello EDUのちがい

・Tello
 API 1.3
 WiFiはTelloがAPとして動作するポイント接続のみ

・Tell EDU
 API 2.0
 WiFiはTelloがAPとして動作するモードに加えて、Telloがステーション(STA)として他のAPに接続可能
 ミッションパッド対応

TelloのAPIが1.3となり飛行コマンドがいくつか追加されました。これによりAPI 1.0よりも細かな制御も可能となっています。API 1.3と2.0の大きな違い、つまりTelloとTello EDUの大きな違いはミッションパッド対応で、ミッションパッド関連のAPIは1.3にはありません。

加えてサポートされるWiFiのモードがTello EDUでは拡張されており、WiFiアクセスポイント(AP)を介した接続が追加されています。ただし、AP経由で接続するとスマホからのラジコン操作はできなくなるので、プログラムによる飛行が前提となります。将来的にはサポートされるのかもしれませんが、今のところTelloアプリ、Tello EDUアプリともにAP経由では制御できないようです。

Tello EDUをステーションモードにするには'ap'コマンドで行いますが、Pythonなら次のように書けばできます。

----------

#!/usr/bin/env python
# -*- coding: utf-8 -*-
import socket
import sys
from time import sleep
# TelloのIPアドレスとポート
tello_ip = "192.168.10.1"
tello_port = 8889
tello_addr = (tello_ip, tello_port)
# 受信側のアドレスとポート(戻り)
my_ip = ""
my_port = 9000
my_addr = (my_ip, my_port)
# ソケット生成
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
sock.bind(my_addr)
# 受信処理関数
def recv():
data, server = sock.recvfrom(1518)
print(data.decode(encoding="utf-8"))
# コマンドモード
t_cmd = 'command'
t_bytes = t_cmd.encode()
sock.sendto(t_bytes, tello_addr)
recv()
# WiFi AP設定
t_cmd = 'ap' + ' ' + 'MYWIFISSID' + ' ' + 'mywifipassword'
t_bytes = t_cmd.encode()
sock.sendto(t_bytes, tello_addr)
recv()
----------

WiFiの設定を元に戻す場合にはTello EDUの電源が入っている状態で電源ボタンを長押し(5秒以上)し、LEDの点滅が消えるまで待ちます。