Pythonでプログラミングして自動操縦を楽しむ
第1回:ドローンの仕組みと操縦を学ぶ
第2回:ドローンを実際に飛ばして空撮をおこなう
目次
- はじめに
- パソコンにPythonをインストールする
- 「Tello」とパソコンを接続し、プログラムファイルを作成する
- 「Tello」をプログラミングで自動操縦してみる
- さまざまなプログラムを実行してみる
- まとめ
1. はじめに
第1回ではドローンが飛行する仕組みについて紹介を、第2回では実際に操縦と空撮をおこなってみましたが、第3回ではPythonでプログラミングをして、Telloで自動操縦をおこなってみたいと思います。それでは早速見ていきましょう。
2. パソコンにPythonをインストールする
早速プログラミングをおこなう前に、なぜ「Tello」がプログラミングで飛行できるか簡単に紹介しておきたいと思います。「Tello」には「Tello SDK」が公開されており、これを使ってパソコンと機体をWi-Fiで接続し、テキストコマンドで「Tello」を制御することができるようになっています。通常は第2回で紹介したように、スマートフォンにインストールしたアプリで操縦しますが、パソコンにあらかじめ動きをプログラミングしておくことで、機体は自動で飛行するようになります。
さて、早速パソコンでPythonを使えるように準備をおこないましょう。なお、今回はあくまで「Tello」をPythonでプログラミングして自動操縦するだけですので、Pythonの詳細については省かせて頂きます。普段、必死にドローンを操縦しているのを、プログラミングで自動操縦する…というのが主題になる点、ご理解ください。
まず、Pythonの公式サイトにアクセスしてPythonをダウンロードします。2021年12月1日現在で最新はPython3.10.0のようですが、これが「Tello」に対応しているか分かりません。いくつかのWebサイト等を参考にさせて頂いたところ、Python3.7.3で動いているようです。今回は都度テストするわけにもいきませんでしたので、こちらをダウンロードして使用することにしました。
パソコンはWindows10のものですので、「Files」の中から「x86-64installer」というファイルを選択してインストールを開始します。その際に、「Add Python 3.7 to PATH」をチェックしておくことを忘れないようにしましょう。現に、最初はチェックせずインストールしたところで、うまくインストールが完了しませんでした。
インストールは他のアプリケーションと変わりません。無事にインストールできたかどうかは、コマンドプロンプトから確認できます。普段、Windowsマシンを触っていても滅多に使うことのないコマンドプロンプトですが、ここでは重要な役割を担っています。
コマンドプロンプトを開いたら
python --version
と入力し、エンターを押します。すると自分がインストールしたPythonのバージョンが表示されます。これで自分のパソコンにPythonが無事インストールされたことが確認できます。
3. 「Tello」とパソコンを接続し、プログラムファイルを作成する
次に、Pythonをインストールしたパソコンと飛ばす「Tello」を接続します。「Tello」にバッテリーを挿し、電源をオンにした状態でパソコンのネットワーク接続を確認します。すると、「Tello」からのWi-Fi(TELLO〜〜」)をキャッチできるはずです。「接続」を押してしばらくするとパソコンと機体が接続されます。
機体とパソコンが無事に接続できたら、次はプログラムファイルを作成していきます。このプログラムファイルの指示通りに「Tello」が飛ぶことになりますので、間違った記述をしていると思ったように飛んでくれないことになります。
まず、プログラムファイルを置く場所をパソコン内に作ります。パソコンのCドライブ内の直下に、空のフォルダ「tellopy」を作っておきます。
次にプログラムファイルを作っていきます。Windowsのアクセサリにある「メモ帳」に以下のコードをコピペします。今回は以下のWebサイトを参考にさせて頂きました。
※参考:さかやすプログラミング
#!/usr/bin/env python import socket import time #Create a UDP socket socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) tello_address = ('192.168.10.1' , 8889) #command-mode : 'command' socket.sendto('command'.encode('utf-8'),tello_address) print ('start') socket.sendto('takeoff'.encode('utf-8'),tello_address) print ('takeoff') time.sleep(5) socket.sendto(' forward 200'.encode('utf-8'),tello_address) time.sleep(5) socket.sendto('right 100'.encode('utf-8'),tello_address) time.sleep(5) socket.sendto(' back 200'.encode('utf-8'),tello_address) time.sleep(5) socket.sendto('left 100'.encode('utf-8'),tello_address) ime.sleep(5) socket.sendto('land'.encode('utf-8'),tello_address) print ('land')
プログラムとしては…
print(takeoff)…機体が離陸します。
time sleep(5)・・・空中での待機時間になります。この場合は5秒間静止してから次のアクションを実行します。
forward 200・・・機体が200cm前進します。操作的にはエレベータのダウンを打つことになります。
right 100・・・機体が前を向いたまま右に100cm横移動します。操作的にはエルロンの右を打つことになります。
back 200・・・機体が前を向いたまま200cm後進します。操作的にはエレベータのアップを打つことになります。
left 100・・・機体が前を向いたまま左に100cm横移動します。操作的にはエルロンの左を打つことになります。
print(land)・・・機体が着陸します。
つまりこのプログラムでは、機体は離陸した後、5秒間静止し、次に200cm前進、右に100cm移動、後ろに200cm後進、最後に左に100cm横移動することになります。ロの字に移動して、元の場所に戻ってくることになります。
このプログラムファイルができたら、先ほどCドライブ直下に作った「tellopy」に、このプログラムファイルを格納します。
これで「Tello」を自動操縦する準備が整いました。
4. 「Tello」をプログラミングで自動操縦してみる
さて、早速プログラムを実行し、「Tello」を自動操縦してみましょう。まず、先ほども使ったコマンドプロンプトを立ち上げます。プログラムファイルはCドライブ直下に設置しましたので、
cd C:\tellopy
と入力し、エンターを押します。
すると、
C:¥tellopy>
と出てきますので、先ほど設置したプログラムファイルに沿って、
python tello.py
と入力します。
これであとはエンターキーを押すだけで機体は離陸しますので、その前に周囲の安全をもう一度確認してください。また、プログラミングをする際に、移動距離は余裕を持った形で入力しましょう。あまりギリギリの距離の移動ですと壁に当たるなどして非常に危険です。
もし、問題なければエンターキーを押して自動操縦を開始しましょう。
エンターキーを押してみると…お!プロペラが回転し、機体がスッと離陸しました!
そのままプログラムの通り5秒静止し、そしてゆっくりと前進を始めました。
予定通り200cm移動したところで止まり、また5秒間のホバリングに移ります。そして、次に100cmの右横移動へ入っていきます。
移動したところで再び静止すると、次は後進へ。
200cm後進して静止し、最後に100cmの左横移動に入ります。
移動を終え再び静止すると、ゆっくりと着陸しました。
ここまで30秒ほど。すべてプログラムした通りに飛んでくれました。当たり前なのかもしれませんが、初めて自動操縦を目の当たりにすると、その凄さがよく分かりますし、ほぼ正確に機体が同じ場所へ帰ってきたことを考えると、「Tello」の基本性能の高さがよく分かります。
あまりの感動に、すぐにもう一度自動操縦を実行してみます。やはり非常に正確にロの字を描いて機体は帰ってきます。これは自分が操縦するより正確で安全なのでは…と思うほど精度の高いものです。というわけで、無事に最初に自動操縦は終わりました。
5. さまざまなプログラムを実行してみる
こうなると、他の飛ばし方も試してみたくなるものです。今回はエレベータとエルロンを使いましたので、今度はラダーと「Tello」が誇るフリップをプログラムしてみたいと思います。
先ほどの飛行プログラムのところを、以下のようにしてみます。
time.sleep(5) socket.sendto('ccw 90'.encode('utf-8'),tello_address) time.sleep(5) socket.sendto('cw 90'.encode('utf-8'),tello_address) time.sleep(5) socket.sendto(' flip r'.encode('utf-8'),tello_address) time.sleep(5)
と記述を変えてみます。
ccw 90・・・機首が左へ90度旋回します。操作的にはラダーの左を打つことになります。
cw 90・・・機首が右へ90度旋回します。操作的にはラダーの右を打つことになります。
flip r・・・機体がその場でクルっと一回転します。rは右の方向への回転になります。lなら左への回転、fなら前方への回転、bなら後方への回転になります。
さて、プログラムファイルを書き直したところで、再び自動操縦にチャレンジしてみます。
プログラムを実行したところ、機体は静かに離陸を開始し、ホバリングをおこないます。
そして、次にプログラム通りにその場で左へ90度旋回をしました。
その後、5秒静止したところで次に右へ90度旋回し、もとの場所へ戻ります。
さらに5秒間静止した後、クルッ!と右へ一回転。見事なフリップを見せてくれたのでした。
今回も無事にプログラム通りの飛行を見ることができました。なお、これらのコマンドに関しては、「Tello」を開発したRyze Techが「Tello SDK」の公式サイトにドキュメントの形で資料としてまとめてくれていますので、参考にしてみてください。
6. まとめ
連載の3回目となる今回はPythonでプログラミングをして「Tello」を自動操縦してみました。まだまだ、プログラミングをしたというところまで達してはいませんが、プログラミングの面白さ、そして凄さは身を持って感じることができました。どんどん身近なものになりつつあるプログラミングですが、このようにドローンを使って触ってみることで、実際に自分が作ったプログラム通りに機体が動く面白さを存分に感じることができるはずです。ドローン単体でも十分に面白いものですが、さらにそこにプログラミングを入れて、もっと幅広い楽しみ方をされてみてはいかがでしょうか?
今回の連載はこれで終了となります。最後までご覧頂きありがとうございました。
今回の連載の流れ
第1回:ドローンの仕組みと操縦を学ぶ
第2回:ドローンを実際に飛ばして空撮をおこなう
第3回:Pythonでプログラミングして自動操縦を楽しむ(今回)