ラベル Scratch の投稿を表示しています。 すべての投稿を表示
ラベル Scratch の投稿を表示しています。 すべての投稿を表示

2019年10月9日水曜日

Tello Programming 008 -Scratchでプログラミング Test Flight 02-

これまでに数回に分けて,TelloScratchでプログラミングする準備やテストを行ってきました.これまでの投稿は以下のようになります.
以前の投稿の中の,Scratchによるプログラミング飛行では,一つのコマンドを送信すると,受信したTelloがコマンドにある動作を行うプログラム作成や,一連の動作を連続して行うプログラムを作成しています.

今回は,Telloの持っているフリップ飛行機能を使って,コマンド送信によって飛行する場合と,一連の流れによって飛行する場合を比較してみたいと思います.

以前の投稿の投稿にもあるように,ターミナルを立ち上げ,nodeを起動させます.
$ cd Tello.jsのあるディレクトリの場所 
$ node Tello.js
そして,Scratch2.0 Offline Editorを起動させ,Scratch2.0 Offline Editorの"File"メニューをShiftキーを押しながらクリックして,"Import Experimental HTTP Extension (実験的なHTTP拡張の読み込み)"をクリックして,Tello.s2eを読み込みます(手順の詳細は以前の投稿を参照して下さい).

ブロックパレットからブロックを移動させて,以下のように連続して動作を行うプログラムを作成します.ブロックパレットに,以下のような動作をプログラミングしました.

一つ目のプログラムの動作は,
  1. 離陸
  2. 100cm上昇
  3. 前フリップ
  4. 後フリップ
  5. フリップ
  6. 左フリップ
  7. 左フリップ
  8. 右フリップ
  9. フリップ
  10. 前フリップ
  11. 100cm下降
  12. 着陸
の1〜12を途中に5秒間の静止時間を挟みながら連続的に行うという流れです.一応,緊急時のために"space"キーを押したら緊急停止するコマンドも作成してあります(画面右上).

Telloがコマンドの通りに飛行すれば,元の場所に戻ってくるはずです.このプログラムを実行した際の動画は以下のようになります.

https://youtu.be/56_z0KeZtXA

離陸前と着陸後のTelloの場所は,動画のようになりました.離着陸の場所は,ほぼ同じになるはずだったのですが,V.P.S. が上手く動作していないと,動画のように,流されてしまい,離陸場所から相当離れた位置に着陸することになります.

2019年10月6日日曜日

Tello Programming 005 -Scratchでプログラミング Test Flight 01-

これまでに数回に分けて,TelloScratchでプログラミングする準備やテストを行ってきました.これまでの投稿は以下のようになります.
前回は,一つのコマンドを送信すると,受信したTelloがコマンドにある動作を行う(離陸,前進,後退,着陸)プログラムを作ってテストをしてみました.

前回の投稿にあるように,ターミナルを立ち上げ,nodeを起動させます.
$ cd Tello.jsのあるディレクトリの場所 
$ node Tello.js
そして,Scratch2.0 Offline Editorを起動させ,Scratch2.0 Offline Editorの"File"メニューをShiftキーを押しながらクリックして,"Import Experimental HTTP Extension (実験的なHTTP拡張の読み込み)"をクリックして,Tello.s2eを読み込みます(手順の詳細は前回の投稿を参照して下さい).

ブロックパレットからブロックを移動させて,以下のように連続して動作を行うプログラムを作成します.
ブロックパレットに,以下のような動作をプログラミングしてみました.
動作は,
  1. 離陸
  2. 50cm前進
  3. 50cm上昇
  4. 100cm前進
  5. 反時計回りに90°旋回
  6. 100cm前進
  7. 反時計回りに90°旋回
  8. 150cm前進
  9. 反時計回りに180°旋回
  10. 右方向に100cm移動
  11. 50cm下降
  12. 着陸

の1〜12を途中に2秒間の静止時間を挟みながら連続的に行うという流れです.
一応,緊急時のために"space"キーを押したら緊急停止するコマンドも作成してあります(画面右上).
Telloがコマンドの通りに飛行すれば,元の場所に戻ってくるはずです.
上記のプログラムを実行してみた結果の動画は以下のようになります.
Y.P.S. が上手く動作していないと,1回目のフライトのように離陸場所と着陸場所がずれますが,2回目のフライトでは,離着陸の場所がほぼ同じなので,V.P.S. がそれなりに上手く動作したようです.

