WELCOME TO EASTWORLD

Eastworld でドロイド遊び Rapiro が主人公 ラズパイが好物

Rapiro 免停に奮発するの巻

Rapiro 君、免許皆伝を得たものと思いきや、聞くも涙、語るも涙、実は師匠が偽伝道師だったと判明。

敢え無く免停、というか免取。な~む~

 

どうりでまともに撮影ができず、尻切れになっていたわけだ。

尻切れじゃあ恰好がつかないし、この際だから、ネコ型ロボットのような尻尾をつけちゃおうか、Rapiro 君?

 

 

さて、簡単にはめげない Rapiro 君。

トイレは無用の身でありながら、クソッタレと発奮し、えせ師匠の尻拭いをしたのでありました。

尻切れ解消には、優しく拭いてあげるのがポイントだそうですが、その指導書は目には優しくない蛇文ならぬ駄文なようで:

 

from __future__ import print_function

import picamera
camera = picamera.PiCamera()
camera.framerate = 10
camera.hflip = True
camera.vflip = True
from time import time
from datetime import datetime
cammode = 1   # Camera mode 1:Picture, 2:Movie
import sys

import serial
ser = serial.Serial('/dev/ttyS0', 57600, timeout = 10)

import pygame
pygame.init()
pygame.joystick.init()
joystick = pygame.joystick.Joystick(0)
joystick.init()
buttons = joystick.get_numbuttons()
axes = joystick.get_numaxes()

done = False

while done==False:
    try:
        for event in pygame.event.get():
            print("\r" + "Rec: " + str(camera.recording) + "> ", end="") 
            if event.type == pygame.QUIT:
                done=True

            if event.type == pygame.JOYBUTTONDOWN:
                #print("Joystick button pressed.")

                 for i in range( buttons ):
                    button = joystick.get_button( i )
                    if button == 1:
                        if i == 0:              # Square
                            ser.write("#M6")
                        elif i == 1:            # X
                            ser.write("#M0")
                        elif i == 2:            # Circle
                            ser.write("#M8")
                        elif i == 3:            # Triangle
                            ser.write("#M5")
                        elif i == 9:            # OPTIONS
                            cammode *= -1
                            if cammode == 1:
                                print("Picture mode")
                                raise Exception
                            else:
                                print("Movie mode")
                                raise Exception
                        elif i == 10:           # Left Stick push
                            t = str(datetime.now())
                            if cammode == 1:
                                picn = "rapiro_pic_" + t + ".jpg"
                                camera.capture(picn)
                                print("Snapshot " + picn + " taken")
                            else:
                                vidn = "rapiro_vid_" + t + ".h264"
                                try:
                                    camera.start_recording(vidn)
                                    start = time()
                                    print("Started video recording " + vidn)
                                except Exception as e:
                                    sys.exc_clear()   #or print(e)
                        elif i == 12:
                            print("PS button pressed. Goodbye!")
                            ser.write("#M0")
                            done=True

            elif event.type == pygame.JOYBUTTONUP:
                #print("Joystick button released.")

                try:
                    if joystick.get_button( 10 ) < 1:
                        print(time() - start)
                        camera.stop_recording()
                        print("Stopped recording video")
                except Exception as e:
                    sys.exc_clear()   #or print(e)

            elif event.type == pygame.JOYAXISMOTION:

                for i in range( axes ):
                    axis = joystick.get_axis(i)
                    if axis < -0.9:
                        if i == 0:           # Axis 0: Left Joystick horizontal
                            print("Left")
                            ser.write("#M3")
                        elif i == 1:         # Axis 1: Left Joystick vertical
                            print("Forward")
                            ser.write("#M1")
                    elif axis > 0.9:
                        if i == 0:
                            print("Right")
                            ser.write("#M4")
                        elif i == 1:
                            print("Backward")
                            ser.write("#M2")

            elif event.type == pygame.JOYHATMOTION:
                #print("Hat motion detected")
                hat = joystick.get_hat( 0 )

                if hat == ( -1, 0 ):
                    print("Hat Left")
                    ser.write("#PS05A050T005")
                elif hat == ( 0, -1 ):
                    print("Hat Down")
                    ser.write("#PS05A180S02A000T005")
                elif hat == ( 1, 0 ):
                    print("Hat Right")
                    ser.write("#PS02A130T005")
                elif hat == ( 0, 1 ):
                    print("Hat Up")
                    ser.write("#PS06A100S05A030S03A070S02A150T005")
    except Exception:
        sys.exc_clear()   #or print(e)

 

pygame.quit ()

camera.close()

 

 

<メモ>

お尻の痛みに耐え切れず、応急処置を施した Rapiro 君。

