ルンバをXBeeでリモコン操作


最近引っ越して少し部屋が広くなったので、ルンバを導入してみました。
部屋のケーブル類さえ巻き込まれないように対処しておけば(壁に貼付けるとか段ボール等でガードするとか)、勝手に掃除してくれるので大変楽できます。


さて、ただ自律的に掃除してもらうだけでも良いのですが、せっかくロボットがあるのだから自分でも動かしてみたいところ。
ルンバはRoomba Open Interface (ROI)というインターフェースを備えており、センサの情報をモニタリングしたり、外部からコマンドを送って自由に動かしたりすることができます。Openというだけあって、仕様もちゃんと公開されています。→ 500シリーズのROI仕様


シリアルでコマンドを送るだけなので比較的簡単です。工夫のしがいとしては、ルンバが自由に動き回れるよう通信を無線化したいところ。すでにフリスクケース入りのBluetoothアダプタも発売されていますが、外部に出っ張るので、家具などの下をルンバがくぐる際に引っかかる恐れがあるのが難点。今回は、手持ちのXBeeを使って本体内に(ギリギリ)収まるようなインターフェースを作成してみました。



表面の化粧パネルを外し、ROIポートに電源基板とXBeeモジュールを接続。電源モジュールはバッテリー(最大20Vくらい出る)を3.3Vにレギュレータで降圧。シリアルのルンバ→XBeeも5Vのため、分圧抵抗を入れて3.3Vに変換します。XBee→ルンバ側は直結でも大丈夫です。前方の凹み部分に(若干無理やり)収まりました(モーターの廃熱が若干気になるところですが)。これで化粧パネルを閉じれば、引っかかる恐れはなくなり安心です。


ソフトウェア的には、リファレンスに従ってシリアルでコマンドを送るだけ。注意どころとしては、XBeeシリーズ1ではルンバ500シリーズのデフォルト通信速度115200bpsを選択すると、速度に3%近く誤差があって通信中にエラーが多発するため、19200bpsに切り替える必要がある点。これは電源OFFの状態からCLEANボタンを10秒間押し続けるか、ROIポートのBaud Rate Changeピンに決まったシーケンスを送ることで切り替えられます(リファレンスに説明あり)。XBeeシリーズ2 (XBee ZB)ではこのような問題はありません。


とりあえずWebインターフェースをかぶせて、自律モードで掃除させつつセンサをモニターして走行経路をトラッキングしたり、ボタンもしくはキーボード操作で自由に動かせるようにしてみました。


自律モードでセンサ情報からどんな判断をしてるのか想像しつつ見てるだけでもなかなか楽しめます。


ちなみに現在Wiiリモコンでルンバを動かせるバージョンを作成中 → 作ってみた。