各命令が実行されると,nodeを立ち上げているターミナルには以下のように表示されます.
send: takeoff
Data received from server : ok
Received 2 bytes from xxx.xxx.xx.x:xxxx

send: forward 50
Data received from server : ok
Received 2 bytes from xxx.xxx.xx.x:xxxx

send: up 50
Data received from server : ok
Received 2 bytes from xxx.xxx.xx.x:xxxx

send: forward 100
Data received from server : ok
Received 2 bytes from xxx.xxx.xx.x:xxxx

send: ccw 90
Data received from server : ok
Received 2 bytes from xxx.xxx.xx.x:xxxx

send: forward 100
Data received from server : ok
Received 2 bytes from xxx.xxx.xx.x:xxxx

send: ccw 90
Data received from server : ok
Received 2 bytes from xxx.xxx.xx.x:xxxx

send: forward 150
Data received from server : ok
Received 2 bytes from xxx.xxx.xx.x:xxxx

send: ccw 180
Data received from server : ok
Received 2 bytes from xxx.xxx.xx.x:xxxx

send: right 100
Data received from server : ok
Received 2 bytes from xxx.xxx.xx.x:xxxx

send: down 50
Data received from server : ok
Received 2 bytes from xxx.xxx.xx.x:xxxx

send: land
Data received from server : ok
Received 2 bytes from xxx.xxx.x
上記の"x"には数字が入ります.

2019年10月5日土曜日

Tello Programming 004 -Scratchでプログラミング-

TelloScratchで動かすには,
・Scratchオフラインエディター(現在、Ver.2.0)
・Node.js
・Adobe AIR
が必要です.これらのセットアップに関しては,過去の投稿(macOS編Windows編)を参照して下さい.また,Scratchの基本についても過去の投稿を参照して下さい.

TelloScratchでプログラミングして動かすには
Scratchでプログラム作成
・Nodeプログラム起動
・Wi-Fi接続(Telloとコンピュータ)
が必要になります.以下は,トライアルでプログラミングしてみた際のメモです.

まずは,Telloの電源を入れます.しばらくするとWifi接続が可能になるので,とコンピューターを接続します.
ターミナルを起動して,事前にダウンロードしてあるTello.jsのあるディレクトリに移動して,nodeを起動してTello.jsを読み込みます*Scratchのセットアップについては以前の投稿Windows編macOS編を参照して下さい).
$ cd Tello.jsのあるディレクトリの場所 
$ node Tello.js

*毎回Tello.jsのあるディレクトリを探してそこに移動するのは面倒なので,作業用のディレクトリをデスクトップにでも作成して,その中にTello.js, Tello.s2e, TelloChs.s2eを入れておくと便利です.そして,ターミナルを起動して,"cd"と入力した後に,そのディレクトリをターミナルにドラッグ&ドロップすると,そのディレクトリの場所が表示されます.
下図は,作業用フォルダとして"Tello Project"というディレクトリを作成して,その中に必要なファイル(Tello.js, Tello.s2e, TelloChs.s2e)を入れた場合の例です.
ターミナルで"node Tello.js"と入力すると以下のように表示されます.
$ node Tello.js
---------------------------------------
Tello Scratch Ext running at http://xxx.x.x.x:xxxx/
---------------------------------------
(node:655) [DEP0005] DeprecationWarning: Buffer() is deprecated due to security and usability issues. Please use the Buffer.alloc(), Buffer.allocUnsafe(), or Buffer.from() methods instead.
server listening x.x.x.x:xxxx
send: command
Data received from server : ok
Received 2 bytes from xxx.xxx.xx.x:xxxx
なお,上記で"x"と表示されている箇所には数字が入ります.

Scratch2.0 Offline Editorを起動します.Scratch2.0 Offline Editorの"File"メニューをShiftキーを押しながらクリックして,"Import Experimental HTTP Extension (実験的なHTTP拡張の読み込み)"をクリックして,Tello.s2eを読み込みます.

