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 ------------------------------------------------------------------------------