TOIKI

朝の窓の結露をディスプレイに見立て、メッセージを描くロボット

X ↗

冬の寒い朝、結露で曇った窓ガラスをディスプレイに見立て、文字やメッセージを描き出すロボットプロトタイプです。

オープンソースのドローイングロボット(mDrawBot / mSpider)をハックし、ペンの先端にスポンジを取り付けて制作しました。2本の糸で制御されるプロッターが曇った窓ガラスの表面をなぞることで、結露の膜を部分的に拭い去り、透明な筆跡として文字や図形を浮かび上がらせます。

読みにくいけど"Happy Birthday"と書いてあります
読みにくいけど"Happy Birthday"と書いてあります

子供の頃に誰もやる「息で曇った窓へのいたずら書き」という原体験をインターフェースに昇華させました。朝起きると窓にその日の天気予報やメッセージが描かれており、時間が経つと自然に消滅していく、刹那的なアンビエントディスプレイの実験です。

Updates

お絵かきロボット「mDrawBot」で遊んだり窓にメッセージ描いてみたりしてみた

スイッチサイエンスがmDrawBotの販売を開始しましたね。
速攻で入手したので遊び倒してみました。

mDrawBotってなに?

中国のオープンソースプロジェクト「MakeBlock」が提供するお絵かきロボットキットです。

PCから取り込んだ絵を卓上に描画するロボットや、卵に描画するロボットなど、4種類のロボットを作ることができます。

僕が今回遊んだのはmSpider、ホワイトボードにぶら下がってマーカーで絵をかけるロボットです。
国内ではスイッチサイエンスから日本語訳されたキットが買えます。

組み立ててみよう

部品点数結構多いです。

組み立ては数時間かかりますが、アクリルと金属パーツが美しいので楽しく作れます。

完成です。ホワイトボードが小さいのでこういう雑な置き方ですが、会社とかにある大型のホワイトボードならすっきり置けそうです。

左右のステッピングモーターで糸の長さを調整し、三角形のプロッターを平面上で動かすことで、絵を描くという構造です。
またペンの上下(描く/描かない)はプロッターに固定されたサーボで制御されます。

とりあえず動かしてみる

(多分)一番下に追加説明しますが、OSXから動かすためには色々面倒な設定が必要です。

設定が終わったら標準ツールのmDraw.appでサンプルファイルを読み込み、

描いてみましょう。

2本の糸で吊るしている割にかなり安定してプロッターを制御できています。感心します。

失敗しやすいポイントとしては、糸が鉛直に近すぎる、もしくは水平に近すぎる状態になると、ステッピングモーターにかかる負荷が増大して脱調します。そうすると初期位置がずれるんで、それ以降の描画がズレてしまいます。

描画領域のどこに動かしても糸が45°ぐらいをキープするように、モーターや描画領域を設定しましょう。

プログラムから制御する

標準のmDraw.appはSVGファイルを読み込んで描画するだけのプログラムです。

これだと自由度が足りないんで、Javaのプログラムから制御できるようにしてしまいましょう。

実はmDrawBotの中身はArduino互換で、シリアル通信で制御できます。

オープンソースなので、スケッチのソースもちゃんと公開されてます。

ソースを読んでシリアル通信の通信仕様が分かったので、Javaから制御するためのライブラリ「jDrawBot」を作ってみました。ご自由にどうぞ。

mSpiderをUSBで繋いだ状態なら、こんな感じでプログラム上から操作できます:

Spider spider=new Spider();

spider.moveTo(new Location(-30,100));

spider.drawTo(new Location(30,70));

spider.moveTo(new Location(30,100));

spider.drawTo(new Location(-30,70));

→「×」印が描画されます。

ちなみに描画操作(moveTo、drawTo)は内部でジョブキューで管理してるんで、非同期にコマンドを送れます。

描画の完了を待ちたい場合はこうしましょう:

Blocker blocker=spider.drawTo(new Location(-30,70));

blocker.block();

プログラムから制御できればこっちのもん、色々遊んでみましょう。

GUIから絵を描く

PCの画面上で絵を描くと、それをホワイトボードに描いてくれるプログラムを作ってみました。

動画gifだと凄く見難いですが、画面に描いた「Hello」がそのままホワイトボードに書かれてます。「直接書けよ」感いっぱいですが、楽しいですね。

例えば会議が始まる前に「前回の打ち合わせ時のホワイトボードを再現しておく」みたいな新しい会議支援システムとか作れそうです。

関数を描く

特に意味はないですが、グラフを描画したりもできます。

写真を描画する

基本的な遊び方が終わったあとは、プログラムで制御してるからこその遊び方をしてみましょう。

上の動画はPCのカメラで写真を撮影したあとOpenCVで線抽出し、ホワイトボードの絵を描くというデモです。

普通は手描きクオリティの絵しか存在しないホワイトボード上に写実的な絵が現れるのは不思議な体験です。

ホワイトボードを「コピペ」する

ホワイトボードの写真から線分抽出して、mDrawBotへの指令に変換して別のホワイトボードに描画するプログラムを作ってみました。

例えば会議室に設置しておいて打ち合わせが始まる前に前回の打ち合わせ時のホワイトボードの状態を再現しておく、とか捗りそうですね。

TOIKI:曇った窓をディスプレイとして使ってみる

ようやく本題です。こんなものを作ってみました:

ペンの先にスポンジをつけて、結露で曇った窓に文字を描くというデモです。

子供の頃、冬の寒い朝に指で絵を描いた記憶は誰でもありますよね?

もし朝起きて、窓に天気やお誕生日のメッセージなどが描かれてたら素敵じゃん?と思ってこういうものを作ってみました。

描いた文字は5分ほどで勝手に消えます。この刹那的な情報表示がなんとなく気に入ってます。ホテルとかにいいんじゃないですかね。

さいごに

たった2本の糸をステッピングモーターで動かす簡単な構造で、ここまで精度よく自由に遊べるロボットができるとは驚きました。

今回は糸で吊るす「mSpider」でしか遊んでませんが、他のロボットもそれぞれ色々ハックしがいがありそうです。

またRomoCart作った時も同じ事言ってましたが、プログラマー一人ではディスプレイの中の世界しか操作できません。だからこそ、プログラマーが実世界を簡単に制御できるようになるこういうキットは偉大だと思います。

是非mDrawBotをきっかけにハードの世界にも一歩踏み込んでみてはいかがでしょうか?