「研究しましょう」 ブログ   --- 日記 マガジン 小耳情報

    やりたいことを探して、ネットをさまよう私の、ブログです --- I'm here. Find me out. 我在这里 查找和
0

趣味探しの近況 💦   #趣味探し #音楽 #英語学習 #ドローン #Python

 ライフワークとなり得る趣味探しを、継続中。所が、趣味が、趣味探しを邪魔している。今検討している趣味ジャンルは、これ。

① Python でドローンをコントロール
② アマチュア無線とSWLやBCLの受信
③ 英語学習
④ 小説の読書
⑤ 天体観測
⑥ ダイエット
⑦ 美味しい珈琲を淹れること

あ、れ? こんなもんだったっけ?

ドローンの初期テストは終わって、次に何をやろうか考え中。パソコンをいじりながら電波を聴いていると、周波数ダイアルを回すのに集中してしまって、パソコンいじりとかできないでいる。

  「これ、改善が必要

どっかで交信が見つかったら、他の周波数をを探さないで、しばらく聞いたままにし置こう。てか、電波を聴きながら他のことは屋良な方がいいかも。

  「でも、じゃぁ、どういう趣味にするの?」

難問過ぎる。

あ、アマチュア無線の方は、国家試験の問題集を買って、読み始めている。読み始めたんだけど、電気的知識が剥がされてて、なかなか進まない。困ったもんだ

英語学習は、今、中断中。というか、くじけ中。4月から、ラジオ2講座、テレビ1講座をやる予定。なるべくリアルタイムに聞きたい。そして、周りに気を取られない用に、集中力を鍛える。

天体観測は、次の練習用ターゲットを調査中。そして、予約発注を掛けている赤道儀が、まだ音沙汰が無い。

 趣味のネタは上がりだしたんだけど、なかなかのめり込めない。集中力が無い。あぁ、なんだか、つまらない記事になってしまった。とにかく、

  「頑張れ!自分

いずれにせよ、集中力を付けないと

0

DJI ドローン Tello の動作確認プログラムを動かしてみた 🚁💨   #ドローン #プログラミング #Python

ドローンプログラムTEST
 DJI のドローン Tello の動作確認プログラムを、 Python で作ってみた。プログに乗せるために、記述のチェックをしてて、それに、チョット時間が掛かってしまった。

ドローンの Tello は WiFi のアクセスポイントとして接続するので、ノートパソコンの様に、WiFi が使える物が必要。そのため、私は、MacBookPro 上の Python でプログラミングをした。

上の写真が、自動離陸した後、どの場でホバリングしている、Tello ドローン。この状態で、もたもたしてると、タイムアウトが掛かって、自動着陸してしまう。

Tello は、ホバリングが、超、安定しているので、室内で遊ぶのに適していると思う。

 使い方は、Paython インタープリターを起動して、そこに、このコマンドで、下記のスクリプトを読み込む。

exec(open("[ファイル名].py").read())

以下のコードは main 関数を持たない形にしている。インタープリターに読み込んだら、プロンプトで関数をコールして動作させる。

WiFi で Tello に接続して、最初に connect() を実行する。そうすると、Tello に Socket に UDP 接続される。その後に、以下のコマンドを打って、ドローン操作する。

  takeoff() : ドローンの飛行開始(ある高さにきたらホバリングする)
  land() : ドローンを自動着陸させる

Pathon スクリプトから抜け出す時は、 exit() 関数を使う。インタープリターがロックしたら、MacBookPro の場合 Ctrl+C を使う。

 さてと、動作確認はできた。今後は、このままアプリを作って遊ぶ予定。どういう仕様にしようかなぁ

以下、動作確認テスト用のソース。

PS. 参考記事『Python ソケット通信のサンプル

import socket
#import tellopy    # 公式(?)ドローン制御ライブラリ
#import djitellopy

tello_ip      = b'192.168.10.1'   # Tello の IPアドレス
tello_port    = 8889              # Tello の UDP ポート番号
tello_address = (tello_ip, tello_port)
res_port      = 1518
srv_address   = (b'',9000)

tello_socket  = object # ドローンの接続用(nullの代替が分からない)
sw_res        = True  # print message: True or False

print("TELLO TEST Start")     # テスト用

# ドローンへの接続
def connect():
    global tello_socket,srv_address, tello_address
    tello_socket = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
    # tello_socket.bind(srv_address)    # 必要性不明
    if tello_socket == object: return
    tello_socket.sendto(b'command',tello_address)
    getRes()

# 応答の取得
def getRes():
    if sw_res==False: return 
    global tello_socket,res_port
    if tello_socket == object:
        print("NO SOCKET")
        return
    retv, server = tello_socket.recvfrom(res_port)
    msg = retv.decode(encoding="utf-8")
    print(msg)
    return msg

# 飛行開始
def takeoff():
    if sw_res==False: print("takeoff")
    global tello_socket,tello_address,tello_ip,tello_port
    tello_socket.sendto(b'takeoff',tello_address)
    getRes()

# 着陸
def land():
    if sw_res==False: print("land")
    global tello_socket,tello_address,tello_ip,tello_port
    tello_socket.sendto(b'land',tello_address)
    getRes()    # 着陸完了後に OK が返ってくる

# 高度下げ
def down(dist):
    global tello_socket,tello_address,tello_port
    if sw_res==False: print("dist:"+str(dist))
    tello_socket.sendto(b'land '+str(dist),tello_address)
    getRes()

def quit():
    global tello_socket
    tello_socket.close()

def resTest():
    global tello_socket
    retv = getRes(tello_socket)
    print(retv)

0

