ドローン

初心者でもできる!Pythonを使ったドローンの自動操縦

第3回:Pythonでプログラミングして自動操縦を楽しむ

目次

  1. はじめに
  2. パソコンにPythonをインストールする
  3. 「Tello」とパソコンを接続し、プログラムファイルを作成する
  4. 「Tello」をプログラミングで自動操縦してみる
  5. さまざまなプログラムを実行してみる
  6. まとめ

 

1. はじめに

drone-on-auto-pilot-with-python-03-01

今回は実際にPythonでプログラミングをしてTelloを自動操縦してみようと思います。

 

第1回ではドローンが飛行する仕組みについて紹介を、第2回では実際に操縦と空撮をおこなってみましたが、第3回ではPythonでプログラミングをして、Telloで自動操縦をおこなってみたいと思います。それでは早速見ていきましょう。

第1回はこちら
第2回はこちら

 

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で動いているようです。今回は都度テストするわけにもいきませんでしたので、こちらをダウンロードして使用することにしました。

drone-on-auto-pilot-with-python-03-02

今回は実際に動作する実績のあるPython3.7.3をインストールします。「Files」の中から「x86-64installer」をダウンロードします。

 

パソコンはWindows10のものですので、「Files」の中から「x86-64installer」というファイルを選択してインストールを開始します。その際に、「Add Python 3.7 to PATH」をチェックしておくことを忘れないようにしましょう。現に、最初はチェックせずインストールしたところで、うまくインストールが完了しませんでした。

drone-on-auto-pilot-with-python-03-03

一番下のチェックボックスは必ずチェックするようにします。

 

インストールは他のアプリケーションと変わりません。無事にインストールできたかどうかは、コマンドプロンプトから確認できます。普段、Windowsマシンを触っていても滅多に使うことのないコマンドプロンプトですが、ここでは重要な役割を担っています。

drone-on-auto-pilot-with-python-03-04

上記の画面が出たらコマンドプロンプトでインストールが成功したかを確認します。

 

コマンドプロンプトを開いたら

python --version

と入力し、エンターを押します。すると自分がインストールしたPythonのバージョンが表示されます。これで自分のパソコンにPythonが無事インストールされたことが確認できます。

drone-on-auto-pilot-with-python-03-05

無事にPythonがインストールされていることが分かります。

 

3. 「Tello」とパソコンを接続し、プログラムファイルを作成する

次に、Pythonをインストールしたパソコンと飛ばす「Tello」を接続します。「Tello」にバッテリーを挿し、電源をオンにした状態でパソコンのネットワーク接続を確認します。すると、「Tello」からのWi-Fi(TELLO〜〜」)をキャッチできるはずです。「接続」を押してしばらくするとパソコンと機体が接続されます。

drone-on-auto-pilot-with-python-03-06

TelloとパソコンをWi-Fiを使って接続します。

 

機体とパソコンが無事に接続できたら、次はプログラムファイルを作成していきます。このプログラムファイルの指示通りに「Tello」が飛ぶことになりますので、間違った記述をしていると思ったように飛んでくれないことになります。

まず、プログラムファイルを置く場所をパソコン内に作ります。パソコンのCドライブ内の直下に、空のフォルダ「tellopy」を作っておきます。

drone-on-auto-pilot-with-python-03-07

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横移動することになります。ロの字に移動して、元の場所に戻ってくることになります。

drone-on-auto-pilot-with-python-03-08

まずは前進から右へ移動し、次に後進して、最後に左移動で元の場所へ戻ってくる飛行を試してみます。

 

このプログラムファイルができたら、先ほどCドライブ直下に作った「tellopy」に、このプログラムファイルを格納します。

これで「Tello」を自動操縦する準備が整いました。

 

4. 「Tello」をプログラミングで自動操縦してみる

さて、早速プログラムを実行し、「Tello」を自動操縦してみましょう。まず、先ほども使ったコマンドプロンプトを立ち上げます。プログラムファイルはCドライブ直下に設置しましたので、

cd C:\tellopy

と入力し、エンターを押します。

drone-on-auto-pilot-with-python-03-09

コマンドプロンプトに上記のように入力していきます。

すると、

C:¥tellopy>

と出てきますので、先ほど設置したプログラムファイルに沿って、

python tello.py

と入力します。