camera.recording を 吐き出し続けることで、なんとか切れずにお尻がきれいになりました。

 

さてさて、根本治療を探るためには、まずは PiCamera の Documentation に目を通すべきか。

ds4drv での教訓を思い出すべき。

 

また、Python やプログラミングの基本についてもよく分かっていないので、こちらも蛇の道を這い行くが如く、にゅるにゅるとお勉強が必要。

そして、multiprocessing を活用すればうまいことやれそうな気もするが、どうだろう?

 

基本書を前からぼちぼちとと潰していきながら、同時に、思いつくままに各個バトルを楽しむのがいいかも。

 

なお、framerate = 10 など、他にもプチ追加修正を施した。

 

以上、今夜はおしまい。

お疲れさん!

 

P.S. 

camera.recording を吐き出すところを、上記コードのようにちょいと凝って、

print("\r" + "Rec: " + str(camera.recording) + "> ", end="") 

としているが(なお、冒頭の from __future__ import print_function)、これだとしょっちゅう尻切れになることが判明。

当初のように、

print(camera.recording)

というふうに単純に吐き出せば、カメラにより力を注げているせいか切れない模様。(それでも、レコーディングオフとプログラム終了のタイミングの兼ね合いのせいか、多少は切れることがある。)

コンソールにダダ漏れ吐き出しまくり状態になるが。

番外編 蛇の道、一里塚の巻

今までのコードをプチ修正の上、これまでの足跡としてブログに貼り付けたかったが、はてブにコードをコピペするとインデントが崩れて面倒だった。

そこで、はてブにはHTML編集モードがあるので、一旦、オンラインのHTMLエディターでHTMLコードに変換してから貼り付けてみた。

白黒、色気なしのソースそばって感じだが、とりあえずOKでしょう。色気はそのうち醸し出すということで。

ブログサイト活用も初めてだし、色々と勉強ですな~

 

以下、一里塚の記念碑に:

 

import picamera
camera = picamera.PiCamera()
camera.hflip = True
camera.vflip = True
from time import time
from datetime import datetime
cammode = 1   # Camera mode 1:Picture, 2:Movie
import sys

import serial
ser = serial.Serial('/dev/ttyS0', 57600, timeout = 10)

import pygame
pygame.init()
pygame.joystick.init()
joystick = pygame.joystick.Joystick(0)
joystick.init()
buttons = joystick.get_numbuttons()
axes = joystick.get_numaxes()

done = False

while done==False:
    try:
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                done=True

            if event.type == pygame.JOYBUTTONDOWN:
                #print("Joystick button pressed.")

                 for i in range( buttons ):
                    button = joystick.get_button( i )
                    if button == 1:
                        if i == 0:              # Square
                            ser.write("#M8")
                        elif i == 1:            # X
                            ser.write("#M0")
                        elif i == 2:            # Circle
                            ser.write("#M6")
                        elif i == 3:            # Triangle
                            ser.write("#M5")
                        elif i == 9:            # OPTIONS
                            cammode *= -1
                            if cammode == 1:
                                print("Picture mode")
                                raise Exception
                            else:
                                print("Movie mode")
                                raise Exception
                        elif i == 10:           # Left Stick push
                            t = str(datetime.now())
                            if cammode == 1:
                                picn = "rapiro_pic_" + t + ".jpg"
                                camera.capture(picn)
                                print("Snapshot " + picn + " taken")
                            else:
                                vidn = "rapiro_vid_" + t + ".h264"
                                try:
                                    camera.start_recording(vidn)
                                    print("Started video recording " + vidn)
                                except Exception as e:
                                    sys.exc_clear()   #or print(e)
                        elif i == 12:
                            print("PS button pressed. Goodbye!")
                            ser.write("#M0")
                            done=True

            elif event.type == pygame.JOYBUTTONUP:
                #print("Joystick button released.")

                try:
                    if joystick.get_button( 10 ) < 1:
                        camera.stop_recording()
                        print("Stopped recording video")
                except Exception as e:
                    sys.exc_clear()   #or print(e)

            elif event.type == pygame.JOYAXISMOTION:

                for i in range( axes ):
                    axis = joystick.get_axis(i)
                    if axis < -0.9:
                        if i == 0:           # Axis 0: Left Joystick horizontal
                            print("Left")
                            ser.write("#M3")
                        elif i == 1:         # Axis 1: Left Joystick vertical
                            print("Forward")
                            ser.write("#M1")
                    elif axis > 0.9:
                        if i == 0:
                            print("Right")
                            ser.write("#M4")
                        elif i == 1:
                            print("Backward")
                            ser.write("#M2")

            elif event.type == pygame.JOYHATMOTION:
                #print("Hat motion detected")
                hat = joystick.get_hat( 0 )

                if hat == ( -1, 0 ):
                    print("Hat Left")
                    ser.write("#PS05A050T005")
                elif hat == ( 0, -1 ):
                    print("Hat Down")
                    ser.write("#PS05A180S02A000T005")
                elif hat == ( 1, 0 ):
                    print("Hat Right")
                    ser.write("#PS02A130T005")
                elif hat == ( 0, 1 ):
                    print("Hat Up")
                    ser.write("#PS06A100S05A030S03A070S02A150T005")
    except Exception:
        pass

