2014.2.4 digital shooting target マシン状況覚え書き

memo.txt


・トイガンに取り付けたレーザビーム光をセンスして表示する
・表示可能距離はネットで届く範囲

・基本動作      :
                ・USBカメラから320x240のデータをリードし、一番明るいアドレスをビームの最大値箇所とする
                 xyアドレスデータはカメラを裏からセンスしていることから左右反転してする
                 得点の演算は以下の式で求める
                         底辺と高さから距離(半径)を求める==点数の元データとなる
                           ___________
                         c = V a*a + b*b    (ルート a二乗 + b二乗)
                 残像ポイントはアレイに記憶する
                ・データが無くなった段階で最終ポイントとし、表示する

-------------------------------------------------------------------------------
       USBカメラ                表示エリア

      <---CAM_W-->        <---- Text_img_X ---->
    320*3color         700
                          <----Text_W-->
                                500
                          <------>Circle_X(半径)
                                250
      __________  CAM_H    _____________________ Circle_Y:240
      |         |↑       |             |       |  ↑       ↑
      |         ||       |             |       |  |         |
      |    +    ||240    |             |       |  |         |
      |         ||       |      +      |       |  ↓        Text_img_Y(480)
      |_________|↓       |             |       |             |
                          |             |       |             |
                          |_____________|_______|             ↓

-------------------------------------------------------------------------------

・ホスト名              :target
・ID                  :xxyyzz
・P/W                :xxxxx
・起動と終了    :
                起動 ・プッシュスイッチ:赤を押すと3.3v駆動のPICマイコンに接続のリレーがONし
                          5VをRaspberryPiに供給
                         ・同一RUNが起動中は自動的にkillされる
                終了 ・VNC画面にてshutdownさせる
                         ・プッシュスイッチ:白を数秒間押すと、RaspberryPiのシェル
                            (shutdown-daemon2.sh)がshutdownコマンドを実行し、RaspberryPiの
                             GPIOからPICマイコンに知らせてリレーをOFFする
・メール出力    :・立ち上げ時及びhi-score出力時にメールで知らせる
                 メールの宛先はファイル「init.dat」に記載し立ち上げ時に読み込む
・ネット接続    :有線LAN、無線LANともにDHCP接続
                    アクセスポイントを自動選択・接続処理
                   予定していた無線LAN環境が接続できないかもしれない無い場合は
                   iphone5の「インターネット共有」をONにしておき、起動する
         ・ssidは、立ち上げ時に起動するシェルコマンドのパラメータで知らせる
          set_ssid.shの内容
            cd /home/xxxxxxx/pi_LAN_wireless/c
                        ./set_ssid ssid-1 iphone5-ssid

・端末接続      :・PC・SSH2/VNC:DHCPアドレス(192.168.0.xxx)
                 ・IPAD・VNC   :target.local
                       avahi-daemonをインストール
                       アプリ「PocketCloud」でVNC接続し「target.local」で接続
                       また、ipadのsshアプリでも同様に接続できる
・DFによる使用率確認:76% (2014.2.5現在)
                  ・開発途中で以下を実行し節約する
                     # apt-get autoremove
                     # apt-get autoclean
                     # apt-get clean

・立ち上げ時に動くシェル等:
        ・/etc/init.d/rc.localに以下を記述
                mkdir -p /var/log/ConsoleKit
                mkdir -p /var/log/samba
                mkdir -p /var/log/fsck
                mkdir -p /var/log/apt
                mkdir -p /var/log/ntpstats
                chown root.ntp /var/log/ntpstats
                chown root.adm /var/log/samba
                touch /var/log/lastlog
                touch /var/log/wtmp
                touch /var/log/btmp
                chown root.utmp /var/log/lastlog
                chown root.utmp /var/log/wtmp
                chown root.utmp /var/log/btmp
                su -c /ramdisk.sh
                su -c /set_ssid.sh
                su -c /vnc_camera.sh
                su -c /home/pi/pi_shutdown/shutdown-daemon2.sh &
                su -c /target.sh
(suコマンド:-c : 起動したシェルにコマンド COMMAND を渡す)