Scratch2.0 Offline Editorを使って,プログラムを作成します.
例えば,Scratchブロックパレット,Script(スクリプト)>More Blocks(その他)から[takeoff] をスクリプトエリアにドラッグ&ドロップすると,離陸(Take Off)の命令をプログラムしたことになります.

以下に,離陸(takeoff)と着陸()だけの命令を持っているプログラム例を示します.
下図はブロックパレットの拡大です.
このプログラムは,

  • "t"を押したときに離陸(takeoff)
  • "l"を押したときに着陸(land)
するという命令を持っています.安全のために,一番下にある"space"を押した時には緊急停止(emergency stop)する命令も付けてあります.このプログラムでは,離陸して着陸するという操作しかできません.

そこで,離陸,着陸に加えて,50cm前に進む,50cm後ろに下がるという命令を持つプログラムを作成してみます.
ブロックパレットを拡大すると,以下のようになります.
先の例と同じように
  • "t"を押すと離陸(takeoff)
  • "l"を押すと着陸,"space"を押すと緊急停止(emergency stop)
  • "f"を押すと50cm前進(fly forward 50cm)
  • "b"を押すと50cm後進(fly backward 50cm)
という命令を出すことができます.

このプログラムを実行してみた際の動画は,以下のようになります.

なお,上記の動画を実行した際に,nodeを起動しているターミナルには,各命令が実行されると,以下のように表示されます.
send: takeoff
Data received from server : ok
Received 2 bytes from xxx.xxx.xx.x:xxxx

send: forward 50
Data received from server : ok
Received 2 bytes from xxx.xxx.xx.x:xxxx

send: back 50
Data received from server : ok
Received 2 bytes from xxx.xxx.xx.x:xxxx

send: land
Data received from server : ok
Received 2 bytes from xxx.xxx.xx.x:xxxx

send: reset_all
上記の"x"には数字が入ります.

2019年10月4日金曜日

Tello Programming 003 -Scratchの基本-

前回(Windows)前々回(Mac)Telloをプログラミングによって飛行させるためにScratchのセットアップを行いました.以下は,Scratchの基本についてのメモです.

前回(Windows)前々回(Mac)はデスクトプエディター(オフラインで利用できるScratch)のセットアップでしたが,Scratchはオンラインであればブラウザ上で利用することができます.
Scratchのトップページの左上にある「作る」をクリックします.

すると,Scratchの画面が立ち上がります.


Scratchの画面はステージ,スプライトリスト,ブロックパレット,コード(スクリプトエリア)の四つのエリアに分かれています.

ステージについて
ステージにはキャラクター(スプライト)が配置されています.
ステージ(猫のスプライトが表示)

ステージ上の位置は座標で表され,横方向は$x$軸で -240(左端)から+240(右側)の数値で表されます.また,縦方向は$y$軸で-180(下端)から+180(上端)の数値で表されます.中心は (0, 0)になります.上図のステージでは猫のスプライトは中心(0, 0)に配置されています.

Telloのプログラミングで使用するScratch 2.0 オフラインエディターでは,ステージは以下のような表示で,左上に表示されます.
Scratch 2.0 オフラインエディターのステージ

スプライトリストについて
スプライトリストには,スプライトの一覧が表示されています.
スプライトリスト

スプライトの一覧が表示されています.最初は猫のスプライトのみですが,右下の猫のアイコンをクリックすると別のスプライトが表示され,選んだものを追加することができます.

Telloのプログラミングで使用するScratch 2.0 オフラインエディターでは,スプライトリストは以下のような表示で,左下に表示されます.
Scratch 2.0 オフラインエディターのスプライトリスト

ブロックパレットについて
ブロックパレットには,スプライトへ命令を出すためのブロックが並んでいます.
コードタブ

ブロックには,スプライトの「動き」「見た目」「音」などと数種類があり,同じ種類のブロックは同色になっています.
上図は,ブロックパレット内の「コード」タブが選ばれた状態で,(スプライトを動かすための)命令ブロックが配置されています.ブロックパレットから下図のように命令を右側のエリアにドラッグ&ドロップしてこのエリアの中で各命令を組み合わせます.
「10 歩動かす」ブロックをドラッグ&ドロップした結果