drone-on-auto-pilot-with-python-03-10

続いて上記のように記述していきます。これで後はエンターキーを押せばプログラム実行開始となります。

 

これであとはエンターキーを押すだけで機体は離陸しますので、その前に周囲の安全をもう一度確認してください。また、プログラミングをする際に、移動距離は余裕を持った形で入力しましょう。あまりギリギリの距離の移動ですと壁に当たるなどして非常に危険です。

もし、問題なければエンターキーを押して自動操縦を開始しましょう。

drone-on-auto-pilot-with-python-03-11

プログラムを実行する際は周囲の安全に十分にご注意ください。

 

エンターキーを押してみると…お!プロペラが回転し、機体がスッと離陸しました!

drone-on-auto-pilot-with-python-03-12

離陸を開始した「Tello」。プログラミング初心者には感動の一瞬です。

 

そのままプログラムの通り5秒静止し、そしてゆっくりと前進を始めました。

drone-on-auto-pilot-with-python-03-13

プログラム通り前進していく「Tello」。

 

予定通り200cm移動したところで止まり、また5秒間のホバリングに移ります。そして、次に100cmの右横移動へ入っていきます。

drone-on-auto-pilot-with-python-03-14

続いて右へ横移動をしていく「Tello」。ここまでプログラム通りです。

 

移動したところで再び静止すると、次は後進へ。

drone-on-auto-pilot-with-python-03-15

続いてゆっくりと後進していく「Tello」。実に順調な飛行です。

 

200cm後進して静止し、最後に100cmの左横移動に入ります。

drone-on-auto-pilot-with-python-03-16

移動を終え、元の場所へ戻ってきました。

 
移動を終え再び静止すると、ゆっくりと着陸しました。

drone-on-auto-pilot-with-python-03-17

着陸する「Tello」。無事に初めてのプログラミングによる自動操縦が終わりました。

 

ここまで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なら後方への回転になります。

drone-on-auto-pilot-with-python-03-18

続いてプログラムの中にラダーとフリップを入れてみます。

さて、プログラムファイルを書き直したところで、再び自動操縦にチャレンジしてみます。

プログラムを実行したところ、機体は静かに離陸を開始し、ホバリングをおこないます。

drone-on-auto-pilot-with-python-03-19

再び離陸した「Tello」。実に安定したホバリングです。

 

そして、次にプログラム通りにその場で左へ90度旋回をしました。

drone-on-auto-pilot-with-python-03-20

プログラム通り、左へ90度旋回し、機首を左へ向けた「Tello」。

 

その後、5秒静止したところで次に右へ90度旋回し、もとの場所へ戻ります。

drone-on-auto-pilot-with-python-03-21

続いてゆっくりと右へ90度旋回し、元の向きに戻った「Tello」。

 

さらに5秒間静止した後、クルッ!と右へ一回転。見事なフリップを見せてくれたのでした。

drone-on-auto-pilot-with-python-03-22

右方向へフリップする「Tello」。一瞬の出来事なので見逃せません。

 

drone-on-auto-pilot-with-python-03-23

一回転して元の姿勢に戻ろうとする「Tello」。実にスピーディなフリップです。

今回も無事にプログラム通りの飛行を見ることができました。なお、これらのコマンドに関しては、「Tello」を開発したRyze Techが「Tello SDK」の公式サイトにドキュメントの形で資料としてまとめてくれていますので、参考にしてみてください。

※Tello SDK Documentation

 

6. まとめ

連載の3回目となる今回はPythonでプログラミングをして「Tello」を自動操縦してみました。まだまだ、プログラミングをしたというところまで達してはいませんが、プログラミングの面白さ、そして凄さは身を持って感じることができました。どんどん身近なものになりつつあるプログラミングですが、このようにドローンを使って触ってみることで、実際に自分が作ったプログラム通りに機体が動く面白さを存分に感じることができるはずです。ドローン単体でも十分に面白いものですが、さらにそこにプログラミングを入れて、もっと幅広い楽しみ方をされてみてはいかがでしょうか?

今回の連載はこれで終了となります。最後までご覧頂きありがとうございました。

エレクトロニクスやメカトロニクスを愛するみなさんに、深く愛されるサイトを目指してDevice Plusを運営中。

https://deviceplus.jp

NHK学生ロボコン2018