・RaspberryPiのtargetアプリ関連
                基本言語はc++であるが(流用している為)、開発は通常のc言語
                ディレクトリ:/home/xxyyzz/123456/abcdefg
                main関数        :target01.cpp
                コンパイル/リンク:make (必要に応じてMakefileを修正する)
                実行シェル      :target.sh
                                   export DISPLAY=:1.0
                                    cd /home/xxyyzz/123456/abcdefg/
                                    ./target01 10 &
                実行コマンド    :target01
                設定ファイル    :Point_data2.txt
                得点ファイル    :score/yyyymmddhhmmnn_data.txt
                                : hi_score/hi_score.dat
                logファイル     : /ramdisk/ssid_log
                得点表示        :IPADでのVNC表内容にて
                                    hi-score :10回の平均点の最大値、file[hi_score/hi_score.dat]にw/r
                                    1st 〜10th:1桁と2桁で表示
                                    AVL      :10回の平均値,11回目はクリアされ1回目となる
                Restart         :ダブルクリックで得点表をクリア
                SaveDATA        :ダブルクリックで1st〜AVLまでの値を途中でもファイルにセーブする
                Preset_brightness:
                                 ダブルクリックでカメラのブライトネス再自動調整
                Re_Display      :ダブルクリックで残像を表示する
                                 再度ダブルクリックで表示を消去
                Spot_Adustment:
                                 ダブルクリックでポイントの位置調整を為の表示をする
                                 ファイルの内容を変更するとスポットの位置が変わる

-------------------------------------------------------------------------------

      ・外部ファイル
              Point_data2.txt
              score/yyyymmddhhmmss_data.txt   :10回毎にスコアを記録
              hi_score/hi_score.dat           :hi-scoreを記録
              /ramdisk/ssid_log               :アプリケーションのエラー等のlog
              /ramdisk/ssid                   :立ち上げ時にSSIDの検索等で使用するwkファイル
       ・処理
              jobチェック:二重ranを防止
              init:ファイルread、各設定、led点灯等
              startメール出力
              usbカメラの初期設定
              usbカメラからデータreadし、明るさ等を確保、設定
              hi-scoreの表示
              whileループ
                 キー入力待ち
                 コマンドチェックと処理
                 カメラ入力処理
                     一番明るい所を探す
                     ポイントを表示
                     消えた場合は得点表示
              終了処理

・コンパイル・リンク関連

#include <time.h>
#include <stdio.h>
#include <math.h>
#include "wiringPi.h"
#include "pi_gpio.h"
#include "cv.h"
#include "highgui.h"


-rw-r--r-- root root  Makefile
-rwxr-xr-x root root  target.sh
-rwxr-xr-x root root  target01
-rw-r--r-- root root  target01.cpp
-rw-r--r-- root root  make_piHiPri_obj
-rw-r--r-- root root  piHiPri.c
-rw-r--r-- root root  piHiPri.o
-rw-r--r-- root root  pi_gpio.h
-rw-r--r-- root root  make_wiringPi
-rw-r--r-- root root  wiringPi.c
-rw-r--r-- root root  wiringPi.h
-rw-r--r-- root root  wiringPi.o
drwxr-xr-x root root  hi_score
drwxr-xr-x root root  score
-rw-r--r-- root root  Point_data2.txt
-rw-r--r-- root root  init.dat

        Makefileの内容------------------------------------------------------------
        CC = gcc -lm -o3
        LDFLAGS = -lopencv_legacy -lopencv_highgui -lopencv_core -lopencv_ml 
                        -lopencv_video -lopencv_imgproc -lopencv_calib3d -lopencv_objdetect
                         wiringPi.o piHiPri.o -L/usr/lib
        CPPFLAGS = -O3 -I/usr/include/opencv -I/usr/include/opencv2
        all:target01

        make_piHiPri_objの内容----------------------------------------------------
        gcc -c piHiPri.c -o piHiPri.o

        make_wiringPiの内容-------------------------------------------------------
        gcc -c wiringPi.c -o wiringPi.o


# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

#define WINNAME "TARGET"                                                                        // window name
#define Point_f                 "Point_data2.txt"
#define Hi_Score_f              "hi_score/hi_score.dat"
------------------------------------------------------------------------------
------------------------------------------------------------------------------
-----2014.5 以下を追加-------------------------------------------------------
------------------------------------------------------------------------------
------------------------------------------------------------------------------
構成
 ・マイコン :RaspberryPi 512K + picマイコン + 少しの回路
 ・カメラ    :広角USBカメラ BSW20KM11-BK
 ・バッテリー:ANKER Astro M3 モバイルバッテリー 13000mAh 
 ・ケース  :DVDケース(100円ショップ)
 ・レーザー光:銃側に取り付けるレーザー光(ポインター)
 ・その他  :LED,ボタンスイッチ等

