スクラッチくらぶ中級編ーTello-Drone

★★★★★ ★★★★★ ★★★★★

Ryze Tech製のドローン(TELLO)を購入しました。

2020年07月27日(月曜日)に、Ryze Tech製のドローン(TELLO) BOOST COMBOセットとドローンに関する図書2冊がAmazonから届きました。既成のアプリケーションをダウンロード出来る他、ビジュアルプログラミング言語「SCRATCH」でプログラミング出来ます。Windows PCの他、Raspberry Piとの組み合わせが可能な様です。これから勉強しながらドローンを有効に動かして行こうと思います。

Ryze Tech社のHPは、https://www.ryzerobotics.com/jp

★★★★★ ★★★★★ ★★★★★

1. Telloの仕様

①. Telloの性能

  1. 最大飛行距離:100m
  2. 最大速度:8m/秒
  3. 最大飛行時間:13分
  4. 最大飛行高度:30m(2020/07/30時点)
  5. 重量:88g(バッテリー、プロペラ、プロペラガード含む)
  6. バッテリー:1.1Ah/3.8V
  7. カメラ:Photo: 5MP (2592×1936) JPG、Video: HD720P30 MP4

★★★★★ ★★★★★ ★★★★★

②. TelloのWi-Fiのアクセスポイント

■Send Command & Receive Response
IPアドレス:192.168.0.10  UDPポート番号:8889

■Receive Tello State
IPアドレス:192.168.10.1  Host Serverアドレス:0.0.0.0  UDPポート番号:8890

■Receive Tello Video Stream
IPアドレス:192.168.10.1  Host Serverアドレス:0.0.0.0  UDPポート番号:1111

③. TelloのAPI(Application Program Interface)

2020年08月時点の最新版: Tello-SDK-2.0-User-Guideダウンロード

★★★★★ ★★★★★ ★★★★★

Tello-SDK-1.0-User-Guide

コマンド意 味応 答
commandコマンドモード開始OKまたはFALSE
takeoff自動離陸OKまたはFALSE
land自動着陸OKまたはFALSE
up xx上昇(xxは20〜500、cmで指定)OKまたはFALSE
down xx下降(xxは20〜500、cmで指定)OKまたはFALSE
left xx左移動(xxは20〜500、cmで指定)OKまたはFALSE
right xx右移動(xxは20〜500、cmで指定)OKまたはFALSE
forward xx前進(xxは20〜500、cmで指定)OKまたはFALSE
back xx後退(xxは20〜500、cmで指定)OKまたはFALSE
ccw xx左回転(xxは1-3600度)OKまたはFALSE
cw xx右回転(xxは1-3600度)OKまたはFALSE
flip xアクロバット(空中で縦方向に一回転します)
l(左)、r(右)、f(前)、b(後)、bl(後左)、br(後右)、fl(前左)、fr(前右)
OKまたはFALSE
speed xx移動速度を設定(xxは1-100、cm/秒)OKまたはFALSE
Speed?現在の速度を取得xx
Battery?現在のバッテリー残量を取得xx(0-100%)
Time?現在までの飛行時間を取得xx

API 1.3以降では15秒以上何も指示を出さない場合には自動で着陸します。このため上空に待機した状態で15秒以上放置しておくと自動着陸しますので注意してください。

★★★★★ ★★★★★ ★★★★★

2. Telloのプログラミング

Tello本体そのものにはプログラムをする機能も,プログラムを書き込むメモリ領域もありません。

Telloはいわば「知能を持たない移動端末」で,知能的な計算をしているのは母艦PCです。

  1. Telloのカメラ映像やセンサーデータをPC(通称:母艦)で受け取る
  2. 母艦PCで画像処理やデータ処理をして,Telloの動き方を計算する
  3. Tello SDKに基づいて,Telloへコマンドを送信する
  4. Telloが動く
  5. 1へ戻って繰り返す

★★★★★ ★★★★★ ★★★★★

3. Tello機体状態のLED表示

Telloの機体前部、カメラ横のLEDは、その点灯状態によって、次のような状態を表しています。

