2021年5月9日日曜日

<備忘録>飛行計画通りにドローンが動くようになった。

前回ラズパイでドローンを動かせるようになりました。さらに一歩進んでDJI社公式SDKで飛行計画を立ててみようと思います。細かいやり方は、こちら参照。ほぼここのページの通りそのままやっただけ。

1. gitで公開されているSDKサンプルをダウンロード。
2. (必要に応じて)今回自宅無線LANでStationモードでTello EDUが設定されている。そのため、tello.pyの17,18行目あたりを自分用にいじる。

  GNU nano 3.2                        tello.py                                  


import socket

import threading

import time

from stats import Stats


class Tello:

    def __init__(self):

        self.local_ip = ''

        self.local_port = 8889

        self.socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)  # socke$

        self.socket.bind((self.local_ip, self.local_port))


        # thread for receiving cmd ack

        self.receive_thread = threading.Thread(target=self._receive_thread)

        self.receive_thread.daemon = True

        self.receive_thread.start()


#        self.tello_ip = '192.168.10.1'  #Tello EDUのデフォルトのIPはコメントアウトしておく。

        self.tello_ip = '192.168.xx.cc'  #ここをTello EDUに振られたIPアドレスにしておく。

        self.tello_port = 8889

        self.tello_adderss = (self.tello_ip, self.tello_port)

        self.log = []


        self.MAX_TIME_OUT = 15.0



3. 飛行計画用のファイルを何個か準備する。今回5個準備した。
  デフォルトでは、command.txtがあるのでこれをいじる感じ。

3-1. 離陸して5秒待って着陸する飛行計画

  GNU nano 3.2                      command.txt                                 


command

takeoff

delay 5

land



3−2. 離陸して2秒待って着陸する飛行計画

  GNU nano 3.2                      command2.txt                                


command

takeoff

delay 2

land



3−3. 離陸して左に20cm、後ろに20cm、右に20cm、前に20cm移動し着陸する飛行計画

  GNU nano 3.2                    flight_test.txt                               


command

takeoff

delay 2

left 20

delay 2

back 20

delay 2

right 20

delay 2

forward 20

delay 2

land


3−4. 離陸してバク転、前転、左回転、右回転し着陸する飛行計画

  GNU nano 3.2                    flight_test2.txt                              


command

takeoff

delay 2

flip b

delay 2

flip f

delay 2

flip l

delay 2

flip r

delay 2

land



3−5. 離陸して50cm上昇、360度時計回り旋回、50cm下降、360度反時計周り旋回し着陸する飛行計画

  GNU nano 3.2                    flight_test3.txt                    変更済み  


command

takeoff

delay 2

up 50

delay 2

cw 360

delay 2

down 50

delay 2

ccw 360

delay 2

land



4. Single_Tello_Testを動かしてみる。引数ファイルを指定しPythonを実行する。一応成功。
  実行後ログ等出力されるが詳細割愛。

pi@raspberrypi:~/Tello-Python/Single_Tello_Test $ python tello_test.py command.txt

(詳細割愛)

pi@raspberrypi:~/Tello-Python/Single_Tello_Test $ python tello_test.py command2.txt

(詳細割愛)

pi@raspberrypi:~/Tello-Python/Single_Tello_Test $ python tello_test.py flight_test.txt

(詳細割愛)

pi@raspberrypi:~/Tello-Python/Single_Tello_Test $ python tello_test.py flight_test2.txt

(詳細割愛)

pi@raspberrypi:~/Tello-Python/Single_Tello_Test $ python tello_test.py flight_test3.txt

(詳細割愛)


 ※このSDKはPython2系のようだ。前回のサンプルはPython3系だったが。

<所感>
・計画通りにドローンを操作できた。
・結構本体が熱を持つ。冷却が必要か??
・狭い部屋でやってたのでたまに壁に激突し、本体が壊れるんじゃないかと超焦る。ホバリングがなぜか安定しない。その場合プログラムが最後まで実行できていないため次回実行時にソケットエラーが出るので、killしないと実行できない。

