Oculus Riftを叩いてみた。
閉じる
閉じる

新しい記事を投稿しました。シェアして読者に伝えましょう

×

Oculus Riftを叩いてみた。

2013-12-29 22:04

    はじめに

    新しい物好きのシステムエンジニアで、@waffle_makerと申します。

    本記事は、Oculus Rift Advent Calendar 2013の第29日目の記事となります。

    Oculus Riftに恋をしてしまいまして、Advent Calendarは初挑戦なのですが、残り1席とのことで慌てて飛び込んでみた次第です。
    色々と不慣れなところがあると思いますが、生暖かく見守っていただけたら幸いです。

    やりたいこと

    Oculus Rift自体の説明については、他の方が散々書かれていると思います。
    Oculus Rift向けのコンテンツを遊ぶ際には、現実世界の視界がほぼ無くなるため、NUI(ナチュラル・ユーザ・インターフェイス)と呼ばれる直感的な入力装置と組み合わせることを思い浮かべる方が多いと思います。
    ※例えば、Razer Hydra、Microsoft Kinect、Novint Falcon、Leap Motionや、発売はまだですが、Virtuix Omni、MYO、STEMなど。

    これはこれで面白いのですが、遊んでくれる方の敷居が高くなってしまったり、デモの度に持ち運ぶ機材がどんどん増えてしまうのも考え物です。
    もし、専用機材を必要とせず、Oculus Riftとパソコンのみで色んな操作ができたら面白そうだと思いませんか?

    今回は、Oculus Riftに搭載された加速度センサーを使って、Oculus Riftを叩いたことを検出して見たいと思います。

    なお、発端となったツイートはこの辺り・・・(はい、放置していました。すみません。

    なお、開発環境は、Unity Pro 4.3.1で、言語はC#を使用します。

    センサーの値を取得してみる

    センサーの値はQuaternionのインスタンスとして取得することが出来ます。


    今回はOculus Riftの左右の側面を叩いたことを検出したいため、上記で取得したQuaternionのうちY値に着目します。
    ※Y軸=地面から垂直に延びた柱、Y値=左の頬を叩かれたら正、右の頬を叩かれたら負

    Oculus Riftの左側面を叩いた際にY値を蓄積してCSV出力し、Excelでグラフ化してみました。
    グラフ左側にどんどん新しい値が挿入されていきます。
    さてグラフの内容を見てみると・・・グラフ右から中央にかけてY値が急激に増加し、グラフ中央から左にかけてY値がなだらかになっているように見えます。


    パターンマッチングに挑戦してみる

    センサーから取得したY値(以下、入力値)と、作成したパターンのY値(以下、パターン値)を比較してみたいと思います。

    パターン値は、入力値を参考にしつつ、正弦波を元に前後を均したものを手作りしました。
    グラフにすると以下の様な感じです。


    入力値とパターン値を比較する際には、値の振幅が同じくらいになるよう調整する必要があります。
    パターン値は、Y値が0.0~1.0の範囲に収まるよう作成しましたので、入力値についても以下のように調整してやる必要があります。


    最後に、入力値とパターン値のがどれだけ異なっているかを数値化しスコアとします。
    スコアが予め設定した閾値以上であれば、パターンがマッチしたと判断することにします。

    実際には、以下の様な判定ロジックを適宜追加しながら、何度かパターンを作り直し、トライアル・アンド・エラーしました。
    • 入力値の振幅が小さすぎる場合はダメ
    • 入力値の振幅が大きすぎる場合はダメ
    • パターン値を色んな秒数で作成
    • X値とZ値が大きすぎる場合はダメ

    こちらに、すでに完成した物を用意しました。

    見えてきた課題

    Oculus Riftを叩いた際の入力値は、叩く強さや、スピード、指の触れている時間などで変化するため、パターンマッチングは難しく感じました。
    今回はスコアの閾値を下げることで対応したが、それだけ誤認識も多くなってしまいました。

    パターンマッチングの精度を高めたいと思った場合、パターン値を手作りするのではなくパターン値の登録ツールや、自動テストツールなどの仕組みを用意することになりそうです。

    パターン値のY値を反転して左右の叩き分けを試したところ、誤認識が非常に多かったが上記の対応で改善できる・・・と思いたい。

    首を色んな確度に曲げながら、または首を動かしながらの認識については未知数だが、入力値の傾きを補正するなど対策の余地はある・・・と思いたい。

    今後の展望など

    誤認識が多いとは言え、基礎部分はできたので、認識精度を改善すると共に遊べるコンテンツを増やしていきたいと思います。
    例えば・・・以下のようなコンテンツに応用できそうですが、如何でしょうか?
    • リズムゲーム
    • カメラゲーム
    • ミクミク盗撮

    以上、「Oculus Riftを叩いてみた。」でした。
    ここまで見ていただき、ありがとうございました!

    次回

    次回は @ shigekzishihara さんです。お楽しみに!












    • 前の記事
      これより過去の記事はありません。
    広告
    コメントを書く
    コメントをするには、
    ログインして下さい。