2014_8_19

ボール型ロボットティックトイ「Sphero」の制御実験をしてみた

sphero

こんにちは。貴田です。

 

ここ最近、スマホ対応ガジェットがKickStarter界隈を中心にどんどん世間に出てきている印象がありますが、今回は2010年から存在するOrbotix社製のiPhone、Androidから制御できるボール型ロボット「Sphero」という商品をいじってみましたので、そのレポートです。

 

簡単にSpheroについてご紹介

とにかく対応アプリが豊富でさまざまな楽しみ方があります。ラジコンカーのように自由にSpheroを操作できるアプリ。お絵かきをすると、その軌跡をSpheroがなぞるように動くアプリ。マクロと呼ばれるコマンドを使って、「緑に光りながら、8の字に動く」などの一連の特定の動きを命令できるアプリもあります。

 

その他にも、Spheroをスマホカメラで認識してあそべるARアプリや、Spheroを3軸ジャイロセンサ搭載のコントローラーとして使うアプリが存在したり、Sphero自体は水上に浮いて走れる特性を持っていたりと、その楽しみ方は本当に豊富です。

 

 

今回のSpheroの制御実験のテーマについて

今回、私がチャレンジしたのは、「PCで指定した位置に、Spheroをピンポイントで到達させること」です。

 

通常のアプリで、「円を描く」、「8の字で描く」などの命令を送っても、SpheroはGPSのような空間内での絶対位置を把握するセンサを搭載していないので、出発地点と、ひとまわりした後の終着地点では、わずかにズレが生じてしまいます。

 

そこを外部のセンサ(今回はWebカメラ)を用いて補うことで、ピンポイントで目標地点にSpheroを移動させることにチャレンジしました。

 

 

制御実験の結果について

制御実験結果をムービーで撮影しましたので、ご覧ください。

「9秒〜」は、マウスでクリックした緑の点を目標地点にして、Spheroが進んでる様子がわかると思います。画面が紫がかっているのは、赤外光フィルタを通して、みているカメラの映像を使ってるためです。赤外光フィルタを通してみると、反射材を貼り付けたSpheroが綺麗に白く映り、青い枠できちんと認識できているのがわかります。ちなみに、赤の点はキャリブレーション時に使用している4隅の点です。

 

システム構成について

sphero-system-architecture

システム構成は上図になります。Spheroには、iOS、Android、Ruby、Python、Arduinoなど様々なSDKが存在しますが、今回は僕が個人的に慣れているという理由でNode.jsを採用しました。カメラでのSpheroの認識はOpenCV+OpenFrameworksを使いました。実験は、社内の自席の隣の通りの床で行いました。窓と近接しているので、照明環境が安定せず、色認識で行うのが困難だったため、色よりは精度の高かった赤外線+再帰性反射材の組み合わせで認識を行いました。

 

sphero-camera

図左が、Amazonで購入した「赤外線カメラ+赤外線投光機」が一緒になったWebカメラに、ヨドバシで購入した赤外線透過フィルターを(ざつに養生テープで)貼り付けている写真です。図右がSpheroに東急ハンズで買った蛍光反射テープをベタベタ貼った結果の写真です。

 

sphero-calibrationこれは社内の自席の隣の床です。認識エリアの四隅に白い養生テープを貼り付けて、アプリ起動時に4点キャリブレーションを行って、「カメラで撮影した画像」と「PC内用の正方形の2次元仮想空間」の射影変換に活用していました。

 

sphero-feedback-loop

これは制御時のアルゴリズムです。単純なフィードバック制御で行いました。

 

実際やってみて難しかった点は、Spheroに「角度+θ動け!」と命令しても、Spheroの回転軸が徐々にズレていってしまい、うまく目標座標に辿りつけなかったことです。対策として、移動するたびに、「理想の移動方向」と「実際の移動方向」の差分をとりフィードバックをかけることで、動きが改良されました。

 

応用例について

この「ピンポイントでのSpheroの位置制御」の技術が可能になることで、Spheroに特定の動きをさせることで、特定のメッセージを伝えるためのコンテンツへ応用できると思います。プロジェクションマッピングと連動させたり、複数のSpheroを連携させて、特定のビジュアルを作ることが考えられます。

 

以下は、DIsney Researchの「Display Swarm」という研究です。今回の僕のSphero制御実験のだいぶ先を研究されています。1台の時と比べると、複数のロボットを動かす際は、ロボット同士をぶつからないようにするソフトウェア制御が肝になりそうです。

 

 

今回は、赤外線認識や、Spheroをいじりたいという思いからの、夏の実験的な制作という位置づけでしたが、どこかできちんとしたアウトプットに落とし込めるようにしていきたいと思います!