はむすたーの巣

ちょっとかじって見たこととか興味持ったこととか記事というよりメモな感じにまとめます。たまに消します。きっと。

やってたことその3 戦車コントローラーみたいなやつ

f:id:Kenoji:20170726201031j:plain

なんだいそれは

  • 実際の操縦艇に近いサイズの自作コントローラーを操作して戦車を動かせるコンテンツ。
  • Android用のアプリも作成しておりCardBoardを用いて車長視点で見ることもできる。

どうやってつくったんだい

  • 操縦桿の棒の根本の部分の回転をスライドボリュームで取得
  • Arduinoを用いて片方128段階で読み取り、シリアル通信でUnityに送信
  • Unityは受け取った値をもとに戦車を動かす
  • Android用の車長視点のCardBoard対応アプリとは、UNETで通信。

どんなかんじなんだい

こんなかんじ、たのしい。


戦車コントローラー

やってたことその2 光る天板

何だいソレ

f:id:Kenoji:20170726191219j:plain

ノートパソコン(ThinkpadX220)の天板にフルカラーシリアルLEDをとりつけ、ノートパソコン上からArduino経由で制御できるようにしたものですね

どうやったんだい

その1

f:id:Kenoji:20170726191211j:plain

PCとArduinoの間でシリアル通信を行い、PCから送られた情報をもとにws2812b(neopixel)を制御するプログラムをArduinoに書き込む。このときLEDを十分に駆動できるだけの電流が取れるかも確認。

その2

f:id:Kenoji:20170726191216j:plain

ノートパソコンのmini-pcieポートにMini-pcie to USBの変換ボードを差し込み、そのUSBポートにArduino(pro micro)を接続、今回はLEDを153個利用するので、電流不足を補うため別のUSBポート (出力 1A)からも電源を引いてくる。この時、ThinkpadはMini-pcieに接続されるデバイスホワイトリスト形式で監視しているため、それを回避するModBiosの導入も同時に行う。

その3

f:id:Kenoji:20170726191214j:plain

天板にws2812b(neopixel)のLEDテープを貼り付け、配線する。

かんせい!

 

どう使うんだい

使い道としては、液晶パネル側の補助としてとか、天板だからこそみたいなモノとか…。一例として

デスクトップの映像をそのまま持ってくる


デスクトップキャプチャからの天板表示

キャプる部分はProcessingで書きました

ソースコードはこちら(後でgithubにのせたらリンク張ります)

スペクトルアナライザにしてみる


光る天板(すぺあな)

音の処理とかはC#とNaudioでやりました

ソースコードはこちら(後でgithubにのせたらリンク張ります)

ゲームの画面にしてみる


天板で動く迷路

ロジックは全部Unity上で走ってて、描画を天板でやってるだけなのでれっきとしたUnity製のゲームですよ

ソースコードはこちら(後でgithubにのせたらリンク張ります)

やってたことその1 けのじばくだん

 


けのじばくだん

(大体インターン用に適当に書いたドキュメントから引っ張ってきてますよ)

なんだっけそれ

  • VRHMDをかぶった解除者と、解除の手助けをするオペレーターの二人で協力して実ハードウェアの爆弾(を模したもの)を解除するコンテンツ
  • 解除者とオペレーターはそれぞれしか持ち得ない情報を持っており、協力しないと絶対に解除できない(例:解除者はHMD越しでは色が見えないが、どの色からピンを引き抜けばいいか知っている。オペレーターはどこのピンがどの色かを知っている)
  • 解除者はHMD越しに両眼カメラで前方を見ることができるが、解像度が低く色も白黒になって居るため視界が悪く、手探りで解除しなければならない。
  • 下記記事に掲載されました
    1. http://panora.tokyo/3977/
    2. http://forest.watch.impress.co.jp/docs/serial/oculusclub/745772.html
    3. https://www.famitsu.com/news/201602/22099910.html

どうやったん

f:id:Kenoji:20170726183009j:plain

ハードウェア

  • 爆弾側

 爆弾側は、Arduinoとmbedの2台のマイコンを用いて制御、そのうちArduinoは入力処理、mbedは出力処理を担当、2台に分けたのはより爆弾らしい風体にするためでもある。

入力に用いたギミックは、ブレッドボード上に配線したピンの引き抜き、タクトスイッチを複数並べ番号を割り振りナンバー入力、トグルスイッチを3つ並べて順に操作、最後にミサイルスイッチの操作である。

