先日購入したお掃除ロボットだが、Webでいろいろ調べていたら、Roomba Serial Command Interface (ルンバ シリアル コマンド インターフェース) なるものを発見。
詳しくは、iRobot Roomba Developersから。
2005年10月以降に製造されたRoombaには、シリアルポートが内蔵されている。それ以前のRoombaの場合、OSMOと呼ばれるキットを使って、Roombaのソフトウエアをアップデートすれば、シリアルポートを使うことができる。
自分のRoombaがOSMOでアップデートが必要かどうかを調べるには、こちらのページが参考になる。
コネクタは、Mini-DINメス。0-5Vのシリアルなので、MAX232 chipなどを使ってRS232Cレベルに変換しなさいとのこと。
世の中には、RoombaDevToolsなんて、気の利いたサイトまである。これは、iRobotoとはぜんぜん違う別会社のサイトだが、ここでは、RoombaをパソコンにつなぐためのRS232C変換とか、USB変換とか、Bluetooth変換とかのキットを扱っている。Bluetooth変換があれば、ワイアレスでルンバを操作できる。
それぞれのマニュアルは、RooTooth (Bluetooth変換)、RooStick (USB変換)、Roo232 (RS232C変換)で見ることができる。
Roomba Serial Command Interfaceには、Off, Passive, Safe, Fullの4つのモードがある。
Offは電源OFF。
Passiveは、センサーの状態の取得、各種ボタンの操作、音を鳴らす、基地へ帰る、の操作ができる。それ以外は、通常の動作。
Safeは崖の回避、脱輪時の停止、充電開始の動作停止、の機能を残したままその他の操作ができる。
Fullは全て自分でコントロールするモード。
コマンドはきわめてシンプル。コマンドをあらわす1バイトと、そのパラメータとなる数バイトのデータを送信すればOK。センサー値取得のコマンドを投げれば、返事がバイト列で返ってくる。
車輪の操作も前進速度(mm/s)と左右の回転角度を指定できる。
掃除用モータも、メインブラシ、吸い込み、横のブラシそれぞれOn/Offコントロールが可能。
全てのLEDの明るさと色のコントロールもできる。
音階は12音階8オクターブ。長さの調節も可能。
取得できるセンサー値は、
脱輪センサ、段差センサ、壁センサ、崖センサ(左、左前、右、右前)、Virtual Wallセンサ、モータ過電流センサ(車輪左、車輪右、メインブラシ、吸い込み、横ブラシ)、汚れセンサ(左、右)、リモコンセンサ(リモコンで送信されたデータ)、押されたボタン(Power, Spot, Clean, Max)、バッテリー電圧(mV)、バッテリー電流(mA)、バッテリー温度、バッテリー残量(mAh)、バッテリー充電状態(0-65535)。
それ以外にも、前回からの移動量、前回からの回転角度も取得できる。
かなりいっぱい取れるじゃないですか。強いて言えば、充電器に自動で変えるためのセンサが取れないくらいか。もしかして、Virtual Wallと兼用なのかな。
世の中には、既にいろんなことを試している人がいて、C# RoombaSCI Frameworkと題して、C#からRoombaをコントロールするためのクラスライブラリが既に開発されていたり、Hacking Roombaなるコミュニティサイトまであったりする。
iRobot Roomba Developersに書かれているリンクサイトが面白い。
Roombaを使って地図を作成したり、携帯電話からコントロールしたり、ルンバ相撲やらせたり、いろんなものくっつけてみたり。
こりゃぁしばらく遊べますな。