------------------------------------------------------------------------------
RsspberryPiの主なインストールプログラム
  apache2  
  cmake    
  cpp      
  g++      
  gcc      
  git      
  git-core 
  i2c-tools
  m4       
  make     
  nano     
  perl     
  php5     
  python   
  sendmail 
  ssh      
  vlc      

------------------------------------------------------------------------------
ファイル構成
------------------------------------------------------------------------------
/public_html/index.html                        // webをトップページを指す(target/hp02.php)
/public_html/target/hp02.php                   // main program
/public_html/target/hp02.js
/public_html/target/set_date.php
/public_html/target/set_date.js
/public_html/target/set_date.cgi
/public_html/target/put_date.cgi
/public_html/target/OUT_Circle_img.jpg
/public_html/target/f_write.cgi
/public_html/ramdisk/ip_adds                   // 接続しているip-addressがセットされる
/public_html/ramdisk/w_sign                    // ビーム光線(的)のデータがセットされる
/public_html/ramdisk/OUT_Circle_img.jpg        // カメラでとらえた的の画像がセットされる
------------------------------------------------------------------------------
/ramdisk/ssid                                  // wlan0(無線LAN)の情報をセット
/ramdisk/job_chk.txt                           // 実行中jobをチェックするためのワークファイル
/ramdisk/ssid_log                              // logファイル
------------------------------------------------------------------------------
/home/kaiya/pi_camera/raspusb/target01.cpp     // mainファイル(ソース)
/home/kaiya/pi_camera/raspusb/target01         // mainファイル(実行)
/home/kaiya/pi_camera/raspusb/piHiPri.c
/home/kaiya/pi_camera/raspusb/piHiPri.o
/home/kaiya/pi_camera/raspusb/pi_gpio.h
/home/kaiya/pi_camera/raspusb/wiringPi.c
/home/kaiya/pi_camera/raspusb/wiringPi.h
/home/kaiya/pi_camera/raspusb/wiringPi.o
/home/kaiya/pi_camera/raspusb/make_piHiPri_obj  // obj作成用バッチ
/home/kaiya/pi_camera/raspusb/make_wiringPi             // obj作成用バッチ
/home/kaiya/pi_camera/raspusb/simpleface.cpp    // 未使用(顔認証)
------------------------------------------------------------------------------
/home/kaiya/pi_camera/raspusb/Point_data2.txt   // 以下が内容
                # #=コメント
                # filename Point_data2.txt
                # カメラが読み込んだデータとのマッチングテーブル
                #
                A 20   # 的の表示残像数(After_Image)
                w 160  # w=320のx中心点 160+-n
                h 117  # H=240のy中心点 120+-n
                # 9〜0 : 中心からの距離で9=>9点で最も内側のサークルの位置
                a 0    # a=10 中心からの距離                           10点を意味する
                9 9    #    9  中心から2番目までの距離  9点を意味する
                8 18
                7 28
                6 37
                5 46
                4 56
                3 65
                2 74
                1 83
                0 92   # 一番外側の円の位置
                X 92   # サークル間間隔x10の値 XYnの値
                b 1    # bright : 明るさをセンスする時の対象カラー 0:青 1:緑 2:赤
                end 9999
------------------------------------------------------------------------------
/home/kaiya/pi_camera/raspusb/init.dat         // 以下が内容(mail関連)
                # file-name : init.dat
                # mail file
                T To: xxxxx@xx.xxxx.ne.jp
                # C Cc: yyyyy@yyyy.ne.jp
                # C Cc: zzzzz@zz.zzzz.ne.jp
                C Cc: aaaa@icloud.com
                # F From: xxxxx@www.shellvalley.0t0.jp
                F From: xxxxx@xx.xxxx.ne.jp
                end
------------------------------------------------------------------------------
/home/kaiya/pi_camera/raspusb/Makefile        // 以下が内容
                CC = gcc -lm -o3
                LDFLAGS = -lopencv_legacy -lopencv_highgui -lopencv_core -lopencv_ml -lopencv_video -lopencv_imgproc -lopencv_calib3d -lopencv_objdetect wiringPi.o piHiPri.o -L/usr/lib
                CPPFLAGS = -O3 -I/usr/include/opencv -I/usr/include/opencv2
                all:target01
------------------------------------------------------------------------------
/home/kaiya/pi_camera/raspusb/target.sh              // 以下が内容
                export DISPLAY=:1.0
                cd /home/kaiya/pi_camera/raspusb/
                ./target01 &