「コスチューム」タブをクリックすると,コスチュームエリアが表示されます.ここは,スプライトのコスチュームを編集するためのタブです.
コスチュームタブ

「音」タブをクリックすると,音エリアが表示されます.ここでは効果音などの変数ができ,録音したサウンドを使用することもできます.
音タブ

なお,Telloのプログラミングで使用するScratch 2.0 オフラインエディターでは,ブロックパレットは以下のような表示で,右側に表示されます.
Scratch 2.0 オフラインエディターのブロックパレット,Scriptタブ
Scratch 2.0 オフラインエディターのブロックパレット,Costumesタブ
Scratch 2.0 オフラインエディターのブロックパレット,Soundsタブ

2019年10月3日木曜日

Tello Programming 002 -プログラミングの準備(Windows)-

前回,macOS環境でのプログラミングの準備に関して投稿しました.
今回は,Windows環境でのセットアップについてのメモです.

まずは,macOSの場合と同様にAdobe Airをインストールします.こちらからAdobeAIRInstaller.exeをダウンロードして実行します.
以下の画像のように「同意する」「完了」をクリックするだけです.


手順はmacOSと同じで,Ryze Tech社のサイトにある手順の通りに準備を進めます.Tello ScratchのREADMEには以下のように書かれています.

macOSの場合はScratch Desktop(ver. 3.6.0)をインストールしたものの,Shiftキーが効かなかったので,最初からScratch 2.0 オフラインエディターをインストールします.

まずは,Scratchのインストールです.ScratchのWebページからローカル環境でScratchを使用できる
の.exeファイル(Scratch-461.exe)をダウンロードします.

この.exeファイルは解凍(ダブルクリック)して,アイコンをアプリケーションフォルダに移動させるだけでインストールが始まります.


インストールが終了するとScratchが自動的に立ち上がります.


Nodeのインストールを行います.
Tello ScratchのREADMEには以下のように書かれています.

Node.jsのサイトからNodeのパッケージファイルをダウンロードします.
LTSでもCurrentでも良いと思いますが,とりあえず安定しているLTSをダウンロードします.

ダウンロードした実行ファイル(node-v10.16.3-x64.exe)をダブルクリックすると以下のようにインストールが始まります.





(これで,Nodeのインストールは完了)

TelloScratchファイルをダウンロードします.
Tello ScratchのREADMEには以下のように書かれています.
Scratch用のTelloデータをダウンロードするのはリンクをクリックするだけです.ダウンロードしした圧縮ファイル(Scratch_For Tello.7z)を解凍すると Scratch_普通版 というフォルダが作られます.そのフォルダ内に,以下の3つのファイルがあることを確認します.
  • Tello.s2e
  • TelloChs.s2e
  • Tello.js
これらのファイルのTello.jsをエディター等のソフトで開きます.


コマンドプロンプトを立ち上げて,以下のようにして tello.js をnode経由で読み込みます.

なお,上記のコマンドプロンプトの操作は,デスクトップ上に解凍した Scratch_普通版 フォルダがある前提です(モザイクがかかっている部分にはユーザー名が入ります).
コマンドプロンプトでの操作は,以下のようになります(太字部分が入力)
    C:\Users\ユーザー名>cd desktop
    C:\Users\ユーザー名\Desktop>cd Scratch_普通版
    C:\Users\ユーザー名\Desktop\Scratch_普通版>node tello.js
このように入力して,以下のように表示されれば成功です.

---------------------------------------
Tello Scratch Ext running at http://127.0.0.1:8001/
---------------------------------------
server listening 0.0.0.0:8890

次の設定はScratchTelloのデータを取り込むことになります.ここでの設定は,Tello ScratchのREADMEには以下のように書かれている箇所になります.

Scratch2.0オフラインエディターで,以下のように,Shift + File をクリックすると表示が変わり,"Import experimental HTTP extension"と表示されます(READMEでは"Import Experimental HTTP"とありますが,表示が異なる).

続いてScratchTelloのインターフェースをデータを読み込みます.Tello ScratchのREADMEには以下のように書かれている箇所になります.