やっと DJI のドローン Tello をPython から動かせた 💦   #Python #ドローン #プログラミング

Python積ん読
 DJI のドローン Tello を Python からコントロールしながら Python の勉強をしようと、写真右上の本『 Scratchでドローンを・・・』を参考に、試して、動かすことができた。

この本の終わりの方に、Python で Tello API を叩いて動かすコードが載っていたので、それを試していた。Python のバージョンの違いからか、そのままでは動かなかった。

その隣の『インターフェース』を見たら、

  「 tellopy や djitellopy というモジュールがあるじゃん」

知らなかった。

でも、逆に勉強になったので、おっけぇ。

 開発環境は、エディタに Visual Studio Code を使い、そのターミナルからプログラムを実行する形を取った。具体的には、ソースをVSCode で開き、ターミナルのディレクトリをソースコードと同じにした。

ターミナルで Paythonインタープリターを起動して、

exec(open("my_tello.py").read())

これで、main を持たないソースファイル my_tello.py をロードして、自作した connect() 等の関数を、インタープリター上で打ち込んで実行する形。ソースに変更を加えたら、ファイルロードからやり直す感じ。

この方法だと、Python 上で UI をコーディングしなくていいので、楽だった。ソースファイルは、綺麗にしたら、掲載予定。その次に tellopy や djitellopy を import して試してみようと思ったら、ライブラリーが見つからないエラーが出てしまった。これを、修復。

正しい修復方法は、『Visual Studio Codeでライブラリやモジュールが could not be resolved になる時の対処法』に書いてある通り。この例では『django』が見つからないことになっているので、それを、そのまんま『tellopy』に置き換えてやったら、見事にエラーが回避された。

先のサイトの、解決法の書き方、素晴らしいす。そして、私の元の情報は、

  「ゴミ以下す」



PS. 実際のプログラムコードに関しては、もうチョット実験をしてから、別途、紹介予定。

まず、ライブラリーのフォルダを探す為に、ターミナルで conda env list を実行すると、

base    /Users/meKaeru/opt/anaconda3
Python27  /Users/meKaeru/opt/anaconda3/envs/Python27

を得る。Python3 の環境である base のフォルダ名を、VSCode の Python: Conda Path の設定の所に書くと、上記のライブラリーを読み込める様になった。

  「まぁ、困ってない人には、ゴミ情報だけど、、、」

プログラミングに関しては、別記事にする予定。

0

最近、自宅も、本屋さんも、Python だらけ 💦   #プログラミング #Python

パソコン雑誌達
 本屋さんに、いつもの雑誌を見に行ったら、インターフェースも日経ソフトウェアも、それらの付録さえ、Python だった。昔は EXCEL の独壇場だった業務改善分野でも、Pythonを使った本が多くなってきた。

  「文系の人も Python 使えるのか

チョットびっくりだけど、まぁ、Python も Visual Basic に似た感じなので、当然の流れなのかも。

0

この Python で、本当に DJI のドローン Tello が動くのか?   #ドローン #Python #趣味探しの

 DJI のトイドローン Tello をプログラミングで動かす本を買ってあったので、それを見ながら Python のコードを書いて、実機のドローンを動かしてみた。

結果、

  「このサンプルコード、実際に動いたのか?」

なかなか動かせなかった。

サンプルコードは、エラー処理を全く入れてないし、 2018年の本だから、ちょっと疑心暗鬼。

で、そのエラー処理を入れながら Paython コード書いて動かしてみたんだけど、変えた部分が逐一エラーを起こしてしまった。で、思った。

  「トレースできる開発環境って、無かったっけ?」

なんか、前に仕事でコードを書いていた時、使った気がする。Visual Studio だったっけかなぁ

 そうこうしているうちにドローンの電池が切れて、私のデバッグも一時休止。ドローンへの接続と、レスポンスを1回だけ受信するのが確認出来た。

で、別な本を見ていたら、TelloPy という Tello の制御用のライブラリーが有るって書いてあった

でも、実際に自分でコードを書くのも勉強だから。もう少しこのまま実験して、あきらめが付いたら、そのライブラリを試してみよう

0

Python で DJI のドローン Telloを動かす準備 💦   #ドローン #Python #趣味探し

 MacBookPro で、追加した Python 環境で、Anaconda-Jupyterがブラウザを開かない。デフォルトの base では立ち上がるのに。なぜ! ネットの情報を元にファイルを修正してもダメだった。

それでも、ドローン Tello を操作する部分には影響しないので、その問題は、ゆっくり調べて解決していく予定。

 今日やった作業は、Python のインタープリター上、Tello のコマンドを発信する方法の実験。具体的には、Paython スクリプトファイルに Tello の制御関数を書いて置いて、それを call する方法の確認と実験。

Python インタープリター上にスクリプトファイル Tello.py を読み込む方法は、

  open("./Tello.py").read( )

Tello.py の中に、飛行開始の takeoff() 関数と飛行停止の land() 関数を書いておく。その関数をインタープリター上実行して、ドローン Tello を制御する。

次の様な感じ。まだ、実機でテストはしていない。明日やる予定。 ← ダメだった

import socket

tello_address = "192.168,10.1"
tello_port = 8889
tello_socket = 0

def command():
tello_socket = socket.socket(socket.AF_INET.socket.SOCK_DGRAM)
tello_socket.sendto("command",(tello_address,tello_port))

def takeoff():
tello_socket.sendto("takeoff",(tello_address,tello_port))

def land():
tello_socket.sendto("land",(tello_address,tello_port))

MEMO: ゲームパッドのイベント取得

該当の記事は見つかりませんでした。