なんとなく最近いろいろな場面で取り上げられるドローン。。Telloならプログラミング出来そうということで、やってみた。
一応の目標
①とにかく飛行させる
②GamePadで飛ばす
③PCで飛ばす
④Pythonで飛ばす
⑤画像入力する
⑥物体検出搭載
⑦トラッキングする
⑧物体を探して見つける
⑨...
今回やったこと
①とにかく飛行させる
②GamePadで飛ばす
③PCで飛ばす
①とにかく飛行させる
これ説明書があるけど、ウワンには見えないレベル。。。
つまり、ネットで見てねということらしい。
スマホ(アンドロイド)もGooglePlayからTelloで検索して、無事アプリをインストールして、飛びました。
とても安定して、狭い部屋でもコントロール出来ました。
②GamePadで飛ばす
これアンドロイドゆえかすごく苦労しました。
うんともすんとも。。。
ググってもどうも未対応な話が多い。。飛ぶというのは一件しか見当たらず。
しかし、アマゾンの評価サイトに有力な情報「位置情報をオンにするとできるようになる」
これが正解でした。
手順は以下の通り
⓪スマホの位置情報オン、WiFiオン、Bluetoothオン
①Telloのアプリを立ち上げる
②本体電源オンして、Wifiで接続(Telloアプリが接続を表示)
③GamePadオン
④Telloアプリの「設定→Bluetoothの。。。⇒上記GamePadが接続先に表示⇒これをクリック⇒メイン画面に戻るとjoystick画像が消えている」
※ここで肝心なのは事前に位置情報オンとGamePadはTelloから接続するということ
ただし、カメラ画像の送信が遅くて、VRモードが使えませんでした。。残念
③PCで飛ばす
まず、簡単そうなのでScratchで飛ばしました。
ほぼ参考のとおりで動きました。
一か所、Tello.jsは以下のとおり、
※警告出ていますが、。。
scratch0907\scratch>node Tello.js
---------------------------------------
Tello Scratch Ext running at http://127.0.0.1:8001/
---------------------------------------
(node:9300) [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 0.0.0.0:8890
【参考】
・【ドローンTelloプログラミング】未経験者が初めてのプログラミングに挑戦【Scratchの使い方】
・TELLOダウンロード
ということで、離陸⇒50cm下降⇒着陸できました。
ここで何度も失敗した原因
①WiFiが切れていた
②Tello.jsがエラーした後再実行が必要
まとめ
・位置情報オンで、Android+GamePad(GameSir T1d)で飛ばせた
・ScratchでPCから飛ばせた
・カメラ画像がほぼ使えないが、機体固有のバグかもしれない??
・Pythonもちょっと試みたがGetchで先に進まなくなった
・Scratchにはカメラ画像の処理がなさそう
おまけ
ScratchのTello部分も日本語化しました。
※訳が不明なものは適当
{ "extensionName": "Tello",
"extensionPort": 8001,
"blockSpecs": [
// SDK 版本 >= 1.0.0.0
[" ", "離陸", "takeoff"],
[" ", "着陸", "land"],
[" ", "上昇 %n cm", "up", 50],
[" ", "下降 %n cm", "down", 50],
[" ", "左旋回 %n cm", "left", 50],
[" ", "右旋回 %n cm", "right", 50],
[" ", "前方 %n cm", "forward", 50],
[" ", "後方 %n cm", "back", 50],
[" ", "時計回り %n 度", "cw", 90],
[" ", "反時計回り %n 度", "ccw", 90],
[" ", "フリップ %m.flip", "flip", "f"],
[" ", "速度 %n cm/s", "speed", 50],
[" ", "ゴー x %n y %n z %n 速度 %n", "go", 50, 50, 0, 100],
// SDK 版本 >= 1.3.0.0
[" ", "曲線飛行 x1 %n y1 %n z1 %n 和 x2 %n y2 %n z2 %n 速度 %n %", "curve", 20, 20, 0, 40, 60, 0, 60],
[" ", "緊急", "emergency"],
["r", "相対高度(cm)", "h"],
["r", "気圧計高度(cm)", "baro"],
["r", "TOF高度(cm)", "tof"],
["r", "最低温度(°C)", "templ"],
["r", "最高温度(°C)", "temph"],
["r", "アッチチュード角(°)", "pitch"],
["r", "横アッチチュード角(°)", "roll"],
["r", "偏揺れ角(°)", "yaw"],
["r", "X加速度(0.001g)", "agx"],
["r", "Y加速度(0.001g)", "agy"],
["r", "Z加速度(0.001g)", "agz"],
["r", "X速度(cm/s)", "vgx"],
["r", "Y速度(cm/s)", "vgy"],
["r", "Z速度(cm/s)", "vgz"],
["r", "電池容量(%)", "bat"],
],
"menus": {
"flip": ["f", "b", "l", "r"]
},
}