ジャコ Lab

プログラミング関連のメモ帳的ブログです

ぐぬぬ・・・

ぐぬぬ・・・

昨日、Tello から 8890 ポートを介してステータスを得ることができたので、
意気揚々と、DJITelloPy 使うぞーと思った矢先・・・

悲しい出来事が・・・

前回までのあらすじ

特定の環境で 8890 ポートからステータスを得ることができず、DJITelloPy が動かない。
という出来事がありました。

Mac では 8890 ポートからステータスを得ることができ、 DJITelloPy でも無事に connect 出来たのを確認。

ゲストマシンの Ubuntu 20.04 on VirtualBox では、
DJITelloPy 以前に 8890 ポートから 何故か ステータスが得ることができないことが判明しました。

従って、ホストマシンの WindowsPython をインストールして動かしてみることにし、 Mac 同様 8890 ポートからステータスを取得することを確認しました。

そして今日

意気揚々と動かそうと試みる

8890 ポートからステータスを得ることができるならば、 DJITelloPy も動くだろう。と意気揚々と pip install をして以下のコードを動かすことにしました。

import cv2
from djitellopy import Tello

tello = Tello()
tello.connect()
tello.query_battery()

「・・・」

$ python take_picture.py 
[INFO] tello.py - 129 - Tello instance was initialized. Host: '192.168.10.1'. Port: '8889'.
[INFO] tello.py - 438 - Send command: 'command'
[INFO] tello.py - 462 - Response command: 'ok'
Traceback (most recent call last):
    ~省略~
    raise TelloException('Did not receive a state packet from the Tello')
djitellopy.tello.TelloException: Did not receive a state packet from the Tello
動かんのだが?

もう一度 tello_state.py を動かす

$ python hoge.py 
[START] recvfrom
[END] recvfrom: b'pitch:0;roll:0;yaw:0;vgx:0;vgy:0;vgz:0;templ:87;temph:90;tof:10;h:0;bat:16;baro:51.99;time:0;agx:9.00;agy:-17.00;agz:-999.00;\r\n'
[START] recvfrom
[END] recvfrom: b'pitch:0;roll:0;yaw:0;vgx:0;vgy:0;vgz:0;templ:87;temph:90;tof:10;h:0;bat:16;baro:51.47;time:0;agx:8.00;agy:-14.00;agz:-997.00;\r\n'
[START] recvfrom
[END] recvfrom: b'pitch:0;roll:0;yaw:0;vgx:0;vgy:0;vgz:0;templ:87;temph:90;tof:10;h:0;bat:16;baro:51.55;time:0;agx:6.00;agy:-14.00;agz:-998.00;\r\n'

「なん・・・だと・・・?」

まさか Tello-Python/tello_state.py でステータスが取れても、
DJITelloPy が動かないケースがあるとな・・・?

管理者実行の PowerShell でも駄目か・・・

もう Mac でやるしかないのだろうか?かなり詰んだ感が拭えないです・・・

仕方ないので Mac でビデオストリームを取得してみた

動かしたコードはこちらの take-picture.py
キャプチャしたいだけなので takeoff()land() は使いませんでした。

  import cv2
  from djitellopy import Tello

  tello = Tello()
  tello.connect()

  tello.streamon()
  frame_read = tello.get_frame_read()

- tello.takeoff()
+ # tello.takeoff()
  cv2.imwrite("picture.png", frame_read.frame)

- tello.land()
+ # tello.land()
ちゃんと動いて picture.png ができるところまで行きました!

picture.png は真っ黒だったけどね・・・

一難去ってまた一難・・・

まとめ

全然動かなすぎてマジでつらい