先に書いたように,Scratch2.0オフラインエディターで"Shiftキー+File"をクリック(Shiftキーを押しながらFileをクリック)します.すると,以下のようなウィンドウが開くので,ダウンロードした Scratch_普通版 フォルダー内の"Tello.s2e"を選択します.

この段階で,Scratchの中にTelloのデータが読み込まれているので,Tello ScratchのREADMEの5に書かれている"More Blocks"をクリックします.
すると,以下のようにTello Controlというコマンドが表示されます.

以上で,プログラミングの準備は完了です.

2019年10月2日水曜日

Tello Programming 001 -プログラミングの準備(macOS)-

RYZE Telloの特徴的な機能の一つにプログラミングによる自動飛行が可能なことが挙げられます.Telloは「Scratchを使ってプログラムか可能」というのが教育用途にも適していることが一つのウリになっているようです.
なお,Scratchとは,一般的なプログラミングの際に求められる構文等を覚えなくても,直感的かつ視覚的にプログラミングができる様に,MITメディアラボが開発した学習環境です.

まずはTelloを使えるように準備をします.リリースノートによると,この記事を書いた時点でのファームウェアのバージョンは,v0.1.04.88.01となっています.

「免責事項と安全に関するガイドライン」によるとTelloの安定した飛行を支える技術である「ビジョンポジショニングシステム」についての記載がありました.
デフォルトの標準モードでは,ビジョンポジショニングシステムを利用して機体を自動的に安定させているとのことです.以下に,ビジョンポジショニングシステムが適切に機能しない場合を列挙します.
  • 許容傾斜度は25°,最大速度は28.8km/h
  • はっきりとした模様がない地表面上空
  • 水や雪など反射面の上空
  • 機体速度が速すぎる場合(高度2mで28.8km/h以上,高度1mで18km/h以上)
さらに
  • モノクロ(黒,白,赤,緑一色など)やはっきりとした模様や構造がない地表面上空
  • 照明が頻繁にまたは急激に変化するエリア
  • 非常に暗い(10ルクス未満)や,非常に明るい(10,000ルクス超)地表面上空
  • 赤外線を強力に反射,または吸収する(鏡など)地表面上空
  • 同じ模様な構造が繰り返される(同じデザインのタイルなど)地表面上空
のような場合でも適切に機能しないようです.

ビジョンポジショニングシステムが使えなくなると,機体はATTI(姿勢)モードになるので,操縦が難しくなります.またシステムは,機体の高度が 0.3 - 10.0 mにある場合に有効(最も効果的なのは,高度 0.3 - 6.0 m)とのことなので,まずは,この範囲内でのプログラムを作成する必要があるようです.
また,当面はビジョンポジショニングシステムを使用したプログラミングによる飛行が目的なので,基本的に決まった場所(室内)で飛行させようと思っています.

Telloのプログラミングができるように準備をします.必要なハードウェアは,
  • Tello
  • Computer(Mac, Win共に対応.Linuxには未対応)
です.

この記事は,macOSでの設定方法の説明になっています.Windowsでの設定はこちらをご覧ください.

Ryze Tech社のサイトにある手順の通りに準備を進めます.Tello ScratchのREADMEには以下のように書かれています.
まずは,Scratchのインストールです.ScratchのWebページからローカル環境でScratchを使用できる
の.dmgファイル(Scratch Desktop-3.6.0.dmg)をダウンロードします.

注)ここでは Skratch Desktop (ver. 3.6) のインストール方法を書いていますが,今のところSkratch Desktop (ver. 3.6)では設定を完了することができていないので,後述する Scratch 2.0 Offline Editor をインストールする必要があります!!  順調にインストールを行うには,ページ下部にある"Scratch 2.0 Offline Editorのインストール"を参照して下さい.

この.dmgファイルは解凍(ダブルクリック)して,アイコンをアプリケーションフォルダに移動させるだけでインストールが始まります.
インストールが成功してScratchを立ち上げると以下のような画面が立ち上がります.
しかし,Scratch Desktop ver. 3.6 ではShiftキーが効きません...(”Shiftキーを押しながらFileをクリックしても表示が変わらない).
(これでScratch Desktop (ver.3.6)のインストールは完了)