パターン 状  態
動作状態 赤.緑.黄 点滅で色の繰り返し 機体が自己診断
2回点滅の繰り返し ビジョンセンサーが動作中
ゆっくり点滅 ビジョンセンサーが無効
充電状態 点 灯 充電完了
ゆっくり点滅 充電中
高速点滅 充電異常
警告状態 高速点滅 スマホとの接続が切れた、または未接続
ゆっくり点滅 バッテリー残量低下
高速点滅 バッテリー残量不足
点 灯 重大なエラー

★★★★★ ★★★★★ ★★★★★

■ Raspberry Piから「SCRATCH」でtelloを動かそう!

母艦PCは、Raspberry Pi 3 Model Bを使用します。OSは「Raspbian Full」とします。

Raspberry Pi(ラズベリーパイ)は、イギリスのラズベリーパイ財団で開発された教育用のマイコンボードです。※ Raspberry Pi は ラズベリーパイ財団 の登録商標です。

手順については色々な書籍や先人達のHPを参考にしたいと思いますが、過去の古いものから最新?と思われるものまであり、どれを参考にすれば良いのかさっぱり分かりません。行き当たりばったりでTRYして行きますので、無駄な行為や間違った行為があるかと思いますが、お許しください。

①.参考1としては、Ryze(DJI) Tello をScratchやPythonで制御する Scratchでトイドローンをプログラミングして飛ばそう! https://tsq.gapj.net/index.php/tello/
Takao Takahashi 氏のHPを参照

②.参考2としては、書籍「Scratchでトイドローンをプログラミングして飛ばそう」高橋 隆雄 著 秀和システム ISBN978-4-7980-5519-0 C3055

③.参考3としては、ドローンをRaspberry PiとScratchを使って自動飛行させる方法
https://linux-memo.net/drone/raspbian_scratch_tello-top.html

★★★★★ ★★★★★ ★★★★★

1. Node.jsをダウンロードしてインストール

①. 参考2の場合

Ryze Tech社から提供されているTello拡張機能を使うために、Node.jsを動作させる環境が必要なので、Node.jsをインストールします。「メニュー」→「設定」→「Add/Remove Software」をクリックします。

「Options」欄に「Node.js」 「Enter」キーをクリックします。

「evented I/O for V8 javascript」のチェックボックスにチェックを入れて、「Apply」ボタンをクリックします。

「パスワード」入力画面が表示されたら、パスワードを入力して、「OK」をクリックします。

★★★★★ ★★★★★ ★★★★★

②. 参考3の場合

  • リポジトリを最新にします。 pi@raspberrypi:~ $ sudo apt-get update [ENTER]
  • 必要パッケージをインストールします。 pi@raspberrypi:~ $ sudo apt-get install -y nodejs npm p7zip-full [ENTER]
  • npmのキャッシュを削除します。 pi@raspberrypi:~ $ sudo npm cache clean [ENTER]
  • Node.jsのバージョン管理が行える「n」をインストールします。 pi@raspberrypi:~ $ sudo npm install n -g [ENTER]

★★★★★ ★★★★★ ★★★★★

2. ScratchのTello拡張機能をダウンロード

①. 参考1、参考2の場合

Raspberry Pi のOS(debian)では「Scratch 2」は既にインストールされていますが、Ryze Tech社から提供されているScratch拡張機能は、Raspberry PiのScratchには対応していません。そこで、Raspberry PiのScratchでTelloが使えるように、筆者の高橋 隆雄氏がTello拡張機能を用意しています。

以下のリンクからScratchのTello拡張機能「tellocont.zip」を入手し、ダウンロードします。

こちらのサイト https://tsq.gapj.net/index.php/tello/ にRaspberry Pi対応版 ScratchのTello拡張機能が公開されています

ファイルを展開すると、「tellocont.js」と「tellocontJp.js」の2つのファイルがあります。

「tellocont.js」と「tellocontJp.js」を /home/pi/ ホルダーに置きます。

「tellocont.js」が英語版、「tellocontJp.js」が日本語版になります。

