ミライセンシの舞台裏 - カードリーダー編 -

こんにちは、インタラクションディベロップメントグループのtsubokuraです。

前回の「ミライセンシの舞台裏 – 概要・設営編 –」では、ミライセンシの紹介を致しましたが、今回はその中で使われているカードリーダーにフォーカスを当ててご紹介したいと思います。

■カードリーダー

こちらが現地においてあるカードリーダー筺体

読み込み面にカードを置くとカードの種類が読み取られ、対応する色に天板のマークが光ります。

天板のマークにはフルカラーLEDを使用していますので、どんな色でも表示できます。
今回はカードの種類もそれほど多くなかったので、赤青緑水黄の5色のみ使用しました。

スタッフの操作するPCにはこんな感じの読み取り画面が表示されていて、プレイヤー3人分のカード情報が自動的に登録されていきます。

全員分のカード読み取りが完了して、開始ボタンをクリックすると魔法陣が現れてゲームがスタートします。

■カード認識方法

カードリーダーを作るとなった時、まず考えたのはどのように認識させるかという点でした。
カード認識といっても方法は沢山あります。それぞれの長所・短所を挙げてみました。(個人的な見解です)

  • RFIDタグをカードに埋め込んでRFIDリーダーで読み取る(SuicaやFeliCa、Edy等と同じ方法
    [長所]
    • 非接触で読み取れる。
    • 複数枚重ねても読み取れる。
    • 認識が早い。
    [短所]
    • 全てのカードにIDを書き込む作業が必要になる。
    • カードが高価で量産に向かない(単価100~300円程度)
  • カードにバーコードを印刷してバーコードリーダーで読み取る(カードダス等と同じ方法)
    [長所]
    • 認識が早い。
    • 安価に量産可能。
    • 実装も比較的容易。
    [短所]
    • 今の時代にバーコードって・・・なにそれカッコ悪い!「ミライ」感が無い!
  • カードにARマーカーを印刷してカメラで読み取る(AR技術を応用)
    [長所]
    • 安価に量産可能。
    [短所]
    • 「The・ARマーカー」という感じのデザインになってしまう。
    • カード種類が増えると誤認識確率が上がる。
    • 誤認識を減らすためにはマーカーを大きく印刷する必要があり、他のデザインが入れられない。

・・・と、有名どころで思いつくのはこのくらいでしょうか。
色々考えてみましたが、RFIDタグを使用するものはカードにお金がかかりすぎてしまい、バーコードやARマーカーを使うものはカード上に大きくバーコードやマーカーを印刷する事になるのでデザインが犠牲になってしまいます。

既存の技術を使っても色々と不自由が出てきてしまい、ちょうど良いカード認識方法がありません・・・。

・・・という事で、「無いものは作ってしまえ」という結論に至り、今回はAR技術を応用した独自のカード認識システムを設計しました。

上の画像を見ただけでわかる人もいるかもしれませんが、

  1. Webカメラでカードを撮影
  2. openCVでカードの矩形を認識
  3. カードの角から相対的に割り振った5つの位置からRGBの色を読み取る(左上は角度を求める為に黒で固定)
  4. RGBをそれぞれ[0][1][2]として5桁の3進数として扱って10進数を計算
  5. カード一覧表からその番号に対応したカードとして認識させる

と、この様にカードの種類を識別させています。
たとえば・・・

[赤][緑][青][赤][緑]の場合
[0][1][2][0][1]となるので10進数表記をすると
81*[0] + 27*[1] + 9*[2] + 3*[0] + 1*[1] = 46 となり、46番のカードとして認識される。

といった具合です。

この仕組みを元にカードデザインの仕様書を作成して、デザイナーさんに渡すと以下の様なカードに仕上がりました。

素敵ですねー。

画像認識は処理が重いので、実際のプログラムはC++ベースで動くGPUによる高速な処理が得意な「openFrameworks」を使用して開発しました。
openCVと呼ばれる画像認識ライブラリのアドオンを使用しています。

■カードリーダー筺体

カードリーダーはカードを乗せると種類を識別して天板のLEDが光る、とご紹介致しましたが、そのあたりの仕組みも弊社で開発致しました。

これが社内開発時に使っていたモックです。そのへんに転がっていたPCのダンボールを拝借しました(笑)
中には、

  • LEDモジュール
  • Webカメラ
  • 照明
  • スピーカー

が、内蔵されています。
照明は、暗いと中からWebカメラでカードが認識出来ないので入れています。
スピーカーを入れる事でカード認識時にピローンと中から音が出ます。

・LEDモジュール
さて、LEDモジュールについてですが、Arduino UNOを使用して5つのフルカラーLEDを制御しています。
openFrameworksは標準でArduinoを扱うクラスが用意されていますのでとても相性が良いです。
Arduinoのマイコンにプログラムを書き込むとArduinoはスタンドアローンで動作してくれるのですが、今回はWebカメラで読み込んだカードの種類によってArduinoにつながれたフルカラーLEDを制御するので、firmataライブラリというものを使用しました。これを入れておけばopenFrameworksからリアルタイムにArduinoのピンを制御できます。

まずはブレッドボードと呼ばれれる、ハンダ付け不要なテスト用基盤の上で組立てます。

カードの種類によって色分け表示!(色がちょっとわかりづらいですが・・・)

機能が完成したら、ブレットボード上で作った配線をユニバーサル基板上にハンダ付けしていき、Arduinoに直接重ねられる「シールド」と呼ばれる基板を作ります。

これが今回作成した「フルカラーLEDシールド」
これをArduinoに・・・

サクッ

LEDモジュール完成!
イイ感じにシンプルに仕上がりました。

出来上がったLEDモジュールはカードリーダー筺体の天板裏に設置。

バッチリですね。
本番用の筺体はガワだけ外部へ発注してその中に機材を設置しました。

・・・と、このようにして独自の認識方式のカードリーダーを製作しました。
体験者はあまり意識はしない部分かもしれませんが、ミライセンシのリアル謎解き→最終バトルをシームレスに繋いで体験の没入感を出す、重要な役割を担っている部分だと思います。

長くなってしまいましたが今回はここまでにしておきたいと思います。
最後までご覧いただきありがとうございました。


related article