トイドローン Tello を Scratch でプログラムする

Tello とは?

1万円ちょっとで買える200g未満のドローンで、スマホでコントロールします。動画や静止画を撮ることもでき、また、プログラムでドローンを制御することが可能です。

オンラインでもいろいろなところから買えますし、

実物も 大須ドローンステーション などで見られると思います。

初期設定の手順は以下を見るとわかります。

ちなみに、Tello はドローン本体が Wi-Fi AP になっており、それにスマホやMacなどを接続するため、1台のドローンしかコントロールすることができません。複数台にコマンドを送信し制御したいという人は Tello EDU という機種があり、そちらはドローン本体を既存の Wi-Fi AP に接続できるそうです。

開発環境の構築

Mac で開発環境を構築してみます。

Windows でも似たようなものだと思いますが。

Scratch 2.0 Offline Editor のインストール

https://scratch.mit.edu/download/scratch2 にアクセスします。

リンクから、Adobe AIRをダウンロードし、インストールします。

Scratch 2.0オフラインエディターをダウンロードし、インストールします。

Node.js のインストール

https://nodejs.org/en/ にアクセスします。

「10.15.3 LTS Recommended For Most Users」をダウンロードします。 Node.js をインストールします。

Tello.js のインストール

Tello公式ウェウサイト にアクセスし、「Scratch README」をクリックします。PDFファイル「Tello Scratch README」が開きますので、「Click here to download」のリンクをクリックします。

Scratch_For Tello.7z がダウンロードされますので、展開します。

$ 7z x Scratch_For\ Tello.7z

展開すると「Scratch_普通版」フォルダが作成されます。

Scratch に Tello.s2e をインストール

Scratch を起動します。

Shift キーを押しながら、「ファイル」メニューをクリックし、「実験的なHTTP拡張を読み込み」をクリックします。

「Scratch_普通版」フォルダの中の「Tello.s2e」を選択します。

これで、「スクリプト」タブの「その他」に「take off」「land」などの Tello を制御するコマンドが追加されました。

プログラミング

Scratch でプログラミングします。

Scratch の使い方がわからない方は、以下の記事などを参考にしてください。私もよくわかっていません。

プログラム実行の準備

Tello の起動

Tello のスイッチを on にします。

Wi-Fi 接続

Mac から Tello に Wi-Fi で接続します。

Tello.js の起動

ターミナルから、「Scratch_普通版」フォルダに移動して、Tello.js を実行します。

$ cd Scratch_普通版/
$ node Tello.js 
---------------------------------------
Tello Scratch Ext running at http://127.0.0.1:8001/
---------------------------------------
server listening 0.0.0.0:8890
Data received from server : ok
Received 2 bytes from 192.168.10.1:8889

[lhp_debug]carryCMD_else

これで、準備 OK です。

プログラムの実行

ドローンの位置とプログラムの内容を確認してから、Scratch からプログラムを実行しましょう。

一旦実行すると、ドローンを途中で止めることができませんので、誤った場所から飛ばすと、壁に激突したりして危険です。

うまくいけば、Tello が飛んでいるはずです。

参考

Tags: tello

Nagoya.php #15 での REST API とは?

Nagoya.php とは?

名古屋で現在は 2か月に一度くらい行われている PHP の勉強会です。 「実際に手を動かしてプログラミング問題を解いてみる」という取り組み(通称「どう書く」)を中心にした内容になっています。

ただし、最近は @ttskch さんが、前で解説&コーディングをしてくれているので、自力で問題を解きたい人は耳栓などが必要です。

参加者には、ピザと飲み物が提供されます。

参加したい人は、 https://nagoyaphp.connpass.com/ から申込できます。

用語

BEAR.Sunday

@koriym さんによるPHPのWebアプリケーションフレームワーク。MVCパターンではなくリソース指向。標準に準拠した高品質でAPI中心のRESTfulアプリケーションを作成するためのフレームワーク。

REST

Representational State Transfer の略。 RESTful と RESTish (RESTっぽい) という 2つがあり、世間的に使われているのは正しくない理解による RESTish。

Wikipediaでの説明は、ソフトウェア・アーキテクチャ・スタイルの 1つ。

Representational State Transfer (REST) is a software architectural style that defines a set of constraints to be used for creating Web services.

とりあえず、@koriym さんの講演を見ると少しわかるかも知れません。

詳しく知りたい方は、『RESTful Webサービス』を読むといいでしょう。

HAL

Hypertext Application Language の略。API のリソース間のリンクを記述するためのフォーマット。

BEAR.Sundayのマニュアルの「ハイパーメディアAPI」を読むとわかるかも知れません。

Schema.org

ボキャブラリを定義しているサイト。

REST API (Hypermedia API) 開発のための 7ステップ

関連

Tags: nagoyaphp

Bash でスペースを含むフォルダを配列で処理する

Bash でスペースを含むフォルダを処理したかったのですが、うまくできなかったのでメモ。

こうする

#!/bin/bash

dirs=("Documents" "VirtualBox VMs")

for d in "${dirs[@]}"; do
    echo "$d"
done

結果:

Documents
VirtualBox VMs

これはダメ

${dirs[@]} をダブルクォートしないとスペース区切りで処理されてしまう。

#!/bin/bash

dirs=("Documents" "VirtualBox VMs")

for d in ${dirs[@]}; do
    echo "$d"
done

結果:

Documents
VirtualBox
VMs

Tags: bash