②. 参考3の場合

以下のリンクからScratchのTELLO拡張機能「tellocont.zip」を入手します。

Takao Takahashi氏のこちらのサイトにRaspberry Pi対応版 ScratchのTELLO拡張機能が公開されています

同じくブラウザからダウンロードすると、ホームディレクトリの「Downloads」ディレクトリに保管されますので、
ターミナルから以下の通り、「Downloads」ディレクトリで解凍します。

pi@raspberrypi:~/Downloads/Scratch $ cd ~/Downloads [ENTER]
pi@raspberrypi:~/Downloads $ unzip tellocont.zip [ENTER]

「Downloads」ディレクトリ直下に「tellocont.js」と「tellocontJp.js」が作成されます。

pi@raspberrypi:~/Downloads $ ls [ENTER]
Scratch Scratch.zip tellocont.js tellocont.zip tellocontJp.js

「tellocont.js」が英語版、「tellocontJp.js」が日本語版になります。

★★★★★ ★★★★★ ★★★★★

3. ScratchのTello拡張環境を整備

①. 参考1、参考2の場合

こちらのリンク https://dl-cdn.ryzerobotics.com/downloads/tello/20180222/Scratch.zip にあるScratch.zipをダウンロードします。

解凍すると、「Tello.js」と「Tello.s2e」が存在します。「Tello.js」と「Tello.s2e」を /home/pi/ ホルダーに置きます。

ScratchでTello のプログラミングを行うには、Node のプログラムを立ち上げておく必要があります。

コマンドプロンプトから、/home/pi/ フォルダーに置いた「Tello.js」を起動して待機状態とします。

$ nodejs Tello.js [Enter]

★★★★★ ★★★★★ ★★★★★

②. 参考3の場合

こちらのリンク https://www.ryzerobotics.com/jp/tello/downloads にある「Scratch README」をクリックして表示されるPDFから「3. Click here to download Tello.js and …」をクリックして「Tello.js」が入っている「Scratch_For Tello.7z」をダウンロードします。
ブラウザからダウンロードすると、ホームディレクトリの「Downloads」ディレクトリに保管されます。
ターミナルから以下の通り、「Downloads」ディレクトリにカレントディレクトリを変更して、Scratchディレクトリを作成し、その中に解凍します。

pi@raspberrypi:~ $ cd ~/Downloads [ENTER]
pi@raspberrypi:~/Downloads $ mkdir Scratch [ENTER]
pi@raspberrypi:~/Downloads $ cd Scratch [ENTER]
pi@raspberrypi:~/Downloads/Scratch $ 7z e ../"Scratch_For Tello.7z" [ENTER]

すると、「Scratch」ディレクトリに「Tello.js」が保管されています。

pi@raspberrypi:~/Downloads/Scratch $ ls[ENTER]

「Tello.js」と「Tello.s2e」が存在します。「Tello.js」と「Tello.s2e」を /home/pi/ ホルダーに置きます。

ScratchでTello のプログラミングを行うには、Node のプログラムを立ち上げておく必要があります。

コマンドプロンプトから、/home/pi/ フォルダーに置いた「Tello.js」を起動して待機状態とします。

$ nodejs Tello.js [Enter]

★★★★★ ★★★★★ ★★★★★

4. Scratchでプログラミング

「メニュー」→「プログラミング」→「Scratch 2」をクリックします。

画像に alt 属性が指定されていません。ファイル名: Screenshot_20200805_155819.png

「Scratch 2」が起動されます。

画像に alt 属性が指定されていません。ファイル名: Screenshot_20200805_161141-1-1024x859.png

Scratch 2 が起動したら拡張機能を読み込みます。「シフト」キーを押しながら「ファイル」メニューを開くと、”Import experimental extension”メニューがあります。

画像に alt 属性が指定されていません。ファイル名: Screenshot_20200805_161953-1024x859.png

これを開きます。

・1案は英語版で使用したいので、「/home/pi/tellocont.js」のようにフルパスを指定します。

「Load」をクリックします。「その他」をクリックしてみると、「Tello Control」の英語版が追加されました。

