パッケージJava製品開発担当の大です。こんにちは。

最近、HOSではルンバを購入しました。

今まではみんなで交代で掃除機かけたりしてましたが、これでそんな必要もなくなりました。
就業時間中だと音が結構うるさいので、誰もいない明け方に起動するようにスケジュールされてます。

ときどき、ドックに帰りつく前に充電がこと切れて、机の下とかで発見されたり、ヴァーチャルウォールを突破して入っちゃいけないところに入っちゃったりするドジっ子な面もありますが、毎朝黙々とお掃除してくれているようです。昼間は静かに待機して出番を待ってます。

待機中のルンバ。

待機中のルンバ。

だんだん愛着がわいてきますね。

というわけで今回は、そんなルンバを手持ちのAndroidスマートフォンから操作してみたいなぁと思って試してみました。

ルンバのインタフェース

ルンバの開発元iRobotでは、外部から操作できるインタフェースの仕様を公開しています。

基本的には本体上部のシリアルポートみたいなところ(これがOpen Interfaceらしい)に有線で接続して、PCから操作したりできるものみたいですが、ネット上を見てみると、だいたいみんなここにBluetoothのアダプタをつなげて使っているみたいです(これとかこれとか)。そりゃあ、有線じゃ面白くないですもんね。

でも私はBluetoothアダプタなんて持ってないので、今回は赤外線を使います。

ルンバにはもともと赤外線リモコンがついてて、上記の資料にも赤外線リモコンのコマンド一覧が載ってます。赤外線リモコンを作る上ではキャリアの情報とか論理パルス0/1の長さの情報とかフレーム長・トレーラー・リーダーの情報なんかも必要なわけですが、そういうのはiRobotからは公開されてないみたいです(多分)。でも、赤外線関連のハックをしてる人もたくさんいて、ググったらだいたい情報は見つかりました。興味ある人は探してみてください。

赤外線操作用のAPI

さて、Android OSにはそもそも赤外線操作用のAPIがないです。
でもありがたいことに、私が使っているスマートフォン(IS05)のメーカー、シャープさんは開発者向けにSDKのアドオンをApacheライセンス(2.0)で公開してくれていて、その中に赤外線操作用のAPIが入っていました。

今回はこのアドオンを利用させていただきました。
使い方については、こちらのサンプルコードとほとんど同じです。それぞれのパラメータでルンバ向けのものが設定されてれば動きます。

実装

というわけで、作ってみたのがこれです。
(HTML5非対応のブラウザだと動画がうまく見れないかもしれません。。。その場合はダウンロードしてローカルで見てみてください: roomba_x264.mp4

るんばリモコン。(▶ボタンで再生)

今回の実装は、電源(on/off)と、直進、左右カーブ、左右回転のみ。

自動で掃除する「CLEAN」とか「SPOT」とかも試してみたんですけど、うまく反応してくれなくて今回は時間切れです。また時間のあるときに改めてやってみようと思います。