はじめに
Spheroは知る人ぞ知るiphoneやandroidから操作することが出来るロボットボールである。タッチやフリック操作で、ボールを自在に操ることが出来る他、ボールを手にもって動かすことで入力インタフェースにもできる使い勝手の良いデバイスである。
このSphero、もちろん、iOS用やAndroid用の開発apiが公開されているのだが、もう少し手軽にパソコン(もっというとMac)から操作できないかと思い調べてみたら、案の定、rubyやpythonなどのスクリプト言語からアクセスする非公式のライブラリが提供されていた。しかし、自分が最近使っているのはProcessingであるため、できればProcessingで動かせると良い。そこで、簡単なラッパーを作ってGithubで公開(晒)してみた。
備忘録としてここに使い方を書いておく。
ちなみに拙い英語で、GithubのREADME.mdに使い方を書いてあるので、別にここを読まなくても使うことはできる(というか以下はREADME.mdの和訳です)。
セットアップ
このプロジェクトは、py4jというパッケージを利用して、JavaからPythonのコードを実行できるようにしたラッパーである。そのため、必要なライブラリを自分で取ってくる必要がある。
- py4j: Gateway Server/Clientを介して、JavaとPythonのコードを双方のプログラムから呼び出すことができるようにするパッケージ
- 以下からインストールすることができる http://py4j.sourceforge.net/download.html
- sphero: PythonのSphero制御パッケージ
- pipでインストールできる
$ pip install sphero
- slf4j: Java用のロギングインターフェースパッケージ(必要ないっちゃ必要ないけど、いつも使うので入れてしまいました)
- 次からからダウンロードできます。
http://www.slf4j.org/download.html - 最新バージョンをダウンロードして、解凍する
- 解凍するといろいろでてくるが、以下のjarファイルをプロジェクトのcodeディレクトリにコピーする(なかったら、作る)
- slf4j-api.jar
- 次からからダウンロードできます。
- logback: ロギングの実装パッケージ
- 次からダウンロードできます http://logback.qos.ch/download.html
- 最新バージョンをダウンロードして、解凍する
- 解凍するといろいろでてくるが、以下のjarファイルをプロジェクトのcodeディレクトリにコピーする(なかったら、作る)
- logback-classic.jar
- logback-core.jar
プロジェクトのソースコードは、以下から持ってくることができる
$ git clone https://github.com/mountcedar/SpheroControl.git
すべての準備が整うと、プロジェクトのソースツリーは以下のようになっているはず。
SpheroControl/
├── GatewayServer.pde
├── README.md
├── Sphero.pde
├── SpheroControl.pde
├── code
│ ├── logback-classic-X.X.X.jar
│ ├── logback-core-X.X.X.jar
│ ├── py4jX.X.jar
│ └── slf4j-api-X.X.X.jar
└── engine
├── __init__.py
└── gateway.py
使い方
プロジェクトの実行方法は、以下の通り。後は自分のやりたいことに従って、改造してください。
- Spheroを振って、スリープ状態から起こす
- SpheroControl.pdeを実行
- つながるまでしばらく待ちます。
- コネクションが確立するまで、Spheroは色を変えながら点滅していますが、確立すると青白い色で固定します。
- サンプルプログラムで、drawが呼び出されるたびに色がランダムで変化するプログラムが走ります。
- エスケープキーで終了します。
- 注意として、エスケープキーではなく、Closeボタンで終了してしまうとバックグラウンドで動かしているpythonプロセスが終了しないままJavaの方だけが終了し、Pythonの方がゾンビプロセスとして残ります。その場合はkillコマンドなり、アクティビティモニタなりでPythonプロセスを強制終了してください。
APIはそんなに難しくないので、ソースコードを読んでください。Pythonプロセスがゾンビになりやすいことも含めて、自己解決できない方は手を出さない方が賢明かと思います(自分で公開しておいてごめんなさい)
最後に
ここまで書いて、ふと同じ時間でシリアル通信を使ったpure processingのコードも書けたのではないか・・と思い、若干後悔している。できれば、そちらにも手を出したい。こういうの作ったら、やっぱり、Sphero側に一報すべきなんだろうか・・