はじめに
ルンバ800をハックしました。 Webアプリからルンバと通信することで掃除をさせたり、音楽を流したり、スケジュールを変更したり、できるようにしました。
準備
ルンバと無線通信するため「RooWiFiルンバ用無線LANモジュール(RB-Roo-01)」をルンバに搭載しました。
http://www.robotshop.com/jp/ja/roowifi-wifi-module-roomba-v2.html
インストール手順はこちらを参照しました。
http://www.roowifi.com/wp-content/uploads/RwRemote_User_Guide_v2_rev15.pdf
ルンバとTCP/IP通信
ルンバを操作するためのインタフェースはThe Roomba Open Interface(OI)として公開されています。
こちらの仕様に記載のコマンドをソケット通信でルンバに送り込めばルンバを好きなように操ることができます。
http://www.irobot.lv/uploaded_files/File/iRobot_Roomba_500_Open_Interface_Spec.pdf
Spring bootアプリの構築
ルンバと通信するためのWebアプリケーション(roomba_client)を構築しました。
日々改良中ですが、形になってきたので公開します。
https://github.com/hiroki-sawano/roomba_clientgithub.com
roomba_clientの起動
アプリケーションを起動し、ブラウザよりアクセスすると次の画面が表示されます。
アプリケーションの立ち上げ時にはルンバへの接続が成功したことを示すメッセージが出力されます。
roomba_client/event.log
2017-12-07 05:12:58.522 ... hs.roomba.client.RoombaController : Connected to Roomba
複数コマンドの連続実行
任意のコマンド名と前述したOIの仕様に従ったシリアルシーケンスを入力し、'ADD COMMAND'ボタンでデータテーブルにコマンドを実行順に追加していきます。
シリアルシーケンスは直接入力(Arbitrary Sequence)でもかまいませんが、いくつかセレクトボックス(Selectable Sequence)で選択可能としています。
こちらの例では、①セーフモードへの移行、②曲の登録、③曲の再生を実行し、ルンバから音楽を再生しています。
ログ情報は次の通りです。
roomba_client/event.log
2017-12-07 05:16:42.356 ... hs.roomba.client.RoombaController : Adding new command : name=start serialSequence=128 131 2017-12-07 05:16:48.832 ... hs.roomba.client.RoombaController : Adding new command : name=song serialSequence=140 0 7 76 16 76 32 79 16 79 16 77 16 74 16 72 32 2017-12-07 05:16:55.268 ... hs.roomba.client.RoombaController : Adding new command : name=play serialSequence=141 0 2017-12-07 05:16:56.944 ... hs.roomba.client.RoombaController : Sending serial sequence : 128 131 2017-12-07 05:16:57.959 ... hs.roomba.client.RoombaController : Sending serial sequence : 140 0 7 76 16 76 32 79 16 79 16 77 16 74 16 72 32 2017-12-07 05:16:58.965 ... hs.roomba.client.RoombaController : Sending serial sequence : 141 0
単一コマンドの即時実行
コマンドを入力後に'EXECUTE COMMAND'を押下するとデータテーブルにコマンドを登録せずに即実行します。
この例では、③曲の再生を指示するシーケンスを直接入力してルンバに送信しています。
roomba_client/event.log
2017-12-07 05:17:07.290 ... hs.roomba.client.RoombaController : Sending serial sequence : 141 0
その他機能
データテーブルに一度登録したコマンドは実行、編集、削除が可能です。
環境設定
使用する際にはapplication.ymlにルンバのIP(roomba.ip)とポート番号(roomba.port)を最低限設定することが必要です。
必要に応じて画面中のセレクトボックスで選択可能なシリアルシーケンス(roomba.sequences)を登録することもできます。
application.yml
roomba: ip: 192.168.0.19 port: 9001 sequences: start_and_safe: 128 131 start_and_full: 128 132 clean: 135 max: 136 spot: 134 seek_dock: 143 song: 140 0 7 76 16 76 32 79 16 79 16 77 16 74 16 72 32 play: 141 0 end: 128 daily_schedule: 167 62 0 0 12 0 12 0 12 0 12 0 12 0 0 0
さいごに
今でも少し遊ぶ分には十分ですが実際に日常で役立つような使い方ができるように、組み立てたシーケンスの保存やコマンドの実行間隔の指定など今後改良を加えていきます。