0
0

More than 3 years have passed since last update.

MacBookのTerminalに、Telloの操縦コマンドを手入力して遠隔操作してみた

Last updated at Posted at 2021-07-12

参考にしたサイト

全体の構成

スクリーンショット 2021-07-12 14.53.23.png

( ① TelloとMacbookとのWifi疎通確認 )

  • Wifi親機(Host): Tello本体 (※)
    ※ Tello本体内には、Wifiルータが標準仕様として内蔵されている

  • Wifi子機(Client): MacBook

  • MacBookのWifi接続先一覧から、Telloのアクセスポイント(AP ※)を探して、選択。
    ※ Tello内蔵のWifi APの(local) IPアドレスは、$192.168.10.1$。

  • 接続後、TelloのAPのローカルIPアドレス($192.168.10.1$)に対して、MacBookからpingを飛ばして、TelloとMacBookとの疎通を確認。

Terminal
electron@diynoMacBook-Pro Tello % ping 192.168.10.1
PING 192.168.10.1 (192.168.10.1): 56 data bytes
64 bytes from 192.168.10.1: icmp_seq=0 ttl=255 time=1.624 ms
64 bytes from 192.168.10.1: icmp_seq=1 ttl=255 time=2.079 ms
64 bytes from 192.168.10.1: icmp_seq=2 ttl=255 time=1.979 ms
^Z
zsh: suspended  ping 192.168.10.1

Pythonスクリプトファイルの存在を確認

( 結果 )
カレント・ディレクトリにある。
( カレントディレクトリ: Desktop直下のTelloディレクトリ )

Terminal
electron@diynoMacBook-Pro Tello % ls
ello_python.py
electron@diynoMacBook-Pro Tello %

Python3が使えることの確認

  • 今回、実行するスクリプトファイルは、Python3の利用を前提とします。
Terminal
electron@diynoMacBook-Pro Tello % python3 --version
Python 3.9.6
electron@diynoMacBook-Pro Tello % 
electron@diynoMacBook-Pro Tello % python --version
Python 2.7.16
electron@diynoMacBook-Pro Tello % 

Teminalのコマンド入力画面(の例)

  • 着陸命令("command")の実行終了後、Ctrl-Zで、スクリプトを抜けて終了。
  • 今回は、以下の順に、命令を送出しました。
コマンド送出順序
① 離陸(takeoff) 
② 時計回り90度回頭(cw 90) 
③ 50(cm)前進(forward 50) 
④ 着陸(land) 
Terminal
electron@diynoMacBook-Pro Tello % python3 Tello_python.py
Telloに送る指示コマンドを入力してください。:  takeoff
Telloに送る指示コマンドを入力してください。:  cw 90
Telloに送る指示コマンドを入力してください。:  forward 50
Telloに送る指示コマンドを入力してください。:  land
Telloに送る指示コマンドを入力してください。:  ^Z
zsh: suspended  python3 Tello_python.py
electron@diynoMacBook-Pro Tello % 

実行したスクリプト

縣さんのコードを一部、変更しました。

Tello_python.py
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)
        except Exception:
            print ('\nExit . . .\n')
            break

#recvThread create
recvThread = threading.Thread(target=recv)
recvThread.start()

while True: 
    # 最初に入力が必要な"command"命令は、ユーザが打ち込まなくて良いようにスクリプト側でTelloに送出する
    msg = str("command").encode(encoding="utf-8") 
    sent = sock.sendto(msg, tello_address)
    # "takeoff"以降の命令をユーザ入力から受け取る
    try:
        msg = input("Telloに送る指示コマンドを入力してください。:  ")
        if not msg:
            break  

        # Send data
        msg = msg.encode(encoding="utf-8") 
        sent = sock.sendto(msg, tello_address)


    except KeyboardInterrupt:
        sock.close()  
        break

Telloコマンドの一覧

Tello SDKマニュアルに掲載されています。
- https://dl-cdn.ryzerobotics.com/downloads/tello/0228/Tello+SDK+Readme.pdf

なお、コマンド一覧を、和文の表形式にまとめたものは、以下のウェブページに掲載されています。
- 合同会社ミドリアイティ 『Pythonによるドローン「Tello」の制御』

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0