Jの移動式
# write "J"
# 必要なモジュールのインポート
import socket
import threading
import time
import sys
# telloのIPアドレスとポート
tello_address = ('192.168.10.1', 8889)
# ローカルコンピュータのIPアドレスとポート
local_address = ('', 9000)
# コマンドを送るためのUDP接続のの実体化
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
# ローカルアドレスとポートのバインディング
sock.bind(local_address)
# telloへのコマンドの送信とディレイタイム(秒)生成関数
def send(message, delay):
# 例外が表示されなかった場合,telloにエンコードされたコマンドを送信する
try:
sock.sendto(message.encode(), tello_address)
print("Sending message: " + message)
except Exception as e:
print("Error sending: " + str(e))
# ユーザーが定義した移動待ち時間(秒)
time.sleep(delay)
# telloからのメッセージ受信関数
def receive():
# telloからのメッセージ受信を常態化
while True:
# 例外が表示されなかった場合,受信状態を保つ
try:
response, ip_address = sock.recvfrom(128)
print("Received message: " + response.decode(encoding='utf-8'))
except Exception as e:
# もしエラー検出された場合,ソケットを閉じ,ループを終了する
sock.close()
print("Error receiving: " + str(e))
break
# シークエンス関数
def sequence():
# ここにシークエンスを書き込む. 引数は2つで第一引数は"コマンド 移動距離(cm)”,第二引数はディレイタイム
#############################################################################################
send("up 250", 4)
send("down 190", 4)
send("left 40", 4)
send("down 40", 4)
send("left 20", 4)
send("down 20", 4)
send("left 20", 4)
send("up 30", 4)
send("left 40", 4)
send("up 40", 4)
#############################################################################################
# ここまでは追記・削除おk.あとはいじらないこと!
# ここからがメインの実行処理
# バックグラウンド実行されるスレッドを作り,スタートする
# これはreceive関数を利用して,telloから送信されたメッセージを常態的に受信する
receiveThread = threading.Thread(target=receive)
receiveThread.daemon = True
receiveThread.start()
# telloをコマンドモードにセット
send("command", 3)
# 離陸コマンドの送信
send("takeoff", 5)
# ユーザーのコマンド入力のヘルプを表示
print('Type in a Tello SDK command and press the enter key. Enter "start" to start sequence. Enter "quit" to exit this program.')
# ユーザーが”quit”もしくは"start"をタイプするか,ctrl+cを押すまで,コマンド入力待ちをループ実行する
while True:
try:
# ユーザーのキーボード入力を読み込み
message = input('')
# もしユーザーが”quit”を入力したら,ソケットを閉じアプリケーション終了
if 'quit' in message:
# Land
send("land", 5)
print("Program exited sucessfully")
sock.close()
break
# もしユーザーが”start”を入力したら,シークエンス開始
elif 'start' in message:
sequence()
message = ''
# telloにコマンドを送信
send(message, 3)
# ctrl+cの入力があった場合の制御
except KeyboardInterrupt as e:
send("land", 5)
sock.close()
break
Nの移動式
# write "N"
# 必要なモジュールのインポート
import socket
import threading
import time
import sys
# telloのIPアドレスとポート
tello_address = ('192.168.10.1', 8889)
# ローカルコンピュータのIPアドレスとポート
local_address = ('', 9000)
# コマンドを送るためのUDP接続のの実体化
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
# ローカルアドレスとポートのバインディング
sock.bind(local_address)
# telloへのコマンドの送信とディレイタイム(秒)生成関数
def send(message, delay):
# 例外が表示されなかった場合,telloにエンコードされたコマンドを送信する
try:
sock.sendto(message.encode(), tello_address)
print("Sending message: " + message)
except Exception as e:
print("Error sending: " + str(e))
# ユーザーが定義した移動待ち時間(秒)
time.sleep(delay)
# telloからのメッセージ受信関数
def receive():
# telloからのメッセージ受信を常態化
while True:
# 例外が表示されなかった場合,受信状態を保つ
try:
response, ip_address = sock.recvfrom(128)
print("Received message: " + response.decode(encoding='utf-8'))
except Exception as e:
# もしエラー検出された場合,ソケットを閉じ,ループを終了する
sock.close()
print("Error receiving: " + str(e))
break
# シークエンス関数
def sequence():
# ここにシークエンスを書き込む. 引数は2つで第一引数は"コマンド 移動距離(cm)”,第二引数はディレイタイム
#############################################################################################
send("up 200", 4)
send("left 80", 4)
send("down 80", 4)
send("left 80", 4)
send("down 80", 4)
send("left 50", 4)
send("down 80", 4)
send("up 200", 4)
#############################################################################################
# ここまでは追記・削除おk.あとはいじらないこと!
# ここからがメインの実行処理
# バックグラウンド実行されるスレッドを作り,スタートする
# これはreceive関数を利用して,telloから送信されたメッセージを常態的に受信する
receiveThread = threading.Thread(target=receive)
receiveThread.daemon = True
receiveThread.start()
# telloをコマンドモードにセット
send("command", 3)
# 離陸コマンドの送信
send("takeoff", 5)
# ユーザーのコマンド入力のヘルプを表示
print('Type in a Tello SDK command and press the enter key. Enter "start" to start sequence. Enter "quit" to exit this program.')
# ユーザーが”quit”もしくは"start"をタイプするか,ctrl+cを押すまで,コマンド入力待ちをループ実行する
while True:
try:
# ユーザーのキーボード入力を読み込み
message = input('')
# もしユーザーが”quit”を入力したら,ソケットを閉じアプリケーション終了
if 'quit' in message:
# Land
send("land", 5)
print("Program exited sucessfully")
sock.close()
break
# もしユーザーが”start”を入力したら,シークエンス開始
elif 'start' in message:
sequence()
message = ''
# telloにコマンドを送信
send(message, 3)
# ctrl+cの入力があった場合の制御
except KeyboardInterrupt as e:
send("land", 5)
sock.close()
break