materealは、ロボット工学の専門家ではないソフトウェアプログラマであってもインタラクティブなロボットアプリケーションをプロトタイピングできるように開発された、Java/Processing用の軽量ツールキットです。
左のように、ロボットにビジュアルマーカを付け、PCに接続したWebカメラでその様子を撮影する簡素なハードウェアセットアップを用意すれば、10分もかからずに実ロボットを用いたロボットアプリケーションの開発環境が整います。
最新版はGoogle Codeでダウンロードできます。初めて使う場合はまずWikiのチュートリアルを読むのがおすすめです。サンプルコードは、Google Codeで配布しているアーカイブか、このブログの「サンプル・コード」カテゴリをご覧ください。
既存のロボット開発のイメージは、環境を認識し、人間と自然なやり取りができる自律した高度な人工知能を作り上げる、といったものだったかもしれません。しかしmaterealは、ロボットを、操作主体の意思を実行できる計算機による身体の拡張──Augmented Humanの一種──として捉えています。換言すると、materealはロボットを道具として使う方法を考えるために開発されたツールキットです。
materealは、コンピュータを用いた新しい道具のプロトタイピングを支援する点でPhidgetsのようなPhysical Computing用ツールキットと似ています。ただし、Phidgetsのようにアクチュエータやセンサの値を読み書きできる低レベルなAPIでなく、次のような高レベルなタスク指向のAPIを提供する点が特徴です。
- ロボットと物体の位置情報を二次元の絶対座標系で取得(LocationListener)
- 指定した絶対座標への移動(Move)
- 指定した絶対座標への物押し(Push)
- その場での掃除、ペンの上げ下ろしetc.
materealでは、ロボットが実行できるタスクは環境内での移動(Locomotion)と、その場での操作(Manipulation)に大別して考えられています。これは、GUIでいうところのマウスカーソルを想像していただければ分かりやすいでしょう。マウスカーソルは、右クリックで出現するメニューがコンテクストメニューと呼ばれるように、デスクトップ上の特定の位置で、コンテクストに応じた機能を果たすことができます。そして、現状のmaterealが積極的に支援しているのはLocomotionのほうだけです。例えば、マウスカーソルの移動はMoveタスクに、ドラッグ&ドロップはPushタスクに相当します。Manipulationはロボットの作りこみ──ルンバはその場での掃除機能を持っています──やツールキットのユーザによる意味づけ──ペンの上げ下ろしは実装としては単なるアクチュエータの順回転と逆回転です──によってmaterealを拡張するかたちで実装されることを想定しています。
また、materealは、エンドユーザの指示に従って複数のタスクのシークエンス(どのロボットがどのタイミングでタスクを実行するのか)を動的に変えられるように、フローチャートの拡張であるアクティビティ図を動的に構築するAPIを提供します。アクティビティ図はタスクと動作主であるロボットのペアからなるノードを状態遷移や同期処理を行うコントロールノードで結んだ図式表現です。これにより、並列処理のプログラミングでデッドロックと格闘しなくとも、複数台のロボットを同時に動かすことができます。
これまでのロボット用ツールキットは、一台のロボットの機能を作りこんだり、複数台のロボットがネットワークで繋がってもきちんと互換性を保って動ける最低限の仕様を決めたり、といった工学的努力のもと開発されてきたように思います。プログラミングの教育用途に簡単な人工知能を組みやすくするものもありましたが、そういった試みも思想のうえではロボット工学由来であり、materealのロボットの新しい使い方を考える狙いとはズレています。結果的に、プログラマが触れるAPIで、前述のように高レベルなタスクをいきなり提供するものはありませんでした。また、フローチャートに近いステートマシンやステートチャートを用いてロボットの動作を管理する機能はあっても、そのシークエンスを動的に組み替えるAPIは用意されてきませんでした。
もちろん似たことは既存のツールキットを用いてやればできますし、最先端のアルゴリズムを勉強して適切なものを選択・実装すればもっと高度なこともできるでしょう。ただ、それはどちらかといえばJava言語に対するJREのライブラリのようなもので、materealのタスククラスや、その下敷きとして実装・連携できたらよいと考えています。
materealというツールキットの提案を通して訴えたかったのは、ライブラリそのものよりも、プログラマがロボットを操作するやり方です。materealを用いてロボット・アプリケーションのプロトタイピングを体験し、願わくばオープンソースで行われているmaterealの開発にフィードバックを提供していただければ幸いです。
※本プロジェクトは2008年12月から2009年8月まで、情報処理推進機構(IPA) 2008年度下期未踏IT人材育成発掘事業(未踏本体)の支援を受けて開発が進められました。