・2案は日本語版で使用したいので、「/home/pi/tellocontJp.js」のようにフルパスを指定します。

「Load」をクリックします。「その他」をクリックしてみると、「Tello Control」の日本語版が追加されました。

★★★★★ ★★★★★ ★★★★★

※ Raspberry Pi の方は、「Tello飛行ブロック」の説明へ飛んで下さい。

★★★★★ ★★★★★ ★★★★★

■ Windows 10から「SCRATCH」でtelloを動かそう!

手順については色々な書籍や先人達のHPを参考にしたいと思いますが、過去の古いものから最新?と思われるものまであり、どれを参考にすれば良いのかさっぱり分かりません。行き当たりばったりでTRYして行きますので、無駄な行為や間違った行為があるかと思いますが、お許しください。

①.参考1としては、Ryze(DJI) Tello をScratchやPythonで制御する Scratchでトイドローンをプログラミングして飛ばそう! https://tsq.gapj.net/index.php/tello/
Takao Takahashi 氏のHPを参照

②.参考2としては、書籍「Scratchでトイドローンをプログラミングして飛ばそう」高橋 隆雄 著 秀和システム ISBN978-4-7980-5519-0 C3055

★★★★★ ★★★★★ ★★★★★

1. Adobe AIR をダウンロードしてインストール

参考2の場合

Adobe AIR を、 https://scratch.mit.edu/downloads/ からダウンロードします。

①. Scratch 2.0 オフライン版をインストールする前に、Adobe AIR のインストールが必要です。Adobe AIR Windows 「ダウンロード」をクリックします。

②. この画面の下の方に下図の画面があります。旧バージョンの「Scratch 2.0 オフラインエディター」をクリックします。

③. 下図の画面が表示されます。

上図の画面の下の方に下図の画面があります。「Adobe AIR Windows ダウンロード」をクリックします。

④. 下図の画面が表示されるので、「今すぐダウンロード」をクリックします。

⑤. 下図の画面の下段に、「この種類のファイルはコンピュータに損害を与える可能性があります。AdobeAIRInstaller….exe のダウンロードを続けますか?」「保存」「破棄」が表示されます。「保存」をクリックして下さい。

⑥. エクスプローラにて、「ダウンロード」フォルダにある AdobeAIRInstaller.exe をクリックしますと、下図のような画面が表示されれば、既にインストール済みです。

★★★★★ ★★★★★ ★★★★★

2. Scratch 2.0 オフライン版 をダウンロードしてインストール

参考2の場合

Scratch 2.0 オフライン版を、 https://scratch.mit.edu/downloads/ からダウンロードします。

①. Scratch 2.0 オフライン版をダウンロードし、インストールします。

②. この画面の下の方に下図の画面があります。旧バージョンの「Scratch 2.0 オフラインエディター」をクリックします。

③. 下図の画面が表示されます。

上図の画面の下の方に下図の画面があります。「Scratchオフラインエディタ Windows ダウンロード」をクリックします。

④. 下図の画面の下段に、「この種類のファイルはコンピュータに損害を与える可能性があります。Scratch-461.exe のダウンロードを続けますか?」「保存」「破棄」が表示されます。「保存」をクリックして下さい。

⑤. エクスプローラにて、「ダウンロード」フォルダにある Scratch-461.exe をクリックします。

⑥. 下図の画面が表示されます。「続行」をクリックします。

⑦. 下図の画面が表示されます。

⑧. 下図の画面が表示されます。

⑨. 下図の画面が表示されます。

★★★★★ ★★★★★ ★★★★★

3. Node.jsをダウンロードしてインストール

参考2の場合

Ryze Tech社から提供されているTello拡張機能を使うために、Node.jsを動作させる環境が必要なので、Node.jsをインストールします。

まずは、こちらのリンク https://nodejs.org/en/ からNode.jsをダウンロードします。

①. Node.js をダウンロードし、インストールします。ここでは、実績のある Ver 12.18.3 LTS の方をクリックして、ダウンロードします。

