(57)【特許請求の範囲】
【請求項１】
ロボットを制御するための発行−購読アーキテクチャに基づく分散システムであって、
他の複数のモジュールと共有するために情報を生成するように構成された複数の発行モジュールと、
前記ロボットの作動体を制御するための機構であって、
前記複数の発行モジュールによって生成された前記情報に基づいて前記ロボット中で第１タスクを実行するために第１出力を生成するように構成された第１購読モジュールと、
前記複数の発行モジュールによって生成される前記情報に基づいて前記ロボット中で第２タスクを実行するために第２出力を生成するように構成された第２購読モジュールと、を含む機構と、
前記複数の発行モジュールによって生成された前記情報を受信して記憶するように構成され、ループおよび再帰の少なくとも１つを含む第１条件に合致する前記情報の第１サブセット並びに第２条件に合致する前記情報の第２サブセットを選択するように構成された複数のフィルタを含み、前記情報の前記第１サブセットを前記第１購読モジュールへ送信し、前記情報の前記第２サブセットを前記第２購読モジュールへ送信するように構成されたメッセージハブと、を含むことを特徴とする分散システム。
【請求項２】
前記第１および第２条件がスクリプト言語で記述される、請求項１に記載の分散システム。
【請求項３】
前記メッセージハブが、前記受信した情報を第１の型の情報と第２の型の情報に分類して索引を付けるための黒板マネージャを更に含む、請求項１に記載の分散システム。
【請求項４】
前記メッセージハブが、前記第１の型の情報を記憶するための第１共有メモリ、および前記第２の型の情報を記憶するための第２共有メモリを更に含む、請求項３に記載の分散システム。
【請求項５】
前記メッセージハブが、前記第１購読モジュールまたは前記第２購読モジュールから受信したフィルタ定義に基づいてフィルタをインストールするように構成されたフィルタ管理モジュールを更に含む、請求項１に記載の分散システム。
【請求項６】
前記メッセージハブが前記受信した情報を分類して索引を付けるための黒板マネージャを更に含み、前記フィルタ定義を受信したことに応じて、前記フィルタに対応するインデクサを前記黒板マネージャがインストールする、請求項５に記載の分散システム。
【請求項７】
前記複数の発行モジュール、前記メッセージハブ、前記第１購読モジュール、および前記第２購読モジュールの間の通信が、拡張可能なクラスからインスタンス化されたメッセージによって実行される、請求項１に記載の分散システム。
【請求項８】
前記メッセージハブが、前記第１購読モジュールに対する要求を受信したことに応じて、前記第１条件を変更するように構成される、請求項１に記載の分散システム。
【請求項９】
発行−購読アーキテクチャに基づく分散システムにおいてメッセージハブを使用してロボットを制御するための方法であって、
複数の発行モジュールが共有する情報をメッセージハブで受信するステップと、
ループおよび再帰の少なくとも一つを含む第１条件に合致する前記情報の第１サブセットを選択するステップと、
第２条件に合致する前記情報の第２サブセットを選択するステップと、
第１購読モジュールが第１タスクの実行に関連する第１出力を生成するために、前記情報の前記第１サブセットを前記第１購読モジュールへ送信するステップと、
第２購読モジュールが第２タスクの実行に関連する第２出力を生成するために、前記情報の前記第２サブセットを前記第２購読モジュールへ送信するステップと、
前記第１出力および前記第２出力に基づいて前記ロボットの作動体を制御するステップと、を含むことを特徴とする方法。
【請求項１０】
前記第１および第２の条件がスクリプト言語で記述された、請求項９に記載の方法。
【請求項１１】
前記メッセージハブの第１共有メモリおよび第２共有メモリに記憶するために、前記共有する情報を受信するステップの後かつ前記第１サブセットまたは前記第２サブセットを選択するステップの前に、前記情報を第１の型の情報および第２の型の情報に分類して索引を付けるステップを更に含む、請求項９に記載の方法、
【請求項１２】
前記第１サブセットを選択するステップの前に、フィルタ定義を第１購読モジュールから受信するステップと、
前記第２サブセットを選択するステップの前に、前記情報の前記第１サブセットを選択するために、前記フィルタ定義に基づいてフィルタを生成するステップと、を更に含む、請求項９に記載の方法。
【請求項１３】
前記フィルタ定義を受信するステップの後に、前記フィルタに対応してインデクサを生成し、前記フィルタは共有のために前記情報を分類して索引を付けるように構成されるステップと、を更に含む、請求項１２に記載の方法。
【請求項１４】
前記第１購読モジュールから要求を受信した場合、前記要求を受信した後に前記第１条件を変更するステップを更に含む、請求項９に記載の方法。
【請求項１５】
発行−購読アーキテクチャに基づく分散システムを使用してロボットを制御するためにメッセージハブ中のプロセッサによって実行可能な命令を記憶するように構成されたコンピュータ読み取り可能な記録媒体であって、前記命令が実行されるとき、前記プロセッサに、
共有のために複数の発行モジュールからの情報を受信するステップと、
ループおよび再帰の少なくとも１つを含む第１条件に合致する前記情報の第１サブセットを選択するステップと、
第２条件に合致する前記情報の第２サブセットを選択するステップと、
第１タスクの実行に関連して第１出力を生成するために、前記情報の前記第１サブセットを第１購読モジュールへ送信するステップと、
第２タスクの実行に関連して第２出力を生成するために、前記情報の前記第２サブセットを第２購読モジュールへ送信するステップと、
前記第１出力および前記第２出力に基づいて前記ロボットの作動体を制御するステップと、を実行させることを特徴とするコンピュータ読み取り可能な記録媒体。
【請求項１６】
前記第１および第２の条件がスクリプト言語で記述された、請求項１５に記載のコンピュータ読み取り可能な記録媒体。
【請求項１７】
前記メッセージハブの第１共有メモリおよび第２共有メモリに記憶するために、前記共有する情報を受信するステップの後かつ前記第１サブセットまたは前記第２サブセットを選択するステップの前に、前記情報を第１の型の情報および第２の型の情報に分類して索引を付けるステップを実行させる命令を更に記憶する、請求項１５に記載のコンピュータ読み取り可能な記録媒体。
【請求項１８】
前記第１サブセットを選択するステップの前に、フィルタ定義を第１購読モジュールから受信するステップと、
前記第２サブセットを選択するステップの前に、前記情報の前記第１サブセットを選択するために、前記フィルタ定義に基づいてフィルタを生成するステップと、を実行させる命令を更に記憶する、請求項１５に記載のコンピュータ読み取り可能な記録媒体。
【請求項１９】
前記フィルタ定義を受信するステップの後に、前記フィルタに対応するインデクサを前記メッセージハブ上にインストールし、前記インデクサが前記メッセージハブ上で前記受信した情報を分類して索引を付けるステップを実行させる命令を更に記憶する、請求項１８に記載のコンピュータ読み取り可能な記録媒体。
【請求項２０】
前記第１購読モジュールから要求を受信した場合、前記要求を受信した後に前記第１条件を変更するステップを実行させる命令を更に記憶する、請求項１５に記載のコンピュータ読み取り可能な記録媒体。
【請求項２１】
ロボットを制御するための発行−購読アーキテクチャに基づく分散システムであって、
複数の発行モジュールが共有する情報をメッセージハブで受信する手段と、
ループおよび再帰の少なくとも１つを含む第１条件に合致する前記情報の第１サブセットを選択する手段と、
第２条件に合致する前記情報の第２サブセットを選択する手段と、
前記情報の前記第１サブセットを第１購読モジュールへ送信して、前記第１購読モジュールが第１タスクの実行に関連する第１出力を生成する手段と、
前記情報の前記第２サブセットを第２購読モジュールへ送信して、前記第２購読モジュールが第２タスクの実行に関連する第２出力を生成する手段と、
前記第１出力および前記第２出力に基づいて前記ロボットの作動体を制御する手段と、を含むことを特徴とする分散システム。
【請求項２２】
前記第１および第２の条件がスクリプト言語で記述された、請求項２１に記載の分散システム。
【請求項２３】
前記メッセージハブの第１共有メモリおよび第２共有メモリに記憶するために、前記情報を第１の型の情報および第２の型の情報に分類して索引を付ける手段を更に含む、請求項２１に記載の分散システム。
【請求項２４】
フィルタ定義を第１購読モジュールから受信する手段と、
前記情報の前記第１サブセットを選択するために、前記フィルタ定義に基づいてフィルタを生成する手段と、を更に含む、請求項２１に記載の分散システム。
【請求項２５】
前記フィルタ定義を受信したことに応じて、前記フィルタに対応してインデクサを生成し、前記フィルタは共有のために前記情報を分類して索引を付けるように構成される手段と、を更に含む、請求項２４に記載の分散システム。
【請求項２６】
前記第１購読モジュールからの要求を受信したことに応じて、前記第１条件を変更する手段を更に含む、請求項２１に記載の分散システム。
【発明の詳細な説明】
【技術分野】
【０００１】
関連する出願の参照
この出願は、2007年10月22日に出願された同時係属中の米国特許仮出願第60/981,804号「分散人型ロボットアーキテクチャにおける通信ミドルウェアの設計および評価」に対して、合衆国法典35巻第119条(e)に基づく優先権を主張し、参照によってその全文が本明細書に組み入れられる。
【０００２】
本開示は、メッセージを購読モジュールへ送信する前に、メッセージを黒板メッセージハブにおいてフィルタリングするための方法およびシステムに関する。
【背景技術】
【０００３】
ロボットは、環境と対話するために、種々のソースからの情報の処理を要求できる。例えば、ロボットは、有益な特徴を抽出するか周囲の環境を再現するために１または複数の処理モジュールよって処理される、センサーからの知覚測定値を得ることができる。次に、抽出された特徴または再現された環境の情報は、ロボットの作動体（例えば、モータ、スピーカ、およびアクチュエータ）を制御することのような有意義なタスクを実行するために、他の処理モジュールによってアクセスされる。時には、一連の処理は、有意義なタスクを実行するために、異なる処理モジュールにおいて複雑な順序で実行されなければならない。
【０００４】
モジュール設計アプローチは、種々のタスクを実行するためのロボットを実現するために使用できる。このアプローチでは、複雑なタスクが更に小さく、更に処理しやすいタスクに細分される。次に、複数の処理モジュールが、複雑なタスクの一部である更に小さなタスクを扱うために設計でき、開発できる。一連の処理は、異なる処理モジュールにおいて他の処理モジュールによって生成された情報を使用して実行できる。また、モジュール設計アプローチは、ロボットのプログラミングにおいて重複する労力を減少させることができる。何故なら、処理モジュールが、２つ以上のタスクを実行するために再利用できるからである。
【０００５】
そのような複数のモジュールを有するロボットでは、効率的で調整された方法で情報が交換されなければならない。モジュールの数が増加するにつれてタスクは更に複雑になり、モジュール間で交換される情報の量も増加する。数が増加した処理モジュールと量が増加した情報交換を管理する１つの手段は、発行−購読アーキテクチャに基づく黒板システムである。黒板システムでは、ソースからの情報は受信モジュールへ直接送信されない。その代わり、ソースからの情報は共有リポジトリ上で記憶され、アクセス可能にされる（即ち、発行される）。受信モジュールは、発行された情報を共有リポジトリから購読する。また、受信モジュールは、他のモジュールによって購読できる共有リポジトリ上で情報を発行してもよい。
【０００６】
ロボットのコンピュータの計算能力は、エネルギー消費と熱管理のような制約のために制限されることが普通である。従って、全てのモジュールを中央コンピュータに配置する代わりに、ロボットの異なる部分に配置された複数のコンピュータまたはハードウェア装置に亘って分散させてもよい。全てのモジュールを分散させることによって、タスクの計算要求を複数のコンピュータまたはハードウェア装置で分担できる。各モジュールは、タスクの要求が多くない部分を担当してもよく、従って、中央コンピュータにおける過度の計算遅延を回避または緩和できる。更に、ロボットシステムの柔軟性を高めるために、異なるソフトウェア環境、オペレーティングシステム、およびプログラミング言語が、分散システムの各モジュールに対して使用できる。
【発明の概要】
【０００７】
実施形態が、処理モジュールがロボット中に分散した複数のコンピュータで実施される分散システムにおける発行−購読アーキテクチャに基づいてロボットを制御するための方法、システム、およびコンピュータ読み取り可能な記録媒体を提供する。ロボットは、情報を生成する複数の発行モジュールを含む。各発行モジュールは、共有のために情報が索引を付けられて記憶されるメッセージハブへ情報を送信する。複数の購読モジュールはメッセージハブ上で発行される情報を購読し、種々の有用なタスクを実行するために情報を処理する。メッセージハブは、手続き型言語に記載された条件に合致する、発行された情報のサブセットを収集および選択するためのフィルタを含む。手続き型言語は、制御流れステートメント、命令、またはループ、再帰、および分岐オペレーションを含む関数呼出しを含み得る連続的なステップから成るアルゴリズムを記述できる。
【０００８】
１実施形態では、フィルタをメッセージハブにインストールするためにフィルタ定義が使用される。フィルタ定義は、フィルタをインスタンス化またはインストールするためにメッセージハブによってコンパイルまたは翻訳実行される手続き型言語で記述される。
【０００９】
１実施形態では、フィルタ定義は Lua, Tcl または Perl のようなスクリプト言語で記述される。翻訳可能なスクリプト言語でフィルタ条件を記述することは有利である。何故なら、フィルタが、コンパイルプロセス無しにリアルタイムでメッセージハブ上で動的にインスタンス化およびインストールされるからである。
【００１０】
１実施形態では、メッセージハブは、受信した情報を第１の型の情報と第２の型の情報に分類して索引を付けるための黒板マネージャを含む。第１の型の情報は第１共有メモリに記憶でき、第２の型の情報は第２共有メモリに記憶できる。
【００１１】
１実施形態では、フィルタ定義は購読モジュールに記憶され、インストール後にメッセージハブへ送信される。フィルタ定義を購読モジュールに記憶することによってプラグインフレームワークが実施でき、そのことによって購読モジュールが、メッセージハブから受信する必要がある情報を個別化することを可能にする。
【００１２】
本明細書に記載される特徴および利点は全て包括的とは限らず、更に詳細には、図面、明細書、および特許請求の範囲に鑑みて多くの追加的な特徴および利点が当業者には明らかになるであろう。更に、本明細書中で使用される文言は主に読みやすさと教示目的のために選択され、発明の主題を描写または制限するために選択されていないという点に注意する必要がある。
【００１３】
本開示の教示は、添付図面と関連する以下の詳細な記載を考慮することによって容易に理解できる。
【図面の簡単な説明】
【００１４】
【図１】１実施形態に従う発行−購読アーキテクチャに基づく黒板システムを含むロボットを示す図である。
【図２】１実施形態に従う黒板メッセージハブのブロック図である。
【図３Ａ】１実施形態に従う黒板メッセージハブ中の黒板マネージャを示すブロック図である。
【図３Ｂ】１実施形態に従う黒板メッセージハブ中のフィルタ実行モジュールのブロック図である。
【図４】１実施形態に従う購読モジュールのブロック図である。
【図５Ａ】１実施形態に従うロボットを制御する方法を示すフローチャートである。
【図５Ｂ】１実施形態に従うロボットを制御する方法を示すフローチャートである。
【発明を実施するための形態】
【００１５】
本発明の好ましい実施形態が、類似の参照番号は同一または機能的に類似の要素を示す図を参照して記載される。
【００１６】
本明細書で「１実施形態」または「実施形態」に言及することは、実施形態に関連して記載された特定の特徴、構造、または特性が本発明の少なくとも１つの実施形態に含まれることを意味する。本明細書の色々な箇所で文言「１実施形態では」が出現することで、同じ実施形態を参照するとは限らない。
【００１７】
以下に続く詳細な記載のある部分は、コンピュータメモリ内部のデータビット上のオペレーションのアルゴリズムおよび記号的表示によって提示される。これらのアルゴリズム的記述および提示は、他の当業者に本発明の内容を最も効果的に伝えるために当業者によって使用される手段である。ここでは、および一般に、アルゴリズムは、所望する結果に至る自己矛盾のない一連のステップ（命令）と考えられる。ステップは、物理的量の物理的操作を必要とするステップである。通常、必要ではないが、これらの量は記憶、転送、結合、比較、および別の方法で操作できる電気的、磁気的、または光学的信号の形態を取る。主に教示のために、場合によっては、これらの信号をビット、値、要素、記号、文字、用語、数字、または類似のものとして参照することは便利である。更に、また、場合によっては、物理的量の物理的操作を必要とするステップの特定の配列をモジュールまたはコード装置として参照することは、一般性を失うことなく便利である。
【００１８】
しかし、これらおよび類似の用語の全ては適切な物理的量に関連付けられ、これらの量に適用される単に便利なラベルにすぎない。以下の議論から明らかなように、別の方法で特に述べない限り、「処理」「演算」「計算」「決定」「表示」「決定」または類似の用語を利用する議論が、コンピュータシステムメモリ、レジスタ、他の情報記憶装置、または転送もしくは表示装置の内部で物理的（電子的）量として表現されるデータを操作して変形させるコンピュータシステムまたは類似の電子演算装置の動作および処理に言及することが、記述全体を通して高く評価される。
【００１９】
本発明の特定の側面は、アルゴリズムの形態で記述された処理ステップおよび命令を含む。本発明の処理ステップおよび命令はソフトウェア、ファームウェア、またはハードウェアで実施できるという点、およびソフトウェアで実施されるとき、色々なオペレーティングシステムによって使用される異なるプラットフォーム上に存在して動作するようにダウンロードできるという点に注意する必要がある。
【００２０】
また、本発明は、ここでのオペレーションを実行するための装置に関する。この装置は必要な目的のために特別に構成されてもよく、またはコンピュータに記憶されたコンピュータプログラムによって選択的に起動または再構成される汎用コンピュータを含んでもよい。そのようなコンピュータプログラムは、フロッピー（登録商標）ディスク、光ディスク、ＣＤ−ＲＯＭ、光磁気ディスク、読取専用メモリ（ＲＯＭ）、ランダムアクセスメモリ（ＲＡＭ）、ＥＰＲＯＭ、ＥＥＰＲＯＭ、磁気もしくは光カード、特定用途向け集積回路（ＡＳＩＣ）、または電子的命令を記憶するのに適した任意のタイプの媒体を含む任意のタイプのディスクのような（しかし、限定されない）コンピュータ読み取り可能な記録媒体に記憶でき、各記録媒体はコンピュータシステムバスに結合される。更に、本明細書で参照されるコンピュータは単一のプロセッサを含んでもよく、または演算能力向上のために複数プロセッサ設計を利用するアーキテクチャでもよい。
【００２１】
ここで提示されるアルゴリズムおよび表示は、特定のコンピュータまたは他の装置に本質的には関連しない。また、種々の汎用システムがここでの教示によるプログラムと一緒に使用されてもよく、または必要な方法ステップを実行するために更に特化した装置を構成することが便利なことを証明してもよい。これら色々なシステムのために必要な構造は、以下の記載から現れる。尚、本発明は、特定のプログラミング言語を参照しては記載されない。ここで記載されるように本発明の教示を実施するために色々なプログラミング言語が使用できるという点、および特定の言語に対する以下の参照が本発明の実施可能要件および最良の形態の開示のために提供される点に注意する必要がある。
【００２２】
尚、本明細書中で使用される文言は読みやすさと教示目的のために主に選択され、発明の主題を描写または制限するために選択されていないという点に注意する必要がある。従って、本発明の開示は（限定されないが）本発明の範囲を示すことを目的とし、本発明の範囲は特許請求の範囲に記載される。
【００２３】
実施形態は、手続き型言語で記述された条件と照らし合わせて情報を合致させるためにフィルタを使用して複数の処理モジュールの間で情報を選択して交換するための方法、装置、およびコンピュータ読み取り可能な記録媒体を提供する。処理モジュールの間で転送される情報の量は、フィルタによって強制された条件に合致する情報のサブセットのみを収集して送信することによって減少させられる。複数の処理モジュールへ送信するために、２つ以上のフィルタが、メッセージハブ上で利用可能な情報のサブセットを適合させるようにメッセージハブにインストールされてもよい。条件を記述するために手続き型言語を使用することによって、メッセージハブは情報のサブセットを更にインテリジェントかつ柔軟に収集して選択できる。更に、購読モジュールはメッセージハブから受信した情報をフィルタリングするタスクから免れることができ、購読モジュールがより多くのリソースを他のオペレーションに振り向けることを可能にする。
【００２４】
発行モジュールおよび購読モジュールは、発行−購読アーキテクチャの一部である。発行モジュールは、情報を生成し黒板メッセージハブ上で他の処理モジュールと共有するために生成された情報を利用できるようにする処理モジュールである。購読モジュールは、発行モジュールによって生成された情報を黒板メッセージハブを介して受信する発行モジュールの対応物である。発行モジュールおよび購読モジュールは、互いに排他的ではない。処理モジュールはもう１つのモジュールから情報を受信でき（従って、購読モジュールとして機能し）、また、他のモジュールと共有するために情報を生成する（従って、発行モジュールとして機能する）。
【００２５】
メッセージハブは、発行−購読アーキテクチャで発行モジュールから受信した情報を記憶するための中央リポジトリである。メッセージハブは、黒板システム中の共有メモリを使用して実施できる。メッセージハブは、 Communicative Machines 社 （ニューヨーク州）のPsyclone ミドルウェアのような市販のソフトウェアプロダクツを従来のコンピュータ上で実行することにより実施できる。あるいは、専用のコンピュータがメッセージハブとして設計され配置されてもよい。
【００２６】
手続き型言語は、少なくとも分岐、ループ、および再帰オペレーションを使用して制御流れの実施を可能にするプログラミング言語である。ループまたは関数呼出しのような制御流れステートメントを欠き、条件付きブール表現式のみから成る言語は、ここでの手続き型言語の定義からは除外される。手続き型言語は、他にもあるが、 Lua, Tcl, Perl, Python, Java（登録商標）, および C# のような翻訳可能なスクリプト言語を含む。
【００２７】
システムアーキテクチャの概観
図１は、本発明の１実施形態に従う発行−購読アーキテクチャに基づく黒板システムを含むロボット１００を示す図である。ロボット１００は、他の構成要素もあるが、発行モジュール１１０Ａ〜１１０Ｎ（以降、「発行モジュール１１０」と総称する）、黒板メッセージハブ１２０、および購読モジュール１３０Ａ〜１３０Ｎ（以降「購読モジュール１３０」と総称する）を含む。発行モジュール１１０は情報を処理し、他のモジュールと共有するために黒板メッセージハブ１２０へ情報を送信する。他のモジュールと共有するために情報を記憶することを、以降「発行」と称する。発行モジュール１１０は、黒板メッセージハブ１２０へ転送されるメッセージ中で発行される情報を含む。次に、各購読モジュール１３０は、購読する情報を含むメッセージを黒板メッセージハブ１２０から受信する。購読モジュール１３０に適合された情報を受信することを、以降「購読」と称する。
【００２８】
発行モジュール１１０は、他にもあるが、ビデオ画像中のオブジェクトを局所化して識別すること、ビデオ画像中の人間の姿勢を識別すること、音声認識を実行すること、行動計画を生成すること、およびテキスト音声変換を実行することを含む種々のタイプのオペレーションを実行できる。発行モジュール１１０は、部分的または全体的に、ハードウェア、ソフトウェア、ファームウェア、またはそれらの組合せで実施できる。１または複数の発行モジュール１１０は、黒板メッセージハブ１２０と同じコンピュータ上に配置できる。あるいは、全ての発行モジュール１１０は、黒板メッセージハブ１２０を実施するコンピュータとは区別されたハードウェア装置で実施できる。
【００２９】
同様に、購読モジュール１３０も、発行モジュール１１０に対して上記したような種々のオペレーションを実行するために情報を受信する種々のタイプの処理モジュールであり得る。購読モジュール１３０は発行モジュール１１０と重複する機能を有してもよく、共有するための情報も発行できる。発行モジュール１１０と同様に、１または複数の購読モジュール１３０は、黒板メッセージハブ１２０と同じコンピュータ上に配置できる。あるいは、全ての購読モジュール１３０は、黒板メッセージハブ１２０を実施するコンピュータとは区別されたハードウェア装置で実現できる。
【００３０】
黒板メッセージハブ１２０は、発行モジュール１１０によって生成された情報を選択して収集する集中型メッセージハブである。また、黒板メッセージハブ１２０も、購読モジュール１３０へ情報を送信する。１実施形態では、黒板メッセージハブ１２０は、部分的または全体的に、 Communicative Machines 社（ニューヨーク州）から入手可能なPsyclone ミドルウェアを実行するコンピュータとして実現できる。図２を参照して以下で詳細に記載されるように、黒板メッセージハブ１２０は発行モジュール１１０から受信した情報を記憶し、特定の条件と合致する情報を検出し、検出された情報を購読モジュール１４０へ送信する。
【００３１】
発行モジュール１１０および購読モジュール１３０の中には、黒板メッセージハブ１２０を実施するのと同じコンピュータ上で実施できるものもある。そのような場合、モジュール１１０，１３０と黒板メッセージハブ１２０の間の情報は、共有メモリを通して直接交換してもよい。
【００３２】
図１の実施例では、購読モジュール１３０Ａ，１３０Ｂは、ロボットの作動体を制御するための機構１４０の一部でもよい。作動体は、他にもあるが、現実の出来事を起こすモータ、アクチュエータ、およびスピーカを含む種々の装置でもよい。例えば、購読モジュール１３０Ａは、オブジェクトを掴むタスクを実行するための制御信号を生成できる。一方、例えば、購読モジュール１３０Ｂは、移動するオブジェクトを注視するオペレーションを実行するための制御信号を生成できる。他の購読モジュール１３０Ｃ〜１３０Ｎは、購読モジュール１３０Ａ，１３０Ｂによるオペレーションをサポートするための他の背景情報を生成するために黒板２４８，２５２上で発行される情報を処理できる。
【００３３】
他の発行モジュール１１０および購読モジュール１３０は、ロボット１００の種々の部分に分散されたコンピュータまたはハードウェア装置上で実現できる。１実施形態では、黒板メッセージハブ１２０への／からの情報を含むメッセージは、専用のソケットを介してＴＣＰ／ＩＰ (Transmission Control Protocol/Internet Protocol) パケットで送信できる。もう１つの実施形態では、黒板メッセージハブ１２０への／からのメッセージを伝達するＴＣＰ／ＩＰの代わりに、またはＴＣＰ／ＩＰと連動してＵＤＰ (User Datagram Protocol) が使用される。メッセージは、Kristinn R. Thorisson 他の「OpenAIR 1.0 Specification」 Reykjavic University (2007) に記載されたプロトコルによって黒板メッセージハブ１２０へ／から転送でき、「OpenAIR 1.0 Specification」は参照によりその全文が本明細書に組み入れられる。
【００３４】
発行モジュール１１０によって発行された情報は、離散的データ（例えば、画像）またはデータの連続的ストリーム（例えば、ビデオストリーム、またはサウンドストリーム）でもよい。発行された情報は、他にもあるが、内部センサまたは外部ソースによって生成された未加工の情報、および他の発行モジュール１１０によって処理された情報を含む。同様に、購読モジュール１３０によって購読される情報は、離散的データまたはデータの連続ストリームでよい。１実施形態では、発行または購読のために情報を伝えるために、発行モジュール１１０、購読モジュール１３０と黒板メッセージハブ１２０の間で専用のチャネルが確立される。
【００３５】
黒板メッセージハブの実施例
図２は、本発明の１実施形態に従う黒板メッセージハブ１２０のブロック図である。黒板メッセージハブ１２０は、他の構成要素もあるが、発行元通信モジュール２１０、プロセッサ２２０、購読者通信モジュール２３０、およびメモリ２４０を含む。また、黒板メッセージハブ１２０は、黒板メッセージハブ１２０の種々の構成要素を接続するバス２５８も含む。発行元通信モジュール２１０および購読者通信モジュール２３０は、発行モジュール１１０および購読モジュール１３０とそれぞれ通信する。１実施形態では、発行元通信モジュール２１０および購読者通信モジュール２３０が単一の通信モジュールに結合される。図１を参照して上記されたように、黒板メッセージハブ１２０への／からの通信は、例えば、ＴＣＰ／ＩＰまたはＵＤＰを使用して確立できる。
【００３６】
プロセッサ２２０はデータ信号を処理し、複雑命令セットコンピュータ（ＣＩＳＣ）アーキテクチャ、縮小命令セットコンピュータ（ＲＩＳＣ）アーキテクチャ、または命令セットの組合せを実施するアーキテクチャのような種々の演算アーキテクチャから構成することができる。単一のプロセッサのみが図２に示されるが、複数のプロセッサが含まれてもよい。プロセッサ２２０は、演算論理ユニット、マイクロプロセッサ、汎用コンピュータ、またはメモリ２４０からのデータ信号を送信し受信し処理するために備えられた他の情報器具、発行元通信モジュール２１０、または購読者通信モジュール２３０から成り得る。
【００３７】
メモリ２４０は、他にもあるが、黒板マネージャ２４４、黒板２４８，２５２、フィルタマネージャ２５６、およびフィルタ実行モジュール２６０を含む種々のソフトウェア構成要素を記憶する。黒板マネージャ２４４は発行モジュール１１０によって発行された情報を分類して索引を付け、各購読モジュール１３０が異なる情報を購読することを可能にする。例えば、発行された情報は、タイムスタンプ、フレームカウント、および３次元空間内の座標によって索引を付けられる。以下で詳細に記載されるように、各購読モジュール１３０へ送信される情報のサブセットを収集して選択するために、情報の分類および索引付けはフィルタ３１０によって後で使用される。分類および索引付けの後で、黒板２４８，２５２の１つ、または黒板２４８，２５２の両方の情報を黒板マネージャ２４４が記憶する。
【００３８】
図３Ａは、１実施形態に従う黒板マネージャ２４４を示すブロック図である。黒板マネージャ２４４は、複数のインデクサ３０２Ａ〜３０２Ｎ（以降「インデクサ３０２」と総称する）を含む。フィルタ実行モジュール２６０中の対応するフィルタ３１０が、購読モジュール１３０へ送信される購読される情報として情報を収集して選択できるように、インデクサ３０２は発行された情報に索引を付ける。フィルタ定義４４４が新たにインストールされた購読モジュール１３０から受信されるとき、黒板マネージャ２４４上で各インデクサがインスタンス化されてインストールされる。もし黒板マネージャ２４４にインストールされたインデクサ３０２が新たにインストールされたフィルタ３１０に必要な索引付けを既に提供していたら、二重インデクサが黒板マネージャ２４４に集中することを回避するために新しいインデクサの生成は省略できる。あるいは、新たにインストールされたインデクサは、黒板マネージャ２４４中の既存のインデクサを交換できる。
【００３９】
図２の実施形態では、２つの黒板２４８，２５２がメモリ２４０上に提供される。２つの黒板２４８，２５２は、異なる型のデータを記憶するように割り当てられてもよい。例えば、黒板２４８は、オブジェクトの識別およびこれらオブジェクトの座標のような、ロボットのまわりのオブジェクトに関する情報を記憶できる。一方、黒板２５２は、ロボットによって特定のタスクを計画し実行することに関連する情報を記憶できる。２つの黒板２４８，２５２は同じメモリまたはコンピュータ上で実施されるものとして図２に示されるが、各黒板は別々のメモリまたはコンピュータ上で実施できる。更に、３つ以上の黒板が、更に多くの情報を記憶するため、またはロボットの機能を拡張するために使用できる。１実施形態では、黒板２４８，２５２は Psyclone ミドルウェアの「ホワイトボード」を使用して実現される。
【００４０】
フィルタマネージャ２５６はフィルタ定義４４４を購読モジュール１３０から受信し、フィルタ３１０をフィルタ実行モジュール２６０上にインストールする。フィルタ定義４４４は、購読モジュール１３０によって購読される情報を記述する。１実施形態では、フィルタ定義４４４はスクリプト言語を含む手続き型言語で記述される。購読モジュール１３０が黒板システム上にインストールされた後、フィルタマネージャ２５６は受信したフィルタ定義４４４を構文解析し、１または複数のフィルタ３１０を購読モジュール１３０に対して生成する。１実施形態では、フィルタ３１０は動的にリアルタイムで生成される。換言すれば、フィルタ３１０は、フィルタ実行エンジン２６０上にインストールできるプラグインとして実施される。図３Ｂを参照して以下で詳細に記載されるように、生成されたフィルタはフィルタ実行モジュール２６０上にインストールされる。また、フィルタマネージャ２５６は更新要求を購読モジュール１３０から受信して、要求中の購読モジュール１３０に関連するフィルタ３１０を修正する。それに応答して、フィルタマネージャ２５６はフィルタを修正または再インストールして、購読される情報を変更できる。また、フィルタ３１０のそのような更新は、黒板メッセージハブ１２０を再始動することなく、リアルタイムで実行できる。
【００４１】
図３Ｂは、１実施形態に従うフィルタ実行モジュール２６０のブロック図である。次に、フィルタマネージャ２５６によって生成されたフィルタ３１０Ａ〜３１０Ｎ（以降「フィルタ３１０」と総称する）が、フィルタ実行モジュール２６０上にインストールされる。１または複数のフィルタ３１０が、１つの購読モジュール１３０に関連付けられてもよい。フィルタ実行モジュール２６０は、黒板２４８，２５２上で発行された情報をモニタする。次に、フィルタ実行モジュール２６０は、フィルタ３１０によって指定された条件に合致する、発行された情報を収集して選択する。フィルタ実行エンジン２６０は、選択された情報をフィルタ３１０に関連付けられた購読モジュール１３０へ送信する。
【００４２】
購読モジュールの実施例
図４は、１実施形態に従う購読モジュール１３０のブロック図である。購読モジュール１３０は、他の構成要素もあるが、黒板通信モジュール４１０、プロセッサ４２０、出力通信モジュール４３０、メモリ４４０、およびバス４５０を含む。バス４５０は、購読モジュール１３０の種々の構成要素を接続する。
【００４３】
黒板通信モジュール４１０は黒板メッセージハブ１２０と通信して、購読される情報を黒板メッセージハブ１２０から受信する。また、黒板通信モジュール４１０は、フィルタ定義４４４を黒板メッセージハブ１２０へ送信する。図１を参照して上記したように、黒板通信モジュール４１０との通信は、例えば、ＴＣＰ／ＩＰまたはＵＤＰで実行できる。
【００４４】
プロセッサ４２０は、データ信号を処理する従来のまたは専用の中央処理モジュールでよい。プロセッサ４２０は、複雑命令セットコンピュータ（ＣＩＳＣ）アーキテクチャ、縮小命令セットコンピュータ（ＲＩＳＣ）アーキテクチャ、または命令セットの組合せを実施するアーキテクチャのような種々の演算アーキテクチャから構成されることができる。単一のプロセッサのみが図４に示されるが、複数のプロセッサが含まれてもよい。プロセッサ４２０は、演算論理ユニット、マイクロプロセッサ、汎用コンピュータ、またはメモリ４４０からのデータ信号を送信し受信し処理するために備えられた他の情報器具、黒板通信モジュール４１０、または出力通信モジュール４３０から成り得る。
【００４５】
メモリ４４０は、他にもあるが、フィルタ定義４４４、および出力処理モジュール４４８を記憶する。購読される情報を収集して選択するために、黒板メッセージハブ１２０のフィルタ実行モジュール２６０上にインストールされる１または複数のフィルタ３１０をフィルタ定義４４４が記述する。フィルタ定義４４４は、フィルタ実行モジュール２６０上にインストールされる１または複数のフィルタを定義する手続き型言語で条件を実施するための１または複数のステートメント、命令、または関数呼出しである。手続き型言語は、分岐、ループ、および再帰オペレーションを実行するためのステートメント、命令、または関数呼出しを記述できる任意の言語である。手続き型言語を使用することによって、フィルタ３１０によって強制される条件が柔軟かつ完全に定義でき、購読される情報から不要または冗長な情報を除去できる。また、黒板メッセージハブにおける不要または冗長な情報のフィルタリングは、購読モジュール１３０が、黒板メッセージハブから受信した情報に対してフィルタリングオペレーションを実行するタスクから免れていることを意味する。従って、不要または冗長な情報を除外するための購読モジュール１３０におけるリソースの浪費は、減少又は削除される。更に、また、ユーザが既に親しんだ手続き型言語を使用することによって、ユーザは購読される情報を都合よく管理できる。
【００４６】
１実施形態では、フィルタ定義４４４またはフィルタ定義４４４に関連するパラメータは、出力処理モジュール４４８によって更新または修正される。出力処理モジュール４４８は、例えば、オペレーションの状況（例えば、ロボットが室内にある、またはロボットが室外にある）によって異なる情報を購読する必要がある。もしそのような必要が生じたら、更新または修正されたフィルタ定義４４４が黒板メッセージハブ１２０へ送信され、更新されたフィルタ定義４４４に従ってフィルタ３１０を修正または再インストールする。フィルタ更新手順が黒板メッセージハブ１２０または処理モジュール１１０，１３０において実行される他のオペレーションに割り込まないように、フィルタ３１０の修正または再インストールは動的にリアルタイムで実行できる。
【００４７】
出力処理モジュール４４８は、黒板メッセージハブ１２０から受信した情報に基づいて種々の処理を実行する。出力処理モジュール４４８において実行される処理は、他にもあるが、行動計画作成、ビデオ画像からのオブジェクトの抽出および識別、音声合成、音声認識、ならびに種々の他のタイプの信号処理を含む。次に、ロボット１００の他の構成要素への転送のために、出力処理モジュール４４８において生成される情報または信号が出力通信モジュール４３０へ送信される。
【００４８】
購読モジュール１３０の出力通信モジュール４３０は、黒板メッセージハブ１２０またはロボットの作動体と通信する。また、購読モジュール１３０の出力通信モジュール４３０は、黒板メッセージハブ１２０を迂回して、他の処理モジュールと直接通信してもよい。
【００４９】
１実施形態では、購読モジュール１３０がロボット１００からアンインストールされるか機能停止されたとき、購読モジュール１３０に関連するフィルタ３１０およびインデクサ３０２は除去される。この方法では、もう１つの購読モジュールのインストールのために、黒板メッセージハブ１２０のリソースが解放されてもよい。
【００５０】
処理モジュールと黒板メッセージハブの間の通信
１実施形態では、黒板メッセージハブ１２０への／からの情報は、拡張可能なクラスからインスタンス化されるメッセージにカプセル化される。特に、発行または購読される情報を含むメッセージは、ベースクラスから拡張可能なサブクラスのインスタンスでもよい。ベースクラスは、メッセージを転送するために不可欠な属性、例えば、メッセージの送信者おおび時間情報を含んでもよい。拡張されたサブクラスは、不可欠な属性に加えて、物理的オブジェクトの位置または配置のような特化された属性を含んでもよい。拡張可能なクラスからメッセージをインスタンス化することによって、発行または購読される情報を含むメッセージが、ユーザによって容易に理解でき処理モジュールによって扱われる標準化された形式で提示できる。以下の表１は、ベースクラスの実施例で不可欠な属性を示す。
【００５１】
【表１】
0005537432.tif 000002
【００５２】
サブクラスからインスタンス化されたメッセージの実施例は、ＣＭオブジェクトである。ＣＭオブジェクトは、センサ入力から識別されるかコンピュータアルゴリズムによって仮想オブジェクトとして創出された物理的オブジェクトに対してメッセージを提示する。ＣＭオブジェクトは、表１に記載された基本属性に加えて、表２でリストに記載された属性を含む。
【００５３】
【表２】
0005537432.tif 000003
【００５４】
また、ＣＭオブジェクトクラスは、 Tabletop クラスまたは Mug クラスのようなサブクラスへ更に拡張されてもよい。 Tabletop クラスおよび Mug クラス は、 tabletop および mug についての情報を含むメッセージにそれぞれ関連付けられる。 Tabletop クラスは、表１および表２でリストに記載された属性に加えて、長さおよび幅のような追加の属性を含んでもよい。一方、 Mug クラスは、底部半径および高さのような追加の属性を含んでもよい。
【００５５】
フィルタ定義の実施例
１実施形態では、フィルタ定義４４４はスクリプト言語 Lua で記述される。このフィルタ定義４４４によってインストールされたフィルタ３１０は、オブジェクトの位置がテーブルの領域内にあるか否かをチェックするために使用される。フィルタは４つのテーブルエッジの各々をループして、テーブルに対応する側にポイントがあるか否かを確かめるためにブール代数チェックを実行する。もし４つの条件全てが各エッジに対して真なら、フィルタは真を返し、オブジェクトが購読者モジュールへ送信されることを可能にする。以下の表３は、そのようなオペレーションを実行するフィルタに対するサンプル擬似コードを含む。以下のサンプルでは、購読モジュールは、テーブルコーナについての情報、例えば、（0,3,2）（0,0,2）（3,0,2）および（3,3,2）によって識別される座標を既に有すると仮定される。
【００５６】
【表３】
0005537432.tif 000004
【００５７】
黒板システムを使用してロボットを制御する方法
図５Ａ，５Ｂは、１実施形態に従う黒板システムを使用してロボット１００を制御するための方法を示すフローチャートである。購読モジュール１３０が黒板システムにインストールされた後、購読モジュール１３０がフィルタ定義４４４を黒板メッセージハブ１２０へ送信する（５０４）。黒板メッセージハブ１２０は、フィルタ定義４４４を購読モジュール１３０から受信する（５０８）。黒板メッセージハブ１２０は、フィルタ３１０およびインデクサ３０２を購読モジュール１３０用にインストールする（５１２）。特に、黒板メッセージハブ１２０は購読モジュール１３０から受信したフィルタ定義４４４を構文解析し、購読モジュール１３０に関連するフィルタ３１０をインストールする。もし新たにインストールされたフィルタによって要求されるような索引付けを提供するためにインデクサが既に利用可能であるなら、新しいインデクサの生成およびインストールは省略できる。
【００５８】
発行モジュール１１０は、発行する情報を生成する（５１６）。情報はメッセージに含まれ、次に黒板メッセージハブ１２０へ送信される（５２０）。発行される情報を含むメッセージは、黒板メッセージハブ１２０において受信される（５２４）。黒板メッセージハブ１２０のインデクサ３０２は受信した情報に索引を付け（５２８）、索引を付けられた情報を１または複数の黒板２４８，２５２に格納する（５３２）。黒板メッセージハブ１２０上にインストールされたフィルタ３１０が、購読される情報として黒板２４８，２５２に記憶される情報のサブセットを収集して選択する（５３６）。購読される情報はメッセージに含まれ、次に購読モジュール１３０へ送信される（５４０）。
【００５９】
購読モジュール１３０は、黒板メッセージハブ１２０から、購読される情報を含むメッセージを受信する（５４４）。次に、購読される情報は購読モジュール１３０において処理され（５４８）、出力を生成する。次に、購読モジュールからの生成された出力は、ロボット１００の作動体を制御するために使用されるか、または他の購読モジュール１３０によって購読される情報の一部になるように黒板メッセージハブ１２０上で再度発行されてもよい。次に、プロセスは、発行モジュール１１０における発行のための情報生成のステップに戻る。また、新しい購読モジュールが追加されるとき、追加された購読モジュールに対してステップ５０４〜５１２が繰り返されてもよい。
【００６０】
簡潔さのために、図５Ａおよび図５Ｂの実施形態は１つの発行モジュールおよび１つの購読モジュールのみを使用して記載されたが、複数の発行モジュールおよび購読モジュールが図５Ａおよび図５Ｂに記載されるのと同じプロセスで動作してもよい。
【００６１】
本発明は実施形態を参照して記載したが、種々の修正が本発明の範囲内で可能である。従って、本発明の開示は（限定されないが）本発明の範囲を示すことを目的とし、本発明の範囲は特許請求の範囲に記載される。
【符号の説明】
【００６２】
１００      ロボット
１１０Ａ〜１１０Ｎ      発行モジュール
１２０      黒板メッセージハブ
１３０Ｃ〜１３０Ｎ      購読モジュール
１４０      購読モジュール
２１０      発行元通信モジュール
２２０      プロセッサ
２３０      購読者通信モジュール
２４０      メモリ
２４４      黒板マネージャ
２４８，２５２      黒板
２５６      フィルタマネージャ
２６０      フィルタ実行モジュール
３０２Ａ〜３０２Ｎ      インデクサ
３１０      フィルタ
４１０      黒板通信モジュール
４２０      プロセッサ
４３０      出力通信モジュール
４４０      メモリ
４４４      フィルタ定義
４４８      出力処理モジュール
４５０      バス
【図１】
0005537432.tif 000005
【図２】
0005537432.tif 000006
【図３Ａ】
0005537432.tif 000007
【図３Ｂ】
0005537432.tif 000008
【図４】
0005537432.tif 000009
【図５Ａ】
0005537432.tif 000010
【図５Ｂ】
0005537432.tif 000011