2021年5月8日土曜日

<備忘録>ラズパイはドローンを動かせるようになった。

 ドローンを買っちゃいました。きっかけはsora:share事業を頑張っている同期に影響を受けたのと、最近ラズパイをゲットしたんでなんか動かしてみようかと。感想、これはヤバイ、くそオモロイ!

 ドローンは素人でしたが、ググってみてScratchPythonでもコントロールできそうな「DJI社 Tello EDU」にしてみました(中国製排除の波は無視)。そしてTelloシリーズの中でも、TelloとTello EDUってのがあって、主な違いは後者の方が最新のSDKに対応しているのと、自宅の無線APに接続できること。前者はTello本体が無線AP(親機)になり自宅ネットでは使えない。


以下、実験的にやってみたこと。忘れずにメモメモ。

<構成イメージ>

<実験1. iPhoneで動かしてみる>
 詳細割愛。アプリインストール後、iPhoneで簡単に操作できます。

<実験2. iMacで動かしてみる>
 2.1 Python3をダウンロード、インストール。
 2.2 公式サイトのSDK資料を見て、サンプルPythonコードをダウンロード。
 2.3 Tello EDUの電源を入れる。
 2.4 iMacのWi-Fiより「TELLO-xxxxx」(xxxxは数字)を探して接続する。
   ここでiMacとTello EDUはスタンドアロン状態になる。
 2.5 ターミナルを開いて、サンプルPythonコードを動かす。
   コマンドを打ってインタラクティブにドローンを操れます。
$ python3 --version   #一応Pythonのバージョン確認

Python 3.9.5

$ python3 Tello3.py   #サンプルコード実行



Tello Python3 Demo.


Tello: command takeoff land flip forward back left right 

       up down cw ccw speed speed?


end -- quit demo.


command        #接続コマンド。まずcommandと打って、本体と接続する

ok        #成功

takeoff     #takeoffを打つとドローンが離陸!

ok        #成功

land       #landを打つとドローンが着陸!

ok        #成功

end       #終了コマンド

...


<実験3. ラズパイで動かしてみる>
 3.1 iMacでTello EDUを無線クライアント(子機)に変更(Stationモード)。

$ python3 Tello3.py    #サンプルコード実行



Tello Python3 Demo.


Tello: command takeoff land flip forward back left right 

       up down cw ccw speed speed?


end -- quit demo.


command        #接続コマンド

ok        #成功

ap xxxxx yyyyy  #xxxxxには自宅無線APのSSIDを入れる。yyyyyにはパスワードを入れる。

OK,drone will reboot in 3s  #Tello本体が3秒後にリブートする。

end       #終了コマンド

...

  ※Stationモードは本体の電源を切っても保存されたままになる。
  ※もし初期状態(本体が無線AP(親機))に戻したい場合は、電源を5秒長押しすれば元に戻る。

 3.2 自宅無線ルータにログインし、Tello EDUに振られたIPアドレスをメモる。
 3.3 ラズパイにSSHする。
 3.4 ラズパイ上でサンプルPythonコードを取得。別名コピー。メモったIPアドレスに書き換え保存。

pi@raspberrypi:~ $ curl -OL https://dl-cdn.ryzerobotics.com/downloads/tello/20180222/Tello3.py

  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current

                                 Dload  Upload   Total   Spent    Left  Speed

100  1296  100  1296    0     0   1001      0  0:00:01  0:00:01 --:--:--  1000

pi@raspberrypi:~ $ 

pi@raspberrypi:~ $ cp Tello3.py Tello3-stmode.py

pi@raspberrypi:~ $ 

pi@raspberrypi:~ $ nano Tello3-stmode.py 


  GNU nano 3.2                    Tello3-stmode.py                              


#

# 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)    #ここのIPアドレスをメモったIPアドレスに書き換え保存。


sock.bind(locaddr)

・・・(以下略)



 3.5 保存したPythonコードを動かす。
   コマンドを打ってインタラクティブにドローンを操れます。

pi@raspberrypi:~ $ python3 Tello3-stmode.py #Stationモードのサンプルコード実行



Tello Python3 Demo.


Tello: command takeoff land flip forward back left right 

       up down cw ccw speed speed?


end -- quit demo.


command        #接続コマンド

ok        #成功

takeoff     #takeoffを打つとドローンが離陸!

ok        #成功

land       #landを打つとドローンが着陸!

ok        #成功

end       #終了コマンド

...


<感想と今後>
・これはヤバイ、くそオモロイ。
・Telloのバッテリーは10分位で切れます。長時間利用の場合は予備バッテリーが必要かも。
・自宅WiFiの届く範囲で屋外実験を予定。国土交通省(航空法)と一般常識の範囲内で。(Tello EDU=87g)

<参考>

0 件のコメント:

コメントを投稿