AR(Augmented Reality:拡張現実感)という言葉が、だいぶメジャーになってきている。スマートフォンや携帯型ゲーム機のアプリケーションなどで実際に体験した人も多いことだろう。カメラとモニタ経由ではあるものの、見慣れた光景とさまざまな情報が重なって見えるさまは、「未来のコンピュータ」感があってちょっとわくわくする。

しかし、このARを実現するプログラムを自分で作ってみた、という人は少ないのではないだろうか。筆者も興味はあったものの、AR自体のプログラムもさることながらカメラ制御や画面表示などいろいろなプログラムを作る必要があっていかにも大変そうな気配を感じたため手が出せなかった。

本書「ARプログラミング -Processingでつくる拡張現実感のレシピ-」では、プロトタイプを簡単、迅速に作ることに主眼を置かれて開発されたオープンソースのプログラミング言語「Processing」に、マーカーベースのARのライブラリとして有名な「ARToolKit」のProcessing移植版である「NyAR4psg」を組み合わせてARプログラミングを行っていく。さらにArduinoやKinectといった外部のハードウェアを利用してさまざまな方法で現実と連動していくことができるところまで解説しているのが特徴だ。

また、タイトルの通りのARプログラミングレシピ本として実用的であるだけでなく、冒頭の3章を割いてARの歴史や基礎についての説明も丁寧にされているので、ARはよくわからないけど興味があるという人にもお勧したい。

本書「ARプログラミング -Processingでつくる拡張現実感のレシピ-」の表紙

図による説明も多いので、Arduinoは初めてという人にもやさしいだろう

サンプルプログラムを動作させてみる

早速本書を読みながらなにかARのプログラムを作ってみようと、まずはProcessingのインストールから始めてサンプルプログラムを動作させるまで行ってみた。準備段階でちょっとつまづいたもののそれほど苦労せず動作させることができた。本書の著者が準備している読者サポートページにダウンロードする必要があるものへのリンクやQ&Aがあるので、一読してからダウンロード、インストールを始めるとよいだろう(筆者もQ&Aにある「ライブラリ名を冠したフォルダ」でつまづいたのだった)。

他につまづいたことと言えば、NyAR4psgのダウンロード時に何をダウンロードしていいのかわからなくなったことと、マーカーを印刷して切り出して厚紙に貼ったらうまく認識されなかったことくらいだ。前者はダウンロードページを下まで見ていくと「nyar4psg NyARToolkit for processing」の各バージョンへのリンクがあるし、後者は巻末の付録1の説明に注意書きがあるように、黒縁の周りにさらに白い枠を付けると認識されるようになった。

切り出しに失敗したマーカー。これだといくらカメラの前に持っていってもうまく認識されない

白い枠を付け、さらに持ち手も付けてカメラの前に出しやすいようにしてみた

拡大して印刷し、壁に貼ったマーカー

オリジナルARソフトを実際に作成

さて、サンプルプログラムも動いたところで、本書を参考にオリジナルのARソフトウェアを作ってみることにした。単にパソコンとカメラだけで何かするのではおもしろくないので、Arduinoを使って現実世界を変化させるものを作ってみたいと考え、自宅にあるLED照明をコントロールしてみることにした。やりたいことは「壁に貼ってあるマーカーをスイッチとして画面上で右クリックすると照明のON/OFFや色、明るさを変更でき、LED照明が変化するARを作る」だ。

まずやったのは、LED照明のリモコンが発信する信号の解析だ。リモコンの信号は38KHzの搬送波によって変調されているので、赤外線リモコン受信モジュールを買ってきてArduinoにつないでみた。赤外線リモコン受信モジュールと聞くとすごそうな名前だが、2個100円で売っている簡単な部品だ。3つある端子を電源、GND、デジタル入出力端子につなげばハードウェアは完成なので、あとはスケッチを作ればよいのだが今回はGarretLabさんの「赤外線リモコンコード解析(NECフォーマット)」という記事のスケッチを使わせていただいた

このスケッチによって、自宅のリモコンが発信する信号のコードとデータがわかった。あとはこのコードとデータを適宜出力するスケッチを作って、それをProcessing側から操作すれば完成だ(と、書くだけなら簡単である)。

ArdunoのスケッチのようにProcessingからピンを操作するなら、ArduinoにStandardFirmataというスケッチを書き込み、ProcessingでFirmataというライブラリを使うと簡単にできる。インターネット上のFirmataの作例もそのようなものばかりだった。確かに簡単なのだが、この方法だとArduinoのふるまいをすべてProcessingで記述する必要があり、38KHzの変調の制御までは難しいと思われたので、今回は赤外線送信したいデータをProcessingからArduinoに送信し、そのデータをArduinoから赤外線で発信することにした。

arduino.jpg Arduino UNOと赤外線LED。パルスでしか光らせないので電流制限抵抗は33Ωにした。以前秋月電子で買ってあったOSIR5113Aという赤外線LEDを使ったが、今ならもっと高輝度のものが売られているのでそれを利用するといいだろう。

Arduino側のスケッチはリモコンコード解析と同じく、GarretLabさんの「FlashとArduinoで赤外線リモコン」という記事のスケッチを使わせていただいた

この記事ではPC側はFlashからデータを送信しているが、その部分をProcessingで書いたARのプログラム中からデータ送信しようという考えだ。

さて、やっと準備もできたのでProcessing側のスケッチを書いてみた。ほとんど本書に書いてあることで実現できたが、マーカー上にボタンの文字を上書きするところで文字表示がよくわからず、文字を画像として用意してテクスチャとして貼るようにした。今から考えると、本書102ページにあるAR距離計の文字表示方法を使えばよかったのだと思う。

Firmataで通信するところで悩んだが、それ以外はそれほど苦労せず作ることができた。結果は写真だとわかりにくいが、ご覧いただきたい。参考になるかどうかわからないが、スケッチもダウンロードできるようにしてもらった

画面ではマーカー上に薄い板を書いてマーカーを見えなくし、その上にテクスチャとして文字(の画像)を貼り付けている。通常は白く、マウスカーソルが乗っていると黄色くなるようにした

スイッチ(マーカー)を右クリックするとポップアップメニューが出てきて、これを選択するとLED照明を制御する信号がArduino経由で発信される

以上のように、筆者のようなプログラミングを本業としていない人間でもそこそこのARアプリケーションを簡単に作ることができたのは、本書のわかりやすいレシピのおかげだと思う。Processingはプログラミング言語の中でもわかりやすい方だし、ARに興味がある人には本書をぜひお勧めしたい。

「ARプログラミング Processingでつくる拡張現実感のレシピ」

発行:オーム社
発売:2012年3月17日
著者:科学技術振興機構 ERATO五十嵐デザインインタフェースプロジェクト 橋本直
形・ページ:B5・186ページ
定価:2,940円
出版社から:本書は、Processingを使ってAR(拡張現実感)を作るためのプログラミング・レシピです。現実にCGを重ねるだけでなく、その一歩先である「実世界とフィジカルにつながるAR」を目指しました。本書を読めば、センサで計測した情報をARで提示したり、ARを介して家電をコントロールしたりすることができるようになります。
そのようなARを作るためのテクニックとして、ARToolKit、Arduino、Twitter、Kinect、AR.Droneなどさまざまな道具を組み合わせる方法を丁寧に解説しています。また、それらを組み合わせた応用作品とその作り方も紹介しています。ARにまつわる面白い話題をたくさん詰め込んだコラムにも注目です。