・ソケットエラー

pi@raspberrypi:~/Tello-Python/Single_Tello_Test $ python tello_test.py command2.txt

Traceback (most recent call last):

  File "tello_test.py", line 13, in <module>

    tello = Tello()

  File "/home/pi/Tello-Python/Single_Tello_Test/tello.py", line 11, in __init__

    self.socket.bind((self.local_ip, self.local_port))

  File "/usr/lib/python2.7/socket.py", line 228, in meth

    return getattr(self._sock,name)(*args)

socket.error: [Errno 98] Address already in use


・プロセスIDを調べてプロセスを強制killする(今回20201)

pi@raspberrypi:~/Tello-Python/Single_Tello_Test $ ps -fA | grep python

pi         685     1  0  5月02 ?      00:00:00 /usr/bin/python3 /usr/share/system-config-printer/applet.py

pi       20201 20030 14 16:33 pts/0    00:00:33 python tello_test.py command2.txt

pi       20259 20030  0 16:36 pts/0    00:00:00 grep --color=auto python

pi@raspberrypi:~/Tello-Python/Single_Tello_Test $ sudo lsof -i:8889

COMMAND   PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME

python  20201   pi    4u  IPv4 469376      0t0  UDP *:8889 

pi@raspberrypi:~/Tello-Python/Single_Tello_Test $ 

pi@raspberrypi:~/Tello-Python/Single_Tello_Test $ kill -9 20201

pi@raspberrypi:~/Tello-Python/Single_Tello_Test $ ps -fA | grep python

pi         685     1  0  5月02 ?      00:00:00 /usr/bin/python3 /usr/share/system-config-printer/applet.py

pi       20268 20030  0 16:38 pts/0    00:00:00 grep --color=auto python

pi@raspberrypi:~/Tello-Python/Single_Tello_Test $ 

pi@raspberrypi:~/Tello-Python/Single_Tello_Test $ sudo lsof -i:8889

[1]+  強制終了            python tello_test.py command2.txt



<参考>

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)

<参考>

2021年5月5日水曜日

NO RULES 世界一「自由」な会社、NETFLIX

NO RULES 世界一「自由」な会社、NETFLIX」読了。
きっかけは、昨年の12月のプチ忘年会の時に勧められたんで即ポチしてみた。日経新聞の広告にも出てたね。
プロセスより社員を重視する。効率よりイノベーションを重んじる。そしてほとんど制約のないカルチャーである。「能力密度」を高めて最高のパフォーマンスを達成すること。社員にコントロール(規則)ではなくコンテキスト(条件)を伝えることを最優先している。
クリエイティブで変化に強い会社はこういうカルチャーなんだなぁ。徹底的な目標管理なAmazonとも違って面白いなぁと思った。まずは最高の人・メンバーですね。そしてフィードバックと、コントロールの撤廃。日本の組織だと裁量権がなく難しい部分が多いけど。。。ただ、ネットフリックスでも、安全とミス防止が最優先となる分野にはしっかり「ルールと手順」を実践している。適材適所ということですね。自分にできることは、まず自チームから小さく始めてみるということでしょうか。早速GW明けから実践ぢゃ!

半沢直樹 アルルカンと道化師

半沢直樹 アルルカンと道化師」読了。
半沢直樹シリーズ第5弾ということで、半沢ファンとしてKindleポチってた(ポチってたのをやっと読む。。)
舞台は、西大阪支店に赴任したばかりのお話。時系列的にはオレたちバブル入行組より前の話ですかね。

半沢節炸裂で、倍返しで、おもろかった。それにしても浅野支店長腹たつわー。これが本当にメガバンクなら終わってますね。
「これでオレが異動するようなら、この東京中央銀行も、せいぜいその程度の組織だったということだ。そんなことより、仕事仕事」
<参考>

2021年5月4日火曜日

GACKTの勝ち方

GACKTの勝ち方」読了。
きっかけは、たまたま見た中田Youtube大学のGACKTとの対話をみたんで。ポチってみた。

