M1 MacでDJI TelloドローンをPythonプログラムで動かす
- 2022.08.05
- IT
DJIのドローンTello を購入したので、早速プログラミングしながら遊んでいきます。
環境はM1 Macです。
1 2 3 4 5 6 |
test@tests-Air ~ % sw_vers ProductName: macOS ProductVersion: 12.3.1 BuildVersion: 21E258 test@tests-Air ~ % sysctl machdep.cpu.brand_string machdep.cpu.brand_string: Apple M1 |
Pythonで動かしているサイトを色々と見ていたのですが、Python3.7系で動かすのが主流なようです。
しかし、Python3.9系でも動かすことができました。
環境の作成
M1 MacではPython 3.7系はすんなりと導入できません。
導入の流れとしては、
Intel版のBrewを入れて(ibrew)、ibrew経由でPython3.7を入れ、仮想環境でPython3.7系の環境を作成する、
という感じになります。
(前述の通りPython3.9でも実行できたので、この作業は不要かも知れませんがLogのために書いています)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
# Install x86 homebrew arch -x86_64 /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)" alias ibrew="arch -x86_64 /usr/local/bin/brew" # Install Python 3.7 ibrew install python@3.7 # Install Python 3.7 at virtual environment pipenv --python 3.7 # Create virtual environment pipenv shell # Check python version python -V # -> Python 3.7.12 |
Pythonでドローンを飛ばしてみる
ファイルを準備して、TelloのWifiに接続して、Pythonファイルを実行します。
実行ファイルの準備
適当なファイルに、下記のコードを書きます。
コードはこちらのサイトを参考にさせていただきました。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
#!/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('left 20'.encode('utf-8'),tello_address) time.sleep(5) socket.sendto('forward 20'.encode('utf-8'),tello_address) time.sleep(5) # socket.sendto('flip l'.encode('utf-8'),tello_address) # time.sleep(5) socket.sendto('land'.encode('utf-8'),tello_address) print ('land') |
Tello Wifiに接続する
Telloを起動して、TelloのWifiに接続します。
Pythonファイルの実行
上記で作成した仮想環境でPythonファイルを実行します。
(既存のPythonでも実行できるかと思います)
python test.py
これで、ドローンが飛び立つと思います!