見出し画像

DJI Tello でScratchプログラミングをしてみたよ

DJI tello と parrot mamboスペック比較で書いたものに好き♡がつけられていてびっくりしたので続編を書いて見る
Scratchオフラインエディタで動かすために最初はParrot mambo、しばらく間を開けてDJI telloを買った

結論
Scratchで飛ばすだけなら、双方ともいい機材だよ、部屋の中で普通に遊べるし思い通りに飛ばないし墜落するしプロペラ飛んで行くし
本論
Scratchと接続するに実は双方とも同じ環境が必要になる、
それはNode.jsというJavascriptのサーバ機能。
おそらく開発容易性とプログラマの多さがこれを採択させてるのでしょう。
Node.jsを経由して、Scratchから出される命令をドローンに送付する仕組みは同じ。
ただし、TelloはWiFi+TCP/IPなのでPCとの接続は楽。mamboはBluetoothなので少々テクニックが必要(というか、先人の知恵を活用することが求められる)。
mamboな人はMacだとまだ良いのだが、WIndowsはデバイスドライバというやつを入れ替えないといけない。なのでWindowsの初心者、例えばワードやエクセル、パワーポイントなどのオフィスソフトとブラウザでWebを見ているだけの人、GitHubって何?な人はやめた方がいい。Telloにしなさいw

Scratch On PCな環境での作業はざっくり書くと

1,Node.jsのダウンロードと導入
2,Scratchオフラインエディタのダウンロードと導入
3.Droneサポートソフトウェアのダウンロードと導入
 Scratch用拡張ファイルがTello用、Mambo用共にある

これでとりあえずScratchでプログラムはかけるようになる。
飛ばすためには
A.Node.jsを使って接続用JavaScriptを実行
B.ドローンをPCに接続する
C.Scratchでプログラムを実行する

飛ぶよーー飛ぶ飛ぶ
でも、いろいろなアクションをさせようとすると気づくと思うんだよね
あれ?離陸した後に右に行けってやったけど右に行かないとか・・・
いうことをよく聞いてくれない状況があることを。

Node.jsを動かしているコンソール(Windowsならコマンドプロンプト)を見るとわかるけど、Scratchからは確かに指示が出ている。
でもドローンの方が動いてくれない。

これは!!!非同期実行ってやつだ。

考えると当たり前なんだけど、ドローンでもなんでもものを動かすにはその動作の完了まで時間がかかる。プログラムでうまく動かすためには、ドローン側からの動作完了の知らせがある方が作りやすい。
ところが今回の環境はプログラム実行環境(Scratch)と動作環境(ドローン)の間でNode.jsが命令を中継している形
この場合Node.js側からの戻り値がScratch側に渡ればいいのだけど、Scratch側はそういう仕組みがない
それで、同期的な実行(作業完了した通知を受け取ったら次に進む)ができない
つまり非同期な実行環境でしかないのだ
仕方がないので動作が完了するくらいの時間を待たせて次の命令を送るようなコーディングスタイルにScratchのプログラムを修正しましたとさ

ヒントになるかなぁ

2020年からはプログラミングが小中学校で必須となります
プログラミングに興味がある子、もっとたくさんのことを知りたい子、ドローンやその他のを使った動くプログラミング教室を提供できます
→ご質問等はこちらへ

この記事が気に入ったらサポートをしてみませんか?