自律型ロボット照明 Myra行動に合わせて最適な光を作るロボット照明。Myra:リビングのための知的ロボット照明システム
Myraは、家の中の照明を最適にするために自律的に向きを変えるロボットスポットライトです。 デプスセンサを使って住人が何をしているか(本を読んでいる、寝ている、食事をしている等)を認識し、ライトの向きを変えることで、スイッチをいじらなくても常に最適な明かりが得られるようにします。 2013年12月から、空いた時間で作り始めたプロジェクトです。時間ができ次第、全てオープンソースで公開する予定です。

動いている様子はこちら:
目的 このプロジェクトの動機は単純で、「固定された」照明システムの制約から人の生活を解放することです。
従来の部屋の照明は静的(もしくは、ほんの少し動かせる程度)です。 ・例えば(特にヨーロッパでは)多くの部屋が、全体を暗くして所々に明かりを置く設計になっています。 見た目には良いのですが、じゃあ部屋の真ん中で本を読みたくなったらどうするか? 読めません。 従来の照明では、人の行動(読書など)が特定の場所(読書灯の横など)に縛られてしまうわけです。 ・もう一つの例は、日本のような狭い国によくある、リビングとダイニングを兼ねるような一部屋が複数の役割を持つ場合です。 部屋の使い方に応じて照明を変えられたら合理的ですよね。 食事中はテーブルを照らして他を隠したいけれど、 テレビを見ている時は壁に少し明かりがあればいい、というように。 これも従来の静的な照明システムでは(簡単には)できないので、部屋が多目的になると、人は妥協して、最適でも美しくもない照明で暮らすことになります。
こうした問題は、次のような照明システムがあれば解決できます: (a) 光と影を任意の配置にできる (b) (a)を、ユーザの操作をほとんど必要とせず(できれば完全に自律的に)行える
これが、住人の行動を認識して自分で配置を決めるロボットスポットライト群「Myra」を作った発想です。
プロトタイプ
Myraシステムは3つの要素からなります: (1) Myra Light:LEDの付いたロボットアーム。これを部屋の各所に配置し、中央のPCから制御します。 (2) RGBDセンサ(Microsoft KinectやAsus Xtionなど):住人がどこにいて何をしているかをPCが「見る」ためのものです。 (3) PC:センサの値を解析してユーザの行動を分類し、部屋をどう照らすかを決め、各Myra Lightに指令を送ります。

Myraシステムの構成要素。Myra Light群(左)とRGBDセンサ(右)
(1) Myra Lightを作る ○ハードウェア ハードは非常にシンプルです。(回路図などはそのうちどこかにアップします) Arduinoで制御する無線のロボットアームに、高出力LEDを付けただけのものです。 LEDにはレンズを装着していて、15°ぐらいのかなり強い光の束が出ます。

カーテンレールに付けたMyra Light
部品表(Myra Light 1台分):
- GWSサーボ S03T $10×2 = $20
- サーボブラケット(AGBL-S03T) $17×2 = $34
- 3Wハイパワー LED(OSM5XME3C1Sなど) $2
- LEDホルダ+レンズ $1
- 単体で動くArduinoの部品一式 約$5
- 315MHz受信機 $3
1台あたり$60以下で作れるはずです。
僕はベニヤ板で作った取付具で、全てのライトをカーテンレールに固定しています。
PCから無線でライトを制御するために、315MHzのトランシーバも必要です。
○ソフトウェア:
Myra Lightに載せるソフトは非常に単純なArduinoスケッチです。
VirtualWire.hで315MHz受信機から向き(θ,φ)と強度(k)を受け取り、それに応じてサーボの向き(とLEDの明るさ)を設定するだけです。
(2) RGBDセンサを設置する 市販のRGBDセンサなら何でも構いません。 僕は外部電源が要らず扱いやすいのでXtion Pro Liveを使いました。
(3) 制御PCを作る 知的な判断は全て、センサから入力を読み、Myra Lightに指令を送る中央PCで行われます。
現在のシステムはJavaで書かれていて、RGBDセンサのフィードの処理にはOpenNIとNiTEを使っています。 可視化にはJMonkeyEngineを使いました。
下の図がMyraシステムの制御パイプラインです:

Myraの制御パイプライン
各ステップの詳細には踏み込みませんが(別の記事で書きます)、やっていることは以下の通りです。
-
普通に生活する。Myraはユーザの操作を必要としません。
-
RGBDセンサが60Hzで部屋の点群を取得する。
-
MyraがNiTEを使って点群から人を抽出する。NiTEは人と、その特徴点(頭、肩、手など)を自動的にタグ付けしてくれます。
-
ここが一番大変なところです。Myraはまず各人の状態を5つの行動に分類します:読書、テレビ、立っている、歩いている、寝ている。 次に、その人の行動と姿勢に応じて「照明ターゲット」を設定します。 例えば「読書」なら、頭に一番近い方の腕にターゲットを置きます。 →こうすることで、Myraは本に影が落ちないよう光を調整し続けられます。 「歩いている」なら、複数のターゲットを設定します。予測した目的地に一つ、そこまでの経路上の特徴点にいくつか。 →これは、映画を見ている途中でトイレに行きたくなった時や、夜中に起きて水を飲みに行く時などに便利です。他の人を邪魔することなくMyraが自動的にドアまでの道を照らしてくれるので、電気のスイッチを探す必要がありません。
-
照明ターゲットが決まったら、Myraはどのロボットライトがどのターゲットを照らすかを割り当てます。上の動画では、僕が持っている本を照らすのに最適なライトをMyraが選んでいます。
-
最後に、各ライトの向きが無線で各ロボットライトに送られます。
1〜6を毎秒3回ほど繰り返しています。
(4) キャリブレーション
システムを最初に設置した時点では、Myraは各ライトがセンサに対してどこにあるかを知りません。 センサの座標系の特定の位置を照らすには(θ,φ)をいくつにすればいいかを知る必要があるので、これは必須の情報です。

自分でキャリブレーションするMyra
ここでは詳細に触れませんが、完全自動のキャリブレーションシステムを作りました(動画の通りです)。仕組みは別の記事で説明します。 大まかには、ライトをランダムな方向に向けて、光の中心がどこに来るかを見ます。 そして焼きなまし法で、ライトの向きの最も当てはまりの良い推定を求めます。
で、何ができるの? これまでにMyraにやらせてみたことをいくつか:
・リビングの用途ごとの「スキン」を自動生成する

照明だけで、同じ部屋がまったく違って見える。
・注目点の追跡:どんな姿勢をしていても、本に必ず光が当たっているようにする

どんなに変な姿勢が好きでも、Myraは付いてくる。
・行き先までの「光の道」を作り、いつでも安全にストレスなくたどり着けるようにする

Myraがあれば暗闇に取り残されない。
・寝てしまったら自動的に消える
・対象の顔にだけ光を当てて起こす「狙い撃ち目覚まし時計」。他の人を起こさずに済みます。
最後に Myraはまだまだ開発中のプロジェクトです。 ここで挙げた使い方が、自律ロボット照明群という新しい概念の可能性を使い切っているとは思っていません。 時間ができ次第、回路図もコードも全てオープンソースで公開します。 ご意見・ご提案があれば、ぜひお願いします。 読んでいただきありがとうございました。