たるこすの日記

たるこすの日記

リアルからバーチャルへ、バーチャルからリアルへ

ルンバを Raspberry Pi でコントロールする ~その2~

こんにちは、たるこすです。前回のブログでは、ルンバと Raspberry Pi を接続してルンバをコントロールする方法を紹介しました。

tarukosu.hatenablog.com

今回は Raspberry Pi にルンバ操縦用のサービスを立て、PC やスマホから操作する方法について紹介します。

リポジトリのセットアップ

今回紹介するコードは、以下のリポジトリで公開しています。

github.com

使うためには、Raspberry Pi で以下のコマンドを実行してください。

リポジトリのクローン

$ git clone https://github.com/tarukosu/RoombaRPC.git

サブモジュール(ルンバコントロール用ライブラリ)のセットアップ

$ git submodule init
$ git submodule update
$ touch roomba/__init__.py

依存パッケージのインストール

$ apt install python-dev
$ pip install pyserial
$ pip install zerorpc

RPC サーバの起動

$ python server.py

操作用 Web サービスのセットアップ

(RPC サーバとは別のコンソールを開いて)
$ cd server
$ sudo apt install libzmq-dev
$ npm install
$ npm -g install bower
$ bower install virtualjoystick.js

app.js, index.html 内のIPアドレスRaspberry PiIPアドレスに書き換え

Web サーバの起動

$ node app.js

npm install の際に zmq のインストールに失敗する場合は、以下のページが参考になるかもしれません。

ルンバ操作用 RPC サーバ

zerorpc という ZeroMQ と MessagePack を使った RPC ライブラリを利用しました。

Raspberry Pi で動作するサーバのコードは以下のようになります。

RoombaRPC クラスで定義したメソッドが、zerorpc を使ってマシン内の別サービスや別のマシンから呼び出せるようになります。

ルンバ操作用 Web サービス

virtualjoystick.js というライブラリを使い、ブラウザ上でジョイスティックのような操作ができるようにしました。操作された際の値は websocket を使ってサーバ側に送信されます。サーバ側では受け取った値を引数とし、zerorpc を使って RPC サーバにコマンドを送ります。

おわりに

次回は HoloLens を使って Roomba を自律移動させるというホロルンバを紹介します。