②. ダウンロードが完了すると、下図の画面の下段に、「この種類のファイルはコンピュータに損害を与える可能性があります。node-v12.18.3-x64….msi のダウンロードを続けますか?」「保存」「破棄」が表示されます。「保存」をクリックして下さい。

③. エクスプローラにて、「ダウンロード」フォルダにある node-v12.18.3-x64….msi をクリックします。

④. 下図の画面のように、「Install」をクリックします。

⑤. 下図の画面が表示されるので、「Next」をクリックします。

⑥. 下図の画面が表示されるので、「Next」をクリックします。

⑦. 下図の画面が表示されるので、「Next」をクリックします。

⑧. 下図の画面が表示されるので、「Next」をクリックします。

⑨. 下図の画面が表示されます。

⑩. 下図の画面が表示されるので、「Finish」をクリックします。

★★★★★ ★★★★★ ★★★★★

4. ScratchのTello拡張環境を整備

★ 参考1、参考2の場合

こちらのリンク https://dl-cdn.ryzerobotics.com/downloads/tello/20180222/Scratch.zip にあるScratch.zipをダウンロードします。

解凍するとScratchというフォルダがあります。筆者はドキュメントフォルダの下に、Telloフォルダを作成しました。

①. ここで簡単に使えるようにするために、ショートカットを作成することで、Telloとの接続を一発起動出来るようにします。

Scratchフォルダの中で「右クリック」し、「新規作成」→「ショートカット作成」します。

②. 下図の画像で、「ショートカットの対象を選択してください」で、「node.exe」を指定して、「OK」をクリックします。

③. 下図の画像で、ショートカットを作成し、「次へ」をクリックします。

④. 下図の画像で、ショートカットの名前を指定します。「Node(TELLO)」とします。「完了」をクリックします。

⑤. 下図のように、ショートカットが作成されました。

⑥. さらにこのショートカットを編集します。エクスプローラフォルダのアドレスバーの場所のところで、「右クリック」します。「アドレスをテキストとしてコピー」をクリックします。

⑦. ショートカットを「右クリック」して「プロパティ」を開きます。

⑧. 「リンク先」の後ろに「スペース」を入れて「Tello.js」を付加します。さらに、「作業フォルダー」に、先程コピーしたアドレスで上書きします。私の場合は、「C:¥Users¥flute¥Documents¥Tello¥Scratch」となっています。変更したら「適用」→「OK」をクリックして閉じます。

⑨. ショートカットから起動すると、初めての起動した場合は、下図の画面が表示されます。「Windowsのファイアウォール設定」が確認されますので、通常は、「プライベートネットワーク」側の方だけ「チェック」を入れます。「アクセスを許可する」をクリックします。

⑩. 起動すると、下図の画面が表示されます。

ScratchでTello のプログラミングを行うには、Node のプログラムを立ち上げておく必要があります。

★★★★★ ★★★★★ ★★★★★

5. ScratchのTello拡張機能をダウンロード

参考1、参考2の場合

・1案は英語版で使いたいので、ScratchのTello拡張機能でTelloが使えるように、Tello¥Scratchフォルダを作成しました。「Scratch.zip」を入手し、ダウンロードします。

Scratch.zipファイルを展開すると、「Tello.js」と「Tello.s2e」と「TelloChs.s2e」の3つのファイルがあります。

「Tello.s2e」を使用します。

・2案は日本語版で使いたいので、ScratchのTello拡張機能でTelloが使えるように、Tello¥Scratch_Tello_Takahashi_Nihongoフォルダを作成しました。「Scratch_Tello.zip」を入手し、ダウンロードします。

Scratch_Tello.zipファイルを展開すると、「TelloJp.s2e」と「TelloJpHira.s2e」と「readme.txt」の3つのファイルがあります。

★★★★★ ★★★★★ ★★★★★

6. Scratchでプログラミング

「デスクトップ」→「Scratch 2 Desktop」をクリックします。

①. 「Scratch 2」が起動されます。

