HTTPリクエストでドローンを自動飛行させるサンプル
Telloって?
Telloはドローンの一種なのですが、SDKがあるのでプログラミングで自由に操作できるものなのです。
Scratch/Pythonなどで操作が可能です。
今回はこれを使って自動操縦をやってみます。
TelloをカスタマイズしてHTTPリクエストで自動飛行させるサンプル
ここにサンプルがあります。
https://dl-cdn.ryzerobotics.com/downloads/tello/20180222/Tello3.py
このPythonをダウンロードして実行すると、対話形式のプロンプトになり、そこでマニュアルで操作できます。
# コマンド入力モードへ移行
$ command
# 離陸
$ takeoff
# 着陸
$ land
こんな感じですね。
今回、これをもとに、HTTPリクエストで自動飛行するモジュールをつくってみました。
サンプルコード
まずサンプルコードを見ていきましょう。
#
# Tello Python3 Control Demo
#
# http://www.ryzerobotics.com/
#
# 1/1/2018
import threading
import socket
import sys
import time
host = ''
port = 9000
locaddr = (host,port)
# Create a UDP socket
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
tello_address = ('192.168.10.1', 8889)
sock.bind(locaddr)
def recv():
count = 0
while True:
try:
data, server = sock.recvfrom(1518)
print(data.decode(encoding="utf-8"))
except Exception:
print ('\nExit . . .\n')
break
print ('\r\n\r\nTello Python3 Demo.\r\n')
print ('Tello: command takeoff land flip forward back left right \r\n up down cw ccw speed speed?\r\n')
print ('end -- quit demo.\r\n')
#recvThread create
recvThread = threading.Thread(target=recv)
recvThread.start()
while True:
try:
msg = input("");
if not msg:
break
if 'end' in msg:
print ('...')
sock.close()
break
# Send data
msg = msg.encode(encoding="utf-8")
sent = sock.sendto(msg, tello_address)
except KeyboardInterrupt:
print ('\n . . .\n')
sock.close()
break
while True: 以降で対話形式のプロンプトになります。
今回は対話ではなく、あらかじめ決めておいた動作をさせたいので、ここはコメントアウトします。
'''
recvThread = threading.Thread(target=recv)
recvThread.start()
while True:
try:
msg = input("");
if not msg:
break
if 'end' in msg:
print ('...')
sock.close()
break
# Send data
msg = msg.encode(encoding="utf-8")
print (msg)
#sent = sock.sendto(msg, tello_address)
except KeyboardInterrupt:
print ('\n . . .\n')
sock.close()
break
'''
自動飛行のコーディング
自動で操縦すると言ってもすごくシンプルで、さきほどコメントアウトした行の前にアクションを書いていけばOKです。
sent = sock.sendto(b'command', tello_address)
print ("command")
sent = sock.sendto(b'takeoff', tello_address)
print ("takeoff")
sleep(5)
sent = sock.sendto(b'forward 100', tello_address)
print ("forward 200")
sleep(5)
sent = sock.sendto(b'flip f', tello_address)
print ("flip f")
sleep(5)
sent = sock.sendto(b'back 100', tello_address)
print ("back 200")
sleep(5)
sent = sock.sendto(b'land', tello_address)
例えばこのコードだとこのようになります。
- 離陸する
- 前に200センチ進む
- 前方にFlip(回転)する
- 後方に200センチ進む
- 着陸する
これだけでもう完了です。とても楽ですね。
その他の操作は公式ページにあるのでいろいろ試すことができます。
HTTPリクエストで実行する
Pythonのスクリプトを実行して飛行させてもいいのですが、あまり利用しやすいとは言えません。
そこでHTTPリクエストで実行できるようにします。
そうすることで、より多くのOSSやツールから飛行させることができるようになります。
サンプルコードです。
<!DOCTYPE html>
<html class='stripe_base'>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1.0">
<title>tello</title>
</head>
<body class='stripe_base'>
<h1>tello</h1>
<?php
$exec_cmd = "python ./Tello3_custom.py";
exec($exec_cmd,$out,$ret);
?>
</body>
</html>
以上です。このコードを実行すればTelloが飛びます!
phpで実装していますが、他の言語でも良いと思います。
HTTPリクエストのGETやPOSTに引数を与えて飛行パターンを変更するのも面白いかもですね。
サンプルコード
サンプルコードや今回紹介したコードはこちら。
Author And Source
この問題について(HTTPリクエストでドローンを自動飛行させるサンプル), 我々は、より多くの情報をここで見つけました https://qiita.com/umeee/items/c54a0b0aa49b2a37702d著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .