デジタル射的ゲームをつくる
かなり前,大学の入学時に部活を見学して,射撃部を見た.小径の鉛弾が,狙った的に飛んでいくのは気持ちがよさそうだった.
まあ銃器を扱う競技は中途半端な気持ちではできないし部活動には結構お金がかかるということもあり,
また大学時代は放置自転車をひたすら直すサークルをやっていたもので,その後はあまり縁がなかった.
例外が,大学祭のときに射撃部が持ち込んだ,弾が飛ばず,電気的に的の点数を計算して表示する機材だった.
あ,これ,面白いじゃん.とは思ったものの,またしばらく縁がなくなった.
その時持ち込まれた機材はおそらくビームライフル競技のもので
(なお,「競技」まで入れて検索しないと猛烈なガンダムの検索妨害にあう)
おおむね個人が所有するようなものではないことが分かった.
また,ビームピストル競技というものもあるようであった.
競技システムが古くなって,デジタルライフル系に移行しているらしい.
(そしてそれも古くなってきているらしい)
さて,なんかまー急に射的でもやってみたくなったので,作ることにしたわけなのです.
BB弾の出るエアガンで的でも撃ってろという意見にはこう反論させていただく.
「だって,弾の弾道が変わるような機材で射的したくないじゃん」
電子工作で射的というと,拡散光の出る射撃装置で, 光センサを狙う「的当て」が思い浮かぶが,
どちらかというと点数の出るビームライフル的な競技がしたいので,却下.
調査は当初あんまりしなかったが,考えられる点数の出るデジタル射的
(以下,デジタル射撃というと本式の競技用システムと被るので,若干簡易化されたものという意味を込めて射的とする)
にはいくつかのパターンがあることは想像できていた.
1-1. 発射器からビームを出し,センサのついた的で受けるもの.
アイデア的にはそのまんまだが,どうやって的にセンサを配置するかが問題となる.
(むしろアナログ式のビームライフルはこの問題をどうこなしていたのかが気になる)
ずらっとフォトセンサを密集配置するのはマゾすぎる.
1-2.発射器からビームを出し,的に当て,それをカメラで読む.
順当.ただし,画像処理をしなければならないのでプログラムの腕がいるとか,
カメラが意外と遅いので(一般的なUSB2.0のwebカメラはVGA画質で30fps),
発光の見落としが発生したり,発光時間を稼ぐと処理すべき光点が移動して点じゃなくなったりする懸念がある.
また,画質というかドット数を上げるとフレームレートがどんどん落ちていくので解像度に問題が出るかもしれない.
2.カメラにガンカメラを搭載し,トリガ時の画像をとる.
射撃側がセンサという逆の構成.昔wiiのリモコンがそれやっていた.的は最悪紙ペラでもよい.
的がはっきり見える望遠に振ったカメラが必要な点,画像処理のノウハウはやっぱりいる.
ノウハウがない場合,記録装置としてカメラを使い,採点は手動という手もないではない.
どれも一長一短あり,調査したところ,海外で有志が開発しているものは1-2に該当していた.
また,次世代デジタル射撃の装置のコンペで負けたほうは2の形式を採用していたようだ.
まあどうしようか考えていたとき,さっき出てきたwiiリモコンのことを思い出した.
あのリモコン搭載のカメラ,4つまでの赤外線見てて,100fps出るといわれ,なにより
「見えた赤外線の画像ではなく座標値をよこしてくれる」のではなかったか.
ということで,1-2-bとでもいうべき構成とすることになった.
的の後ろにwiiリモコンを置き,紙から透けて見える赤外線をセンサで検出すれば,
的のサイズのセンサ問題はクリアできる.
wiiリモコンは一時期パソコンにつないでなんやかんやするデバイスとしてもてはやされ(もてあそばれ?)
たので,改造事例もそこそこあり,部品の玉数も豊富で安価と,まあおおむね文句はない.
唯一あるとすれば,むかしPCプレゼンマウスにしようといじったときにうまくいかなかった経験があるところ.
主要構成は
射撃ユニット:エアガンをベースに,できればいろんな機種で使えるよう,銃口に差し込む式のものがいいな.
射撃の意思を取得する必要がある.検出したら,赤外レーザを一瞬発射する.
マイコンがいる.
的ユニット:wiiリモコン.なんとかしてプログラムで使う.
射撃ユニットとは通信しないので,「今撃ちましたよー」などのお話ができない.
常に見張っている必要がある.
要プログラム.
処理系:要プログラム.
ユーザインタフェース,得点の計算,記録.
以下では各ユニットごとに見ていく.
射撃ユニット.
射撃意思は,できるだけエアガンに手を加えないよう,発射時のバレル圧力変化をセンサで拾うことにした.
パイプをバレルに突っ込んで,センサでアナログ的な変化を追う.
実際に10歳以上向けエアガンで測定すると以下のようになる.
バレルや突っ込んだパイプの容積もあるのでもっとなだらかなカーブになるのではないかと予想していたが,
+1気圧まで測れるセンサの上限を一瞬振り切っている.
立ち上がりも早く,文句なく意思を確認できるというか,
これむしろマイコンのアナログ機能使わずに,スイッチ入力の信号として食わせても動くんじゃないかという.
空気が抜けるところがないため,元の圧に戻るのに時間がかかる(100ms以下)ので,
射撃が重複しないよう発射間隔を置く必要がある.
あとたぶん,18歳以上用のエアガンだともっと高圧に対応できるセンサに変えないと壊れると思う.
ハードウェアとしては,当初ボアサイター(銃口に突っ込んで可視レーザを照射しサイト調節をする器具)
を流用しようとしていたが,いじる余地,とくに圧力をとるところが難しいので,自分で作ることに,
旋盤でさくっと作る手もあるのだけれど,ちょっと最近工作機械と戯れる時間が確保できそうにないため,
他の手を考えた.
右がバレルに突っ込む6mmのパイプ,これをユニオンティー(3方にタッチチューブをつなげる部品)と接続し,
空気配管を下方へ向ける.
6mmパイプにはレーザモジュールは入らないので,異径ジョイントを使って太いパイプを差し,その中にレーザを入れてある.
残念ながら旋盤を使わなかったため,複数パーツに分かれた結果としてガタが出て傾くようになってしまった.
そのため,14mm逆ねじでエアガンと接続するサイレンサーにこれらを格納することで保持してもらうようにした.
マイコンのプログラムは センサ監視→射撃意思確認→(待機1)→ビーム照射→待機2 が基本の流れ.
カッコしてある待機1は,本式の射撃競技ではトリガを引いてから撃鉄が落ちて弾が出るまでの時間を模擬して
2桁msのウェイトを入れることになっているようであるため.
今回はバレル圧力が変化してから(≒弾が飛んでから)ビームを出しているためウェイトは入れなかったが,
将来的に入れる余地は残してある.
待機2はバレル圧力下がり待ち.
wiiリモコン:
接続がうまくいかなくていきなり挫折しかけた.どうやら,wiiリモコンplusは向いていないようで,
古いほうのリモコンを使った.
プログラムはweb上でwiiリモコン取り扱いの実績のあったものの中からC#を選んだ.
C#も過去に3か月取り組んで何にもならなかった経験があったためかなりいやだったのだが,
今回わからねーいいながら手順を追って説明してあるのを追っかけて行ったら,座標の取得ができた.
処理系その他:
wiiリモコンに関わる部分をC#で作ってしまった以上,ここもC#で作る必要がある(たぶん).
幸いにして,わからねーいいながらリモコンまわりのプログラムをこねているうちに,
おぼろげながらC#が(というより,VisualStudioのフォームアプリの仕組みが)頭に入ってきたので,
順番に必要そうな機能を追加していった.
作ったのは,
・的補正機能
・当たった場所表示 これがないとつまらないので
・ヒット時のサウンド 射撃と同時に発音するのは腕がへぼくてなかなか難しく,ちょっと遅れる.
・残弾数
・今の得点,平均点,積算点 出そうと思えば小数点以下まで出せるが,的とカメラの位置調整がシビアになる
・射撃に要した時間 本式の競技用ソフトにあるのを発見して追加してみた
・印刷
・wiiリモコンのバッテリ状況 まあ,リモコンとのリンク切れると現状ソフト落ちるので,様子見程度
・マウスモード(テスト用) 的の点数の境のチェック用
・テストモード(的調整用)
通常モードでは一度発光を見るとしばらく見ないようにしてあるが(発光時間に余裕を持っているため,
ウェイトを入れないと連続で点が入ってしまう.),テストモードではウェイトを殺してあり,
ビームを連続で出しながら当たった位置を調整しやすいようにしてある.
50msの点灯時間で5-6の光点として記録されるので,処理時間は10ms弱程度と推測される.
的補正機能は,理論上はなくてもよいが,その場合,
微妙な的とカメラのずれを全て的や照準の位置で調整することになるので,
ある程度まで合わせたら,ソフト的に対応してしまおう,というもの.
的の位置に対して作用する補正と,照準と銃口が同軸でないことに起因する,
射撃距離ごとに変化するずれを補正する機能に分かれている.
アプリ画面は以下のようになっている.
ボタンがやたらでかいのはタッチパネル液晶を想定しているため.
印刷ボタンは押すとデータとしてアプリ画面を保存しつつ,ラベルプリンタに印刷を依頼する.
印刷部分は,作るのが手に余りそうだったため,WinShotというキャプチャアプリのショートカットを送信して
そっちに後の処理を丸投げするようになっている.
印刷機はブラザーのQL-800というラベルプリンタで,赤黒2色の印刷ができるのが特徴であり,
以下のようなシールが出てくる(ようにした).
2色ないと当たったところを丸で囲うのに苦労しそうだなーと.
なおモノクロのラベルと比べて単価がかなり高い(倍以上).
的の絵を変更してモノクロで押し切るほうが良かったかもしれないがもう遅い.
一連の動作の試験の様子は以下の通り.
この試験のときはまだ射撃ユニットの固定が甘く,狙ったとこに飛んでる保証はまああんまりなかった.
また,コッキング式の機材だったため,(これはこれで楽しいのだが)子供は操作できないなと反省したりして,
機材をマルイの10歳以上向け電動グロック18に変更した.
フロントキットという,グロックの前方下に取り付け14mm逆ねじを発生させるオプションを付け,
そこにユニットを組み込んだサイレンサーを付けることで取り扱いやすくした.
また当初レーザモジュールのカタログスペックが5Vとなっていたため射撃系回路は5Vで動くようにしていたが,
どうやら3Vでも電流さえ確保できれば動きそうだったため,モバイルバッテリからの給電をやめCR2032に変更した.
レーザモジュールは1mWを発注したはずなのに30mW品が届いてレーザクラスに適合しなくなったので,計算して減光した.
回路基板は次作るときにはコンパクトにしよう.
この状態の欠点は,オープンサイト(照準)がサイレンサーにかぶって前が見えない,という.
ダットサイト買ってきたけど,載せるところがない.
見る人が見たら怒られそうだけれど,とりあえずサイレンサーの上にのせてしまった.
ダットサイトは光点で照準するため見やすいが,乱視があるとダブって見える.
今後の課題は,
・スナイパーライフルでの長距離テスト.照射光量的に距離伸びるとつらくなるのかどうか
・楽しい射的感の演出.特にまっくろ機材は良くないのでスプラトゥーン的な感じにしたい所存.