あー、GACKTも、ホリエモン、中田敦彦と同様、秒で行動する人なんだなーと。「とに・かく・うご・こう」なるほど。そして、GACKTを続けるのもかなりのストイックさと努力が必要なんだなw


二宮金次郎はなぜ薪を背負っているのか?

きっかけは、日経新聞の小泉進次郎のリーダーの本棚で座右の書として紹介されていたのと、猪瀬直樹さんの本読んだことなかったので、気になって即ポチしていたのだろう。Kindleに知らないうちに入ってました。

日本の小学校に数多く置いてある二宮金次郎像。勤勉・節約の象徴というイメージが強いが、この本を読むとイメージが一変する。薪が金になり、金が富に変わる、金次郎ファンドというシステムを作り上げる。そして小田原領(神奈川県)での実績を受け、桜町領(栃木県)への人口減少問題へ取り組む。ざるだった収支もしっかり記録を取る!トヨタの生産ラインにもこの考え方が受け継がれている。ほう。

ピンチをチャンスに変え、実行する力。学ぶべきことが沢山ありますね。

絶対に挫折しない日本史

絶対に挫折しない日本史」読了。
きっかけは、日経新聞の広告だったような気がする。気がついたらKindleに入っていた。

高校時代は世界史メインだったためほとんど日本史は勉強しておらず、挫折せず最後まで読みましたw  まとまる→崩壊する→再びまとまる という流れわかりやすかった。古い時代の場合結局文献が残っておらず曖昧な状態だとは思うが大まかな流れは頭に入れておこう。。
・約4万年前、日本列島に人類が到達した。
・西暦700年頃、「日本」という国号が生まれ、国のトップを「天皇」と呼ぶように。
・西暦1100年頃、「古代」が終わり、権力者もバラバラのカオスな時代「中世」へ。
・西暦1603年に江戸時代が始まり、緩やかな成長が続く。
・西暦1868年の明治時代以降、国家が一気にまとまる。一般的にここから「近代」。
そういえば中田Youtube大学の古事記もおもろかったなー。改めてこの神話と国の成り立ち、天皇について学んでみるのもおもろいなーと思った。まだまだ知らないことだらけや。

2021年5月1日土曜日

<備忘録>ラズパイの目を手に入れた。

GWは緊急事態宣言のためおうち時間です。暇なんで先日手に入れたラズパイで工作してみた。カメラを買って簡易監視カメラを作った。motionというプログラムを動かし、書斎に誰かが入ってきたら検知し、俺のLINEに画像が通知されます。

<テスト結果:成功>
赤枠が動き検出した箇所とのこと。ただ少し動いただけでDOS攻撃のように画像がLINEにくるんでチューニングが必要かも。。常時動かすのは一旦やめておこう…。

<買ったもの>

<苦労した点>
 一度別のカメラを買ったんだがカメラが認識せず、切り分けにえらい苦労した。フラットケーブルの裏表が間違えていないか何度も繋ぎ直したり、フラットケーブルを買い直したり。結果、カメラ不良だろうとAmazonに返品して今回を買いました。えらい時間食ったわ。。

vcgencmd get_camera
 supported=1 detected=0  ※認識せず…
 supported=1 detected=1  ※認識した!

<参考>

2021年4月18日日曜日

令和3年度春期システムアーキテクト受験記

半年に1回の脳トレ。情報処理試験「システムアーキテクト」初受験です。天気は昨日の大雨は吹き飛び快晴。受験会場は、まさかの徒歩圏内の町田駅。今回初受験なので一応準備はしてみた。

結論、ワンチャン合格あると思う。

学習履歴(約31時間)
・1日1問メール:午前Ⅱを学習 (約2分x60日=120分=2時間)※edifist
・Web動画学習(講義:午前2:2時間半+午後2:1時間半=4時間)※TAC
・論文添削(8時間x2回=16時間)※TAC
・公開模試:午前Ⅱ〜午後Ⅱ(5時間)※TAC
・合格トレーニング+過去問+公開模試(午前Ⅱ:4時間)※TAC

 →模試の判定は、、、D...(午前2と午後2は合格圏内。午後1がD)