出力に用いたギミックは、8連リレーモジュールをON/OFFさせることで時限爆弾にありがちな「カチカチ」という音と振動を発生させる、圧電ブザーを用いて、カウント開始時に「ピピッ」という音を鳴らしたり、解除失敗時に「ビーッビーッ」という警告音を鳴らしたりする、7セグ2連LEDを用いて残り時間を表示するなどである。

 HMD側はOculusRift DK2を用いて、DK2の前面にOvrVisionを取り付けて解除者の視界として利用した。

ソフトウェア

 ソフトウェアは、Unityを使用し、UnityとArduino、mbed間はシリアル通信でやり取りを行わせた。

 爆弾解除のステート管理は、Arduinoが行っており、UnityはArduinoから送られてきたステート番号に沿って、VR空間内での情報表示等を行う。

 また、制限時間の管理はUnity上で行っており、現在の残り時間の数値をmbed上に送信することで、mbedはリレーのカチカチというスイッチのタイミングを変化させ、また、残り時間を7セグLEDに表示させる。

何が復活しようじゃ

復活しようとか言ってから記事の一つもかいてないやんけ~

復活しよう

前にアドベントカレンダーで一回使ってみてから放置してたし今更見てる人もいないだろうしメモにしようと思います。

自分のやった低レベルなお勉強とか。案外基礎過ぎて書かれてなくて、基礎も知らずに触った自分が詰まったとことか。

同レベルな方には有用かもしれないし、上の方(ほとんどそうだろうけど)は初心者の詰まりそうなとことかわかるかもだし。あと文才ほしいし。

 

てことで書きます

プログラム初心者でも(Oculus Riftの)ミニゲームをつくりたかった。

実は記事を書くこと自体初めてです。

はじめまして、Oculus Rift Advent Calender 2013の28日目担当の@OokenojioOです、よろしくお願いします。

・はじめに

プログラムものっそい初心者です、一応学校でCを習っていますが多分参考書を買って1週間勉強したのと大して変わらない程度です。

実を言うとunity使うまで「オブジェクト指向」なんて言葉あぁ名前だけ知ってるよ程度でした(今も実際はまともに理解できてない)。

それでも一応それっぽいものにはなりました、なったということにしてください、お願いします。

 

・何をしたか

他の方々のような素晴らしい研究や技術を何一つ持ち合わせていなかったので、そんな自分でもOculus Riftのゲームが作れるだろうか、と思いOculus Rift用のゲーム(のような物)を作ることにしました。

 

 

・つくったもの

前方から次々と飛んでくる矢を首を傾けて避けていくゲーム(?)を作ってみました。

f:id:Kenoji:20131227012217p:plain

↑こんなんです

 

 

・いったい何がしたかったのか

Oculus Riftは首の傾きが取れるので、それでマトリックスみたいにのけぞって銃弾とか避けられたら楽しいだろうなぁ。

と考えていたのですが、「スローモーションにしたらついでにカクカクに!」とか「弾遅くしたら届く前に落ちちゃう!」とかやっているうちにマトリックスの面影も無い避けゲーになってしまいました。

個人的には結構気に入ってます。

 

 

・作ってみて

完成度はともかく、初心者でもunityさんが居ればそれっぽいものが作れてしまうということに驚きでした。(特にOculus用にするのはprefab投げるだけなので本当に簡単でした)

また、自分に向かって矢が飛んでくるというのは、なかなかにびっくりします、ついでに画面越しに比べてかなり速度を感じました。

 

・まとめ

ほぼ初めての言語(C#)で、ほぼ初めての環境(unity)で、ほぼ初めてのデバイス(Oculus)での開発は、他の人が普通躓かないであろう場所(クラスとはなんぞや?パブリック?スタティック? ...etc)で躓きまくって、そのたびにgoogle先生にお世話になるという、とても効率の悪く、無駄の多いものとなりましたが、壁を乗り越えたときの達成感や、完成したときの喜びはその分とても大きかったです。

また、自らの技量の無さを痛感できたので、これからも開発を行って技術を付けていきたいです。

今回作ったゲームもどきにも満足していないので、これからちまちまと開発を続けて、完成度を上げたいと思っています。

 

 

次回の29日は@waffle_makerさんです、よろしくおねがいします!