pygame.quit ()

 

<メモ>

・動画が尻切れになっていた。25秒ほどの撮影で、Stick をリリースした時点で Stopped recording... と表示されていたが、動画を見てみると 8秒ほどの時点で切れてしまっていた。

何故だろう?

まあ、いずれにせよ、ラズパイも PiCamera もほぼ未開拓なので、先は長いね、お兄さん!

Rapiro 開眼するの巻

結果ばかりが求められる世の中になりつつありますが、蛇の道を這い行くが如く、Rapiro 君とボチボチと楽しみながら行きましょう。

最初から全部簡単にできたらつまんないもんね。そんなの邪道さ。

 

ところで、蹴鞠でネコのような身のこなしや足運びができないものかと、ふと思う時がありますが、Rapiro 君、今日はなんと、ヘビが脱皮するが如く joy walker から cat walker へと一皮むけたのでありました。

おめでとう!

 

とはいえ Rapiro 君は相変わらずくねくね歩きのまま。偵察能力アップということで、忍びの者ネコ一族の免許皆伝を得たのでありました。

さらに噂によると、遥か彼方の西方には、真のネコ者が集う場所、愛の国 Scratch があるんだって。

筋斗雲をドロ~ンと呼べればいいんだけどね。ドローンで作っちゃおうか?

そのうち愛の国 Scratch で Rapiro 君と交流できれば、慈愛に溢れる眼差しで子供達とも一緒に楽しめそうだね!

 

さて、話は逸れましたが(ヘビも道草食うのでしょうか?)、Rapiro 君の開眼ぶりは如何に、さあ、ご覧あれ(抜粋):

 

joywalker.py 改め、catwalker.py に。

PiCamera 制御を DS4や Python 2 で行う。

 

まず、冒頭に付け足し、

import picamera
camera = picamera.PiCamera()
camera.hflip = True
camera.vflip = True
import time
cammode = 1 # Camera mode 1:Picture, 2:Movie
import sys

 

(途中、省略。インデントが崩れて面倒。省略箇所は過去の落書きを参照。)

 

done = False

while done==False:
 try:
  for event in pygame.event.get():
   if event.type == pygame.QUIT:
    done=True

   if event.type == pygame.JOYBUTTONDOWN:

(try: を挿入した。撮影モード切替え時の不具合への対処。)

 

(途中省略)

 

elif i == 9: # OPTIONS

 cammode *= -1
 if cammode == 1:
  print("Picture mode")
  raise Exception
 else:
  print("Movie mode")
  raise Exception
elif i == 10: # Left Stick push
 if cammode == 1:
  t = time.time()
  picn = "rapiro_pic_" + str(int(t)) + ".jpg"
  camera.capture(picn)
  print("Snapshot " + picn + " taken")
 else:
  t = time.time()
  vidn = "rapiro_vid_" + str(int(t)) + ".h264"
  try:
   camera.start_recording(vidn)
   print("Started video recording " + vidn)
  except Exception as e:
   sys.exc_clear() #or print(e)

(ボタンのところの if 分岐に追加。撮影モード 切替え時に例外処理に飛ばして一旦抜ける。)

 

(途中省略)

 

elif event.type == pygame.JOYBUTTONUP:
 #print("Joystick button released.")

 try:
  if joystick.get_button( 10 ) < 1:
   camera.stop_recording()
   print("Stopped recording video")
 except Exception as e:
  sys.exc_clear() #or print(e)

( Movie モードでは、joystick 押し込みで録画が開始されるが、押し込みを開放すると録画停止。録画し続けるためには押し込みを維持しておかなければならず面倒だが、JOYBUTTONUP の実験のためにあえて。)

 

(途中省略)

 

 except Exception:
  pass

pygame.quit ()

(この except は、先に述べた撮影モード切替え時の不具合対処のための Try: を受けて。)

 

<メモ>

サーボもそうだが、カメラもとりあえず大雑把に。

細かい設定や調整は後ほど勉強しながら詰めていく。

Python や RasPi、プログラミングの基礎知識に欠けるため、内容はかなり怪しい。