②. 「Scratch 2」が起動されます。「Scratch 2」 が起動したら拡張機能を読み込みます。「シフト」キーを押しながら「ファイル」メニューを開くと、「実験的なHTTP拡張を読み込み」メニューがあります。この「実験的なHTTP拡張を読み込み」をクリックします。

③. これを開きます。

・1案は英語版で使用したいので、「ドキュメント¥Tello¥Scratch」フォルダの「Tello.s2e」を指定します。

・2案は日本語版で使用したいので、「ドキュメント¥Tello¥Scratch_Tello_Takahashi_Nihongo」フォルダの「TelloJp.s2e」を指定します。

④. 「その他」をクリックしてみると、1案の場合は「Tello Control」の英語版が追加されました。2案の場合は「Tello Control」の日本語版が追加されました。

★★★★★ ★★★★★ ★★★★★

※これ以降の説明は、Raspberry Pi も Windows PC も共通です。

★★★★★ ★★★★★ ★★★★★

■ Tello飛行ブロック説明

ブロック意 味応 答
take off離陸OKまたはFALSE
land着陸OKまたはFALSE
fly up with distance上昇(20〜500、cmで指定)OKまたはFALSE
fly down with distance下降(20〜500、cmで指定)OKまたはFALSE
fly left with distance左移動(20〜500、cmで指定)OKまたはFALSE
fly right with distance右移動(20〜500、cmで指定)OKまたはFALSE
fly forward with distance前進(20〜500、cmで指定)OKまたはFALSE
fly back with distance後退(20〜500、cmで指定)OKまたはFALSE
rotate CW with angle右回転(1-3600度)OKまたはFALSE
rotate CCW with angle左回転(1-3600度)OKまたはFALSE
flip with durationアクロバット(空中で縦方向に一回転します)
l(左)、r(右)、f(前)、b(後)、bl(後左)、br(後右)、fl(前左)、fr(前右)
OKまたはFALSE
set speed移動速度を設定(1-100、cm/秒)OKまたはFALSE

★★★★★ ★★★★★ ★★★★★

7. Scratch 2 でTello サンプルプログラム

高橋 隆雄 氏のHP https://tsq.gapj.net/index.php/tello/ にサンプルプログラムが掲載されています。

Raspberry Pi のとき、Nodejsは、/home/pi/ フォルダーに置いた「Tello.js」を起動して待機状態とします。

$ nodejs Tello.js [Enter]

Windows PC のとき、Node(TELLO)ショートカットをクリックして、「Tello.js」を起動して待機状態とします。

①. Tello用Scratchスクリプトセット

サンプルプログラム Tello-Visual.zip を実行してみます。

画像に alt 属性が指定されていません。ファイル名: Screenshot_20200805_175411-1024x819.png

スプライトが実際の飛行のように動きます。

「s」キーが押されると、コマンドプロンプトの画面が下図のように変化して行きます。

Raspberry Pi のコマンドプロンプト
Windows PC のコマンドプロンプト

★★★★★ ★★★★★ ★★★★★

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

サンプルプログラム Tello-Vcon.zip を実行してみます。

画像に alt 属性が指定されていません。ファイル名: Screenshot_20200805_175613-1024x797.png

スプライトを操作した位置にTelloを移動します。要するにマウスでTelloを操作します。
tキーで離陸、sキーで処理実行します。

★★★★★ ★★★★★ ★★★★★

③. Telloをn角形で飛行させる

サンプルプログラム tello-flyrect.zip を実行してみます。

画像に alt 属性が指定されていません。ファイル名: Screenshot_20200805_175738-1024x797.png

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

★★★★★ ★★★★★ ★★★★★

サンプルプログラム tello-flyrect1.zip を実行してみます。

画像に alt 属性が指定されていません。ファイル名: Screenshot_20200805_175927-1024x797.png

Telloを4角形で飛行させる場周飛行のサンプルです。Scratchによる演算で角形(N=4)の数、飛行半径(R=100)、旋回角度(D=90)、飛行距離(L=142)を指定するとその通りに飛ぶデモンストレーションです。

★★★★★ ★★★★★ ★★★★★

★★★★★ ★★★★★ ★★★★★