------------------------------------------------------------------------------
/home/kaiya/pi_camera/raspusb/target01.sh            // 以下が内容(デバッグ用)
                export DISPLAY=:1.0
                cd /home/kaiya/pi_camera/raspusb
                ./target01
------------------------------------------------------------------------------
/home/kaiya/pi_camera/raspusb/hi_score/hi_score.dat  // hi-scoreを記録する
        内容(例):82 20140501125513
------------------------------------------------------------------------------
/home/kaiya/pi_camera/raspusb/score/20140501153500_data.txt // scoreを記録する
        内容(例):
                          1   0     0.0
                          2   0     0.0
                          3   0     0.0
                          4   6     6.3
                          5   6     6.3
                          6   6     6.3
                          7   6     6.3
                          8   0     0.0
                          9   0     0.0
                         10   4     4.3
                        AVL   2     2.9
------------------------------------------------------------------------------
/etc/init.d/rc.local の追加内容
                mkdir -p /var/log/ConsoleKit
                mkdir -p /var/log/samba
                mkdir -p /var/log/fsck
                mkdir -p /var/log/apt
                mkdir -p /var/log/ntpstats
                mkdir -p /var/log/apache2
                chown root.ntp /var/log/ntpstats
                chown root.adm /var/log/samba
                # 起動時、自動的にLastlogとwtmp、btmpファイルの空ファイルを作成
                touch /var/log/lastlog
                touch /var/log/wtmp
                touch /var/log/btmp
                chown root.utmp /var/log/lastlog
                chown root.utmp /var/log/wtmp
                chown root.utmp /var/log/btmp
                su -c /ramdisk.sh
                su -c /set_ssid.sh
                su -c /chk_ipadds.sh
                su -c /vnc_camera.sh
                su -c /home/pi/pi_shutdown/shutdown-daemon2.sh &
                # startx
                /etc/init.d/apache2 restart
                su -c /target.sh
------------------------------------------------------------------------------
/home/pi/pi_shutdown/shutdown-daemon2.sh      // 以下が内容
                #!/bin/sh
                GPIO=4      # pin7=(GPIO-04)
                PUSHTIME=4  #
                LED=2       # LED pin3=(GPIO-02)
                echo "$GPIO" > /sys/class/gpio/export
                echo "in" > /sys/class/gpio/gpio$GPIO/direction
                echo "low" > /sys/class/gpio/gpio$GPIO/direction
                echo "$LED" > /sys/class/gpio/export
                echo "out" > /sys/class/gpio/gpio$LED/direction
                echo "1" > /sys/class/gpio/gpio$LED/value
                sleep 1
                echo "0" > /sys/class/gpio/gpio$LED/value
                sleep 1
                echo "1" > /sys/class/gpio/gpio$LED/value
                sleep 1
                echo "0" > /sys/class/gpio/gpio$LED/value
                sleep 1
                echo "1" > /sys/class/gpio/gpio$LED/value
                sleep 1
                echo "0" > /sys/class/gpio/gpio$LED/value
                cnt=0
                while [ $cnt -lt $PUSHTIME ] ; do
                  data=`cat /sys/class/gpio/gpio$GPIO/value`
                  if [ "$data" -eq "1" ] ; then
                    cnt=`expr $cnt + 1`
                  else
                    cnt=0
                  fi
                  sleep 1
                done
                s
                echo "1" > /sys/class/gpio/gpio$LED/value
                shutdown -h now
------------------------------------------------------------------------------
/ramdisk.sh                                     // 以下が内容
                mkdir /ramdisk
                mount -t tmpfs -o size=50m /dev/shm /ramdisk
                chmod 777 /ramdisk
                mkdir /public_html/ramdisk
                mount -t tmpfs -o size=50m /dev/shm /public_html/ramdisk
                chmod 777 /public_html/ramdisk
------------------------------------------------------------------------------
/target.sh                                     // 以下が内容
                export DISPLAY=:1.0
                cd /home/xxxxx/pi_camera/raspusb/
                ./target01 &
------------------------------------------------------------------------------
/set_ssid.sh                                   // 以下が内容
                cd /home/xxxxx/pi_LAN_wireless/c
                ./set_ssid airstation3 kazu-iphone5
------------------------------------------------------------------------------
/vnc_camera.sh                                 // 以下が内容
                su -c  "tightvncserver" root
                # su -c "vncserver :1 geometry 1024x768 -depth 16" root
                su -c "vncserver :1 geometry 1024x500 -depth 16" root
                # su -c "export DISPLAY=:1.0" root
------------------------------------------------------------------------------