ルンバを Raspberry Pi でコントロールする ~その2~
こんにちは、たるこすです。前回のブログでは、ルンバと Raspberry Pi を接続してルンバをコントロールする方法を紹介しました。
今回は Raspberry Pi にルンバ操縦用のサービスを立て、PC やスマホから操作する方法について紹介します。
ブラウザからコントロールできるようになった! pic.twitter.com/wIK613ofsl
— たるこす (@tarukosu) 2017年9月10日
リポジトリのセットアップ
今回紹介するコードは、以下のリポジトリで公開しています。
使うためには、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 Pi の IPアドレスに書き換え
Web サーバの起動
$ node app.js
npm install
の際に zmq のインストールに失敗する場合は、以下のページが参考になるかもしれません。
ルンバ操作用 RPC サーバ
zerorpc という ZeroMQ と MessagePack を使った RPC ライブラリを利用しました。
Raspberry Pi で動作するサーバのコードは以下のようになります。
RoombaRPC クラスで定義したメソッドが、zerorpc を使ってマシン内の別サービスや別のマシンから呼び出せるようになります。
ルンバ操作用 Web サービス
virtualjoystick.js というライブラリを使い、ブラウザ上でジョイスティックのような操作ができるようにしました。操作された際の値は websocket を使ってサーバ側に送信されます。サーバ側では受け取った値を引数とし、zerorpc を使って RPC サーバにコマンドを送ります。
おわりに
次回は HoloLens を使って Roomba を自律移動させるというホロルンバを紹介します。