午後1は結局その年の問題しだいだと思うんで、ノー勉強っす。
で、試験後の感想と一部結果。

午前Ⅱ(マーク式40分)…まぁここは無難に。
  →自己採点結果:21/25=84%
  まぁ午前を落とすことはないでしょう。

午後Ⅰ(記述式90分)…4問の中から2問選択。ざっと解答用紙を眺めて問題数の多い問1(企業及び利用者に関する情報の管理運用の見直し)、問2(配達情報管理システムの改善)を選択。問2から解き始めて約45分。問1も残り45分でギリギリ。途中?みたいな状態になって焦ったが一旦は完投してみた。問題自体は難しいとは感じなかったんだけど、何せ時間が。。
 →6割越え、ギリ、いや足りないか。

午後Ⅱ(論述式120分)…3問の中から1問選択。問1のアジャイル開発はそもそもやったことないんでパス。問3は組み込みなんでパスなんで、必然的に問2(情報システムの機能追加における業務要件の分析と設計)を選択。一応、10分で全体の構成・ストーリーをざっくり考えて、あとは書き殴るだけ。論文は添削と模試でベースラインは出来上がっているのであとは設問に沿うようにアレンジ。一応最後まで書いた。
 →最後まで埋めてはみた、、、多分大丈夫。かな。

総括
午後1次第だと思う。あー、なんとか1発合格したいところ。。

2021年4月3日土曜日

ゴールド免許さようなら…。


あー。やってしまいました。日本のお巡りさんすみません。私が悪いです。反省しています。せっかく取得したばかりのゴールド免許も、4年半後にブルーに落ちます。。

赤信号で「直進」と「左折」が別々の信号ってあるんだ。はまった。。「直進」できれば「左折」もできると思い込んでしもた。。。確かにものすごく違和感があったんだけど、、、右隣の直進の車が動いたので流れで動いてしもた・・・。お巡りさんも昔この交差点で左折で事故があって、こういう信号機になったんですよね、あまり無い信号機とは言っていた。。。(張っていたんですよね)

<参考>

2021年3月20日土曜日

<備忘録>ラズベリーパイ

 春のリフレッシュ休暇中のお勉強・お遊び?ということで、ラズベリーパイ(通称ラズパイ)買ってみました。

 きっかけは、たまたまTVの情熱大陸で「登大遊さん」を見たら、ちらちらラズパイらしきものが見えたこと。あと、最近はクラウドばかりで、正直クラウドは課金が危ないので、手元にお遊びできるものがあればと。

 箱を開けての最初の感想。小さっ!(右はiPhone12mini)とりあえず、iMacから無線LAN経由でラズパイにSSH,VNCできるようにしてみたのと、イヤホンジャックから音が出るようにしてみた。だけ。。。

 ラズパイは、各種センサーモジュール(カメラとか)も取り付けられるとのことで、コツコツ電子工作で遊んでみようと思います。野望はあるんだけど、それは完成したらで。

<買ったもの>

<参考:セットアップ>
セットアップ環境:iMac Late2012(背面にSDカードスロットあります)


<参考:音を鳴らす>

<参考:SDカードバックアップ>

2021年3月17日水曜日

シン・エヴァンゲリオン劇場版:||

シン・エヴァンゲリオン劇場版:||視聴だん。時期的に卒業式の気分でした。そして2回見ましたw。1回目は素直に視聴。2回目はネタバレ解説・考察を頭に入れつつ、初めてのIMAXで見てみました。IMAXの没入感半端ないな〜。シートも音も最高やん!ラスト30分は理解が追いつかず置いてけぼりになるため、2回は見た方がええなと思いました。

昨今、人類としての儀式ができずなかなか締まりの悪い世の中なんですが、「おはよう」「おやすみ」「さよなら」「ありがとう」と言った日常の当たり前の”儀式(おまじない)”は行うようにしよう。うん。次に進むためにも!



<参考>テレビアニメ版〜劇場版〜新劇場版と26年を振り返るには中田Youtube大学