RoombaをJoystickで動かしてみた

Roombaには、外部からのコマンドを受け付けるInterfaceが用意されていて、モータを駆動させて移動させたり、登録済みの音楽を鳴らしたりといったことがシリアル通信を通じて実行できます。
nobbyさんからJoystickで自由に動かせるようにしてほしいという依頼を受けたのでやってみました。

早速動画です。

Joystickのトリガーを引くとブラシが回転するようにしています(2秒間。引き続ければ回転したまま。)。
Joystickの手前のレバーで速度を調整することができます。
非常に残念ですが、暴走モードは実装されておりません。

以下、補足です。

Roombaのinterfaceは正式には、Roomba Serial Command Interface、Roomba SCIと呼ばれており、以下のURLで仕様が公開されています。

http://www.irobot.com/images/consumer/hacker/roomba_sci_spec_manual.pdf

Roombaの上にはRaspberry Piが載っていて、モバイルバッテリーで駆動しています。Roombaの物理InterfaceはMINI-DIN 7 pinです。実際に使用しているのはGND、RX、TX、DTSの4本なので、使っていないUSBケーブルを切って、一方をMINI-DIN 7 pinのプラグにハンダ付け、もう片方をQiコネクタにして、Raspberry Piと接続するためのUSBシリアル変換モジュールに接続しています。

また、Raspberry PiにはUSBのWi-Fiモジュールを接続していて、ネットワーク越しにコマンドを受け付けるUDPサーバが起動しています。一定のフォーマットに従ったデータをサーバに対して投げると、Roombaに対してコマンドを投入します。

サーバに対してデータを投げるクライアント側は、Joystickの入力(x軸、y軸、z軸、w軸、その他のButtonやHat)から送信すべきデータを算出し、サーバ側に投げつけます。

Joystickの入力値は、pygameというpythonのモジュールを使用して取得しました。

今回使用したJoystickは、EXTREAM 3D PROという製品でした。
この製品のみで発生する現象かどうかは分かりませんが、取れてくるz軸とw軸の値がWindowsとLinuxで逆になるという現象が起こりましたので、実行しているOSがWindowsの場合は入れ替える処理を追加しました。

このJoystickには12個のボタンが付いていたり、Joystickの上部にHatといわれるInterfaceも付いているので、他にも様々な動作が実装できそうです。

RoombaがJoystickで動くようになったことで、任意の場所までRoombaを動かして好きなだけ掃除できるようになりました。
ちょっと気になったホコリや紙くずもこれで解決ですね!!

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

*