後述の,Scratch 2.0 Offline Editorのインストールが終わったら以下の手順でセットアップを行います.

Nodeのインストールを行います.
Tello ScratchのREADMEには以下のように書かれています.

Node.jsのサイトからNodeのパッケージファイルをダウンロードします.
LTSでもCurrentでも良いと思いますが,とりあえず安定しているLTSをダウンロードします.
ダウンロードしたパッケージ(node-v10.16.3.pkg)をダブルクリックすると以下のようにインストールが始まります.
(これで,Nodeのインストールは完了)

TelloScratchファイルをダウンロードします.
Tello ScratchのREADMEには以下のように書かれています.
Scratch用のTelloデータをダウンロードするのはリンクをクリックするだけです.ダウンロードが完了すると,Scratchという名前のフォルダに,以下の3つのファイルがあることを確認します.
  • Tello.s2e
  • TelloChs.s2e
  • Tello.js
これらのファイルのTello.jsをエディター等のソフトで開き,以下のように,12行目以降をコピーします.

var dataToTrack_keys = ["battery", "x", "y", "z", "speed"];
var lastDataReceived = null;
... 以下省略...
12行目の" var dataToTrack_keys = ["battery", "x", "y", "z", "speed"]; "以降をコピーする

ターミナルを立ち上げて,以下のように"node"と入力すると,カーソルが切り替わる( > になる)ので,そこに先にコピーしたもの(上記の var 以降)をペーストします.
$ node
> var dataToTrack_keys = ["battery", "x", "y", "z", "speed"];ed
> var lastDataReceived = null;ed
                             ...以下省略...

そして,ターミナルは立ち上げたままで,次の設定に移ります.

次の設定はScratchTelloのデータを取り込むことになります.ここでの設定は,Tello ScratchのREADMEには以下のように書かれている箇所になります.

ここまで進んでトラブルが発生しました....上記のREADMEには"Shift"キーを押しながらFileメニューをクリックすると"Import Experimental HTTP"が開くとありますが,3.0ではShiftキーを押しながらFileメニューをクリックしても反応しません...(上記の赤字 注)部分)

なので,READMEに書かれている,旧バージョン(Scratch 2.0 Offline Editor)のインストールを行うことにしました.

Scratch 2.0 Offline Editorのインストール
先にSkratch Desktop(ver. 3.0)をダウンロードしたページScratch Desktopの下側に,以下のように旧バージョンをダウンロードできる箇所があります.
ここから,Scratch 2.0 デスクトップをクリックします.

Scratch2.0オフラインエディターをインストールするにはAdobe AIR20が必要なので,アドビのWebページからAdobeAIR.dmgもダウンロードして,こちらを先にインストールします(特にインストール時の設定を変える必要はないので,AdobeAIR.dmgをダブルクリックした後はひたすらクリックするだけです).

続いて,Scratchオフラインエディター本体(Scratch-461.dmg)をダウンロード,インストールします(こちらも,インストール時の設定を変える必要はないので,AdobeAIR.dmgをダブルクリックした後はひたすらクリックするだけ).

インストールが成功すると,以下のようにScratch2.0オフラインエディターが立ち上がります.
(これでScratch 2.0オフラインエディターのインストールは完了)

Scratch2.0オフラインエディターでは,shiftキーが効いて,以下のように,Shift + File をクリックすると表示が変わり,"Import experimental HTTP extension"と表示されます(READMEでは"Import Experimental HTTP"とありますが,表示が異なる).
次はScratchTelloのインターフェースをデータを読み込みます.
先に書いたように,Scratch2.0オフラインエディターで"Shiftキー+File"をクリック(Shiftキーを押しながらFileをクリック)します.すると,以下のようなウィンドウが開くので,ダウンロードしたScratchフォルダー内の"Tello.s2e"を選択します.
この段階で,Scratchの中にTelloのデータが読み込まれているので,Tello ScratchのREADMEの5に書かれている"More Blocks"をクリックします.


すると,以下のようにTello Controlというコマンドが表示されます.
(これでTelloのインターフェースの読み込みは完了)

注)Scratch2.0オフラインエディターのインストール,設定が終わった後には,Nodeのインストールを行なってください.

以上で,プログラミングの準備は完了です.