自称 BASIC 白帯のため(最近はやりのVisual 系と違いまっせ~)、叩いたら埃がいっぱいですわ。叩きがいありまんな。

後ほど叩きまくって楽しみましょう!

 

備忘録の続きは、また後ほど。疲れた!

 

広告を非表示にする

Rapiro 偵察訓練を受けるの巻

先日、アッガイが潜んでいるとの報を受け、Rapiro 君も偵察活動に興味津々。

そこで、覗き見の趣味を極めるためにも、  芸の幅を広げるためにも、偵察活動の訓練を受けることにしました。

 

 まず、Pi Camera V2 による撮影:

 

raspistill -o peeping_rapiro.jpg

 

 そして、密偵による “窓” ベースへの報告:

 

1.『 PuTTY Download Page 』と看板が掲げられたギルドで、諜報活動の七つ道具の一つ、pscp.exe を入手

2.これを、C:¥窓¥System32 など、窓族の隠者達の間で PATH と呼ばれている秘密の花園へ移植。

3.魔法の経典 cmd を開き、“pscp” とチチンプイプイ。

4.あーら不思議、魔法のレシピが表示さるので、それをサルに毛が生えた程度(もともと生えてるっちゅうねん)のひねりを加え、えいっ、どうやっ! 

pscp -pw 開けゴマ pi@192.168.100.104:/home/pi/peeping_rapiro.jpg "C:\Users\あんた\Desktop"

5.じゃじゃーん、禁断の絵巻が花開く!

 

ちなみに、WinSCP という新型モビルスーツが完成すれば、サルの毛どころか、お茶の子さいさい、茶菓子をつまむ程度にサクサクっとつまめるらしい。

 

P.S. 

上のギルドを覗いて見ると、psftp.exe ってのも陳列されている。

色々な axe ならぬ exe が手に入るようだ。

どれが切れ味抜群なのか?

オペレーション次第で使い分けるべきだろうか。

Rapiro ハッとして、ピーチク パーチク の巻

Rapiro 君、何かアイデアが浮かんだのか、突然ハッとした顔をして Hat を取り出し、Pーちく、Pぁーちく呪文を唱えながら腕を振り始めました。

時折、『 喜びの杖 』を片手にステップワークを織り交ぜながら、体を傾けたり足を上げたりして、そのポーズを保ちながら、腕を振っていました。

 

観察日誌はこちら:

 

elif event.type == pygame.JOYHATMOTION:
 print("Hat motion detected")
 hat = joystick.get_hat( 0 )

 if hat == ( -1, 0 ):
  print("Hat Left")
  ser.write("#PS05A050T005")
 elif hat == ( 0, -1 ):
  print("Hat Down")
  ser.write("#PS05A180S02A000T005")
 elif hat == ( 1, 0 ):
  print("Hat Right")
  ser.write("#PS02A130T005")
 elif hat == ( 0, 1 ):
  print("Hat Up")
  ser.write("#PS06A100S05A030S03A070S02A150T005")

 

<メモ>

#Pは、指定外サーボの “角度” を保ったまま、指定サーボの動作に入る。

なお、指定外サーボの “動作” を保つわけではない。

超番外編 El Clasico

ピッチ状態は最高だそうだ。でも、解説者の質はというと・・・

まあ、トンカツココイチ氏や(宮澤喜一 + Le Roi プラティニ )/ 2 よりはマシかと。

気を取り直して、いざ!

 

P.S.

 ここのところ  Eastworld にトランス状態のせいか、蹴鞠観戦しても、なんか気持ちが入らない。プレミアでもビッグマッチがあったが。試合内容どうのこうのは別にして。


よっしゃ、こうなったら Eastworld に没入じゃー

広告を非表示にする

番外編 簡潔が肝心

録りだめしておいた西の世界を覗いていると、“Brevity is the soul of wit.” ってフレーズが耳に飛び込んできた。

 

ということで、東の世界の、とある壁に簡潔なメモ:

 

stk500_recv()... エラーの対処法

 

Pi を落とした状態で Sketch を再度書き込み。

 

あるいは、各デバイスのリスタート、 USB 抜き差し(“差し” はちょっと待って)と組み合わせて。

 

なお、

Arduino 環境設定『 より詳細な・・・ 』

cmd

"C:\Program Files (x86)\Arduino\hardware\tools\avr/bin/avrdude" -C"C:\Program Files (x86)\Arduino\hardware\tools\avr/etc/avrdude.conf" -v -patmega328p -carduino -PCOM3 -b115200 -D -Uflash:w:C:\Users\JohnDoe\AppData\Local\Temp\arduino_build_388960/RAPIRO_ver0_0.ino.hex:i