遠隔プラグイン装置、ロボットプラグイン実行エンジン装置及びロボットプラグイン実行システム
【課題】ロボットの各プラグイン(モジュール)を遠隔地で実行することで、ロボット応用を動的に構成し、多数のコンピューティングリソースを活用する。
【解決手段】ロボット100にはロボットプラグインを実行するためのロボットプラグイン実行エンジン装置110が搭載され、遠隔地コンピュータ200には多数の遠隔プラグイン装置210が搭載される。ロボットプラグインはローカル又は遠隔プラグインになることができ、遠隔プラグインを遠隔地のロボットにローディングして実行するが、遠隔プラグインはロボットプラグイン実行エンジン装置が搭載されたコンピューティングノードとは異なるコンピューティングノードで実行されるプラグインであり、多数の遠隔地コンピュータで実行される各プラグインはロボットプラグイン実行エンジン装置に登録した後、それに相応する各種サービスの提供を受けることができる。
【解決手段】ロボット100にはロボットプラグインを実行するためのロボットプラグイン実行エンジン装置110が搭載され、遠隔地コンピュータ200には多数の遠隔プラグイン装置210が搭載される。ロボットプラグインはローカル又は遠隔プラグインになることができ、遠隔プラグインを遠隔地のロボットにローディングして実行するが、遠隔プラグインはロボットプラグイン実行エンジン装置が搭載されたコンピューティングノードとは異なるコンピューティングノードで実行されるプラグインであり、多数の遠隔地コンピュータで実行される各プラグインはロボットプラグイン実行エンジン装置に登録した後、それに相応する各種サービスの提供を受けることができる。
【発明の詳細な説明】
【技術分野】
【0001】
本発明はロボットプラグイン技法に関し、更に詳しくは、ロボットの各プラグイン(モジュール)を遠隔地で実行することで、ロボット応用を動的に構成し、多数のコンピューティングリソースを活用するのに適した遠隔プラグイン装置、ロボットプラグイン実行エンジン装置及びロボットプラグイン実行システムに関する。
【背景技術】
【0002】
従来のロボットソフトウェアは各機能を担当するモジュールが静的に結合されて1つの実行プログラムで実体化され、それがロボットに搭載されて実行する構造を有するのが一般的であった。
【0003】
しかしながら、このような方式はロボットプラットフォームの変更、ロボットモジュールの機能向上及び変更による既存モジュールの交換時には、ロボットプログラム全体を再コンパイルしなければならないという負担があり、各モジュールの開発時に独立的な開発が難しく、ロボットの内部や外部に存在する多数のコンピューティングノードを利用できないため、非効率的であるという短所がある。
【0004】
このような点を解決するための従来技術の1つとして、ロボットソフトウェアをコンポーネントで構成する方式であって、各モジュールをコンポーネント化してロボットや外部コンピューティングノードで実行する方式が挙げられる。
【0005】
即ち、コンポーネント技術は遠隔地でロボット応用を構成するモジュール(コンポーネント)を実行することが可能であった。この方式では遠隔地にもロボットモジュールをローディングし、実行できるコンポーネント実行エンジンが設けられ、この遠隔エンジンがコンポーネントをローディングして実行する方式である。
【0006】
従って、従来のコンポーネント技術はコンポーネント単独では実行できず、その実体化の方式も動的ライブラリ(.dll又は.so)の形であった。即ち、この方式はそれぞれのコンピューティングノードにコンポーネント実行エンジンが搭載されなければならない方式である。
【0007】
また、従来のコンポーネント技術は遠隔地で実行が可能であるものの、コンポーネントエンジンがコンポーネントを活用するために関連情報をプロファイルに正確に記述しなければならなかった。このプロファイル情報には他のコンポーネントとの連結性、コンポーネントインターフェースなど自らの属性を記述した情報が含まれる。従って、開発者はコンポーネント自体の開発と共にプロファイル情報を共に記述しなければならなかった。
【0008】
従来の他の技術はプラグイン方式を用いたロボットソフトウェアのモジュール化方式である。
【0009】
このような従来のロボットプラグイン技術はプラグインエンジンが存在するローカル上でのみモジュールをプラグインすることができた。従って、ネットワーク上に存在する各種コンピューティングリソースを効率的に活用するためにロボットプラグイン実行エンジンと他のコンピューティングノードで実行可能なモジュールを支援する必要がある。
【先行技術文献】
【特許文献】
【0010】
【特許文献1】米国特許公開第2008-0133052号
【発明の概要】
【発明が解決しようとする課題】
【0011】
しかしながら、ロボットソフトウェアをコンポーネントで構成する従来方式は、各コンポーネントが動作するコンピューティングノードに別途のコンポーネント実行エンジンが搭載されなければならないため、コンポーネント単独では実行が不可能である。また、コンポーネント同士の連結やコンポーネントが有するインターフェースを記述するプロファイル情報を共に提供しなければならないため、コンポーネントの開発が容易ではなく、そのため、大部分専用の開発道具を用いなければならないという短所がある。
【0012】
一方、従来のプラグイン方式は、プラグイン実行エンジンが存在するコンピューティングノード上でのみプラグインが存在しなければならないため、ネットワーク上でプラグインの機能を活用できないという問題がある。
【課題を解決するための手段】
【0013】
そこで、本発明は上記事情に鑑みてなされたものであって、その目的は、ロボットの各プラグイン(モジュール)を遠隔地で実行することで、ロボット応用を動的に構成し、多数のコンピューティングリソースを活用するのに適した遠隔プラグイン装置、ロボットプラグイン実行エンジン装置及びロボットプラグイン実行システムを提供することにある。
【0014】
前記目的を達成するために本発明の一観点によれば、各遠隔プラグインの内部に入っている各遠隔オブジェクトを管理するオブジェクト管理者と、前記各遠隔オブジェクトが登録したシンボルをロボットプラグイン実行エンジン装置に登録して管理するシンボルサービス管理者と、前記各遠隔オブジェクトが登録した関数を前記ロボットプラグイン実行エンジン装置に登録して管理する関数サービス管理者と、前記各遠隔オブジェクトが登録した通知関数を前記ロボットプラグイン実行エンジン装置に登録して管理する通知サービス管理者と、前記各遠隔オブジェクトが登録したタイマを前記ロボットプラグイン実行エンジン装置に登録して管理するタイマサービス管理者と、ネットワークを介して前記各管理者と前記ロボットプラグイン実行エンジン装置との通信を担当する連結管理者とを含む遠隔プラグイン装置を提供する。
【0015】
ここで、本発明の遠隔プラグイン装置内のオブジェクト管理者はロボットプラグイン実行エンジン装置に登録しようとする遠隔オブジェクトが生成される時、生成された遠隔オブジェクトを内部オブジェクトテーブルに格納した後、連結管理者に伝達し、シンボルサービス管理者は特定遠隔オブジェクトが外部に露出させようとするシンボルを登録する時、該当シンボルに対する名前と該当シンボルに対する参照を結合してシンボルテーブルエントリを構成した後、連結管理者に伝達し、関数サービス管理者は特定遠隔オブジェクトが外部に露出させようとする関数を登録する時、関数に対する名前と関数に対する参照を結合して関数テーブルエントリを構成した後、連結管理者に伝達し、通知サービス管理者は特定遠隔オブジェクトが登録しようとする通知サービスのために対象シンボルの名前とコールバックされる関数に対する参照が伝達される時、対象シンボルに対する名前とコールバック関数に対する参照を結合して通知テーブルエントリを構成した後、連結管理者に伝達し、タイマサービス管理者は特定遠隔オブジェクトが登録しようとするタイマサービスのためにコールバックする関数に対する参照と呼び出される周期が伝達される時、タイマ名と関数に対する参照を結合してタイマテーブルエントリを構成した後、連結管理者に伝達する。
【0016】
本発明の他の観点によれば、各ローカルプラグインの内部に入っているオブジェクトを管理し、オブジェクトの登録要請がある時、それに相応するオブジェクトプロキシを生成及び登録するオブジェクト管理者と、前記各ローカルプラグインで登録したシンボルを管理し、各シンボルの参照及び変更を担当するシンボルサービス管理者と、前記各ローカルプラグインで登録した関数を管理し、各関数に対する呼び出し及び結果値の返還を担当する関数サービス管理者と、特定イベントが発生する時、該当ローカルプラグインで登録した関数を呼び出す通知サービス管理者と、特定周期別に前記各ローカルプラグインで登録した関数を呼び出すタイマサービス管理者と、ネットワークを介して前記各管理者と遠隔プラグイン装置との通信を担当する連結管理者とを含むロボットプラグイン実行エンジン装置を提供する。
【0017】
ここで、本発明のロボットプラグイン実行エンジン装置内のオブジェクト管理者は、遠隔プラグイン装置から登録の要請を受けたオブジェクト名と同じ名前を有するオブジェクトプロキシ客体を生成してプロキシとして登録し、シンボルサービス管理者は遠隔プラグイン装置からシンボルの登録要請を受けた該当シンボル名と相応するプロキシオブジェクトの参照を結合してシンボルサービスエントリを構成した後、シンボルサービステーブルに登録し、関数サービス管理者は遠隔プラグイン装置から関数の登録要請を受けた関数名と呼び出される関数名を結合して関数サービスエントリを構成した後、関数サービステーブルに登録し、通知サービス管理者は遠隔プラグイン装置から通知の登録要請を受けた該当シンボル名と呼び出される関数名を結合して通知サービスエントリを構成した後、通知サービステーブルに登録し、タイマサービス管理者は遠隔プラグイン装置からタイマの登録要請を受けたタイマ名と自身が関数を結合してタイマサービスエントリを構成した後、タイマサービステーブルに登録する。
【0018】
本発明の更に他の観点によれば、各遠隔プラグインの内部に入っている各遠隔オブジェクトを管理し、連結管理者を利用したネットワーク通信を通じて前記各遠隔オブジェクトが登録したシンボル、関数、通知関数、タイマをロボットプラグイン実行エンジンに登録して管理する遠隔プラグインと、各ローカルプラグインの内部に入っているオブジェクトを管理し、連結管理者を利用したネットワーク通信を通じて前記各ローカルプラグインで登録したシンボル、各関数、前記各関数に対する呼び出し及び結果値の返還、前記各関数の呼び出しをサービスする前記ロボットプラグイン実行エンジンを含むロボットプラグイン実行システムを提供する。
【発明の効果】
【0019】
本発明はロボット応用プログラムがネットワーク上で散在する各種コンピューティングノードに搭載された遠隔プラグインを動的にプラグイン実行エンジンに連結されるようにすることで、以下のような効果が得られる。
【0020】
第1に、ネットワークコンピューティング能力の最大化を図ることができる。即ち、ロボットソフトウェアをなす各機能をモジュール別に分け、各機能モジュールをネットワーク上で分散されたコンピューティングノードに割り当てて実行することで、各コンピューティングノードが有しているコンピューティング能力を十分に活用できるだけでなく、ロボット自体の計算要求を減少させることで、ロボットがより効率よくコンピューティングリソースを使用できる。
【0021】
第2に、ソフトウェアモジュールの独立実行が可能となる。即ち、ロボットソフトウェアを構成する各モジュールをロボット遠隔プラグインで作成し、各遠隔プラグインが独立して実行可能なファイル形式で具体化される。これにより、遠隔地でプラグインを独立して実行するため、別途の実行エンジンを遠隔地で実行しなくても済むという長所がある。これは遠隔地コンピューティングリソース(メモリ、計算能力)に対する要求量を減少させて遠隔地コンピューティングリソースの効率的な使用にも貢献し、使用の便宜性も増大される。
【0022】
第3に、モジュール開発の単純化が期待される。既存のコンポーネント方式のモジュール支援ではコンポーネントがコンポーネント実行エンジンに搭載されるように各種プロファイル情報を共に記述したが、本発明はこのようなプロファイル情報を不要とするため、開発者はロボット遠隔プラグインモジュールの開発にのみ集中すればよい。従って、開発過程が単純化され、開発の効率性と誤りの可能性を低減できる。
【0023】
第4に、チーム開発の容易性が増大する。従来のプラグイン方式はローカルでのみプラグインが支援される方式であったため、各プラグインの開発者は同じコンピューティングリソースへ地理的にアクセス可能な場所に集まって開発及びテストを進めなければならなかった。しかしながら、本発明は遠隔地でもソフトウェアモジュールを実行し、このソフトウェアモジュールがロボットに搭載されたプラグイン実行エンジンに接続して相互作用する方式であるため、各モジュールの開発を担当する多数のチームが個別で開発を進めることが可能である。
【図面の簡単な説明】
【0024】
【図1】本発明によってロボットと遠隔地コンピュータがネットワークを介して連結される構造を示すシステム系統図である。
【図2】本発明によるロボットプラグイン実行エンジン装置のブロック構成図である。
【図3】本発明による遠隔プラグイン装置のブロック構成図である。
【図4】本発明による遠隔オブジェクトとオブジェクトプロキシの構造図である。
【図5】ロボット遠隔プラグイン装置が内部にあるオブジェクトをロボットで実行中のロボットプラグイン実行エンジン装置に登録する過程を説明する構成図である。
【図6】遠隔オブジェクトが外部に露出させようとするシンボルを登録する過程を説明する構成図である。
【図7】遠隔オブジェクトが外部に露出させようとする関数を登録する過程を説明する構成図である。
【図8】遠隔オブジェクトが通知サービスを登録する過程を説明する構成図である。
【図9】遠隔オブジェクトがタイマサービスを登録する過程を説明する構成図である。
【図10A】各種遠隔プラグイン装置が、各種遠隔プラグイン装置自身が持っている遠隔オブジェクトに対する登録及び初期化が完了した状態における一連の動作を示す図である。
【図10B】各種遠隔プラグイン装置が、各種遠隔プラグイン装置自身が持っている遠隔オブジェクトに対する登録及び初期化が完了した状態における一連の動作を示す図である。
【図10C】各種遠隔プラグイン装置が、各種遠隔プラグイン装置自身が持っている遠隔オブジェクトに対する登録及び初期化が完了した状態における一連の動作を示す図である。
【発明を実施するための形態】
【0025】
以下、添付する図面を参照して本発明の好適な実施形態について詳細に説明する。
【0026】
なお、下記の本発明を説明するにおいて公知となった機能又は構成などに関する具体的な説明が本発明の要旨を不要に曖昧にするおそれがあると判断される場合にはその詳細な説明を省略する。そして、後述する用語は、本発明における機能を考慮して定義されたものであって、これはユーザ、運用者などの意図又は慣例などによって変わり得るのはもちろんである。従って、その定義は本明細書の全般に渡って記述される技術思想に基づいてなされるべきである。
【実施例】
【0027】
図1は、本発明によってロボットと遠隔地コンピュータがネットワークを介して連結される構造を示すシステム系統図であって、ロボット100にはロボットプラグインを実行するためのロボットプラグイン実行エンジン装置110が搭載され、遠隔地コンピュータ200には多数の遠隔プラグイン装置210が搭載される。
【0028】
ここで、ロボットプラグインはローカル又は遠隔プラグインになることができ、本発明では遠隔プラグインを遠隔地のロボットにローディングして実行するが、遠隔プラグインはロボットプラグイン実行エンジン装置が搭載されたコンピューティングノードとは異なるコンピューティングノードで実行されるプラグインである。即ち、多数の遠隔地コンピュータで実行される各プラグインはロボットプラグイン実行エンジン装置に登録した後、それに相応する各種サービスの提供を受けることができる。
【0029】
遠隔地コンピュータ200の遠隔プラグイン装置210ではオブジェクト、シンボルサービス、関数サービス、通知サービス、タイマサービスなどと関連したプラグインをロボットプラグイン実行エンジン装置110に搭載し、ロボット100のロボットプラグイン実行エンジン装置110では搭載されたプラグインに相応する各種サービスを遠隔プラグイン装置210に提供する。
【0030】
図2は、本発明によるロボットプラグイン実行エンジン装置のブロック構成図であって、オブジェクト管理者111、シンボルサービス管理者112、関数サービス管理者113、通知サービス管理者114、タイマサービス管理者115及び連結管理者116などを含む。
【0031】
オブジェクト管理者111は、それぞれの遠隔プラグインの内部に入っているオブジェクトを管理するモジュールを意味するものであって、遠隔プラグイン装置210からオブジェクトの登録要請がある時、これに相応して生成されるオブジェクトプロキシ客体を登録するなどの機能を行う。
【0032】
次に、シンボルサービス管理者112は各遠隔プラグインで登録したシンボルを管理し、これらのシンボルに対する参照及び変更を担当するサービスモジュールを意味するものであって、遠隔プラグイン装置210からシンボルの登録要請がある時、シンボルの名前とプロキシオブジェクトの参照を結合してシンボルサービスエントリを作った後、これをシンボルサービステーブルに登録するなどの機能を行う。
【0033】
また、関数サービス管理者113は、各遠隔プラグインで登録した関数を管理し、これらの関数に対する呼び出し及び結果値の返還を担当するサービスモジュールを意味するものであって、遠隔プラグイン装置210から関数の登録要請がある時、伝達を受けた関数名と呼び出される関数名を結合して関数サービスエントリを作った後、これを関数サービステーブルに登録するなどの機能を行う。
【0034】
そして、通知サービス管理者114は特定イベントが発生した時、遠隔プラグインで登録した関数を呼び出すサービスモジュールを意味するものであって、遠隔プラグイン装置210から通知の登録要請がある時、伝達を受けたシンボル名と呼び出される関数名を結合して通知サービスエントリを作った後、これを通知サービステーブルに登録するなどの機能を行う。
【0035】
次に、タイマサービス管理者115は特定周期別にローカルプラグインで登録した関数を呼び出す機能を提供するサービスモジュールを意味するものであって、遠隔プラグイン装置210から通知の登録要請がある時、タイマ名とコールバックされる関数を結合して作られるタイマサービスエントリをタイマサービステーブルに登録するなどの機能を行う。
【0036】
最後に、連結管理者116は遠隔プラグイン装置210との通信を担当するモジュールを意味するものであって、遠隔プラグイン装置210からネットワークを介してオブジェクト、シンボルサービス、関数サービス、通知サービス、タイマサービスなどに対する登録要請が受信される時、それと関連したオブジェクトプロキシ客体を生成、或いはオブジェクトに相応するプロキシを探してオブジェクト管理者111、シンボルサービス管理者112、関数サービス管理者113、通知サービス管理者114、タイマサービス管理者115などに客体への登録を要請するなどの機能を行う。
【0037】
図3は、本発明によるロボット遠隔プラグイン装置のブロック構成図であって、オブジェクト管理者211、シンボルサービス管理者212、関数サービス管理者213、通知サービス管理者214、タイマサービス管理者215及び連結管理者216などを含むが、各遠隔プラグインは多数のオブジェクト(オブジェクト1、オブジェクト2、...オブジェクトN)を定義できる。
【0038】
図3を参照すれば、オブジェクト管理者211は、各遠隔プラグイン装置210の内部に入っている遠隔オブジェクトを管理するモジュールを意味するものであって、遠隔プラグイン装置210の内部にある遠隔オブジェクトをロボットで実行中のロボットプラグイン実行エンジン装置110に登録しようとする時、遠隔プラグイン装置210でオブジェクトが生成されれば、生成された遠隔オブジェクトを自身の内部テーブルに保管した後、連結管理者216を通じてロボットプラグイン実行エンジン装置110側にオブジェクトの登録を要請するなどの機能を行う。
【0039】
これに応答して、ロボットプラグイン実行エンジン装置110内の連結管理者116では登録の要請を受けたオブジェクト名Aと同じ名前を有するオブジェクトプロキシ客体Aを生成し、このように生成されたオブジェクトプロキシ客体Aはロボットプラグイン実行エンジン装置110にプロキシとして登録される。
【0040】
また、シンボルサービス管理者212は、各遠隔オブジェクトが登録したシンボルをロボットプラグイン実行エンジン装置110に登録して管理する役割を果たすモジュールを意味する。即ち、遠隔オブジェクトが外部に露出させようとするシンボルを登録しようとする時、遠隔オブジェクトが登録しようとするシンボル(A.symbol_1)とオブジェクト客体を渡せば、シンボルテーブルに該当シンボルに対する名前(A.symbol_1)とシンボルに対する参照(A.symbol_1)を結合してシンボルテーブルエントリを構成した後、連結管理者216を通じてロボットプラグイン実行エンジン装置110側にシンボルに対する登録を要請するなどの機能を行う。これは各シンボルや関数など遠隔オブジェクトが露出させる全てのエンティティ(entity)がロボットプラグイン実行エンジン装置110に登録されなければ他のプラグインで活用できないためである。
【0041】
これに応答して、ロボットプラグイン実行エンジン装置110内の連結管理者116ではシンボルの登録要請を送ったオブジェクトに相応するプロキシを探し(オブジェクトプロキシA)、この客体にシンボルの登録を要請し、このようなプロキシオブジェクトは要請を受けたシンボル名とプロキシオブジェクト自身の参照をシンボルサービス管理者112に伝達する。その結果、シンボルサービス管理者112は、シンボルの名前とプロキシオブジェクトの参照を結合してシンボルサービスエントリを作った後、これをシンボルサービステーブルに登録する。
【0042】
次に、関数サービス管理者213は、各遠隔オブジェクトが登録した関数をロボットプラグイン実行エンジン装置110に登録して管理する役割を果たすモジュールを意味するものであって、遠隔オブジェクトが外部に露出させようとする関数を実行エンジン装置110に登録しようとする時、遠隔オブジェクトが登録しようとする関数(A.f1)を渡せば、関数テーブルに関数に対する名前(「A.f1」)と関数に対する参照(A.f1)を結合して関数テーブルエントリを構成した後、連結管理者216を通じてロボットプラグイン実行エンジン装置110側に関数に対する登録を要請するなどの機能を行う。
【0043】
これに応答して、ロボットプラグイン実行エンジン110内の連結管理者116では関数の登録要請を送ったオブジェクトに相応するプロキシを探し(オブジェクトプロキシA)、この客体に関数登録を要請し、このようなプロキシオブジェクトは要請を受けた関数名とこの関数が呼び出される時に、代わりに呼び出される関数(on_any_function)を関数サービス管理者113に登録要請し、その結果、関数サービス管理者113では伝達を受けた関数名(A.f1)と呼び出される関数名(A.on_any_function)を結合して関数サービスエントリを作った後、これを関数サービステーブルに登録する。
【0044】
そして、通知サービス管理者214は、各遠隔オブジェクトが登録した通知関数をロボットプラグイン実行エンジン装置110に登録して管理する役割を果たすモジュールを意味する。ロボットプラグイン実行エンジン装置110に登録された特定シンボルが変更される場合、これを通知するためのサービスを提供するが、例えば、シンボルの値が変更される場合、通知サービスに登録された関数を呼び出すサービスである。
【0045】
まず、遠隔オブジェクトが登録しようとする通知サービスのために対象シンボルの名前とコールバックされる関数に対する参照を通知サービス管理者214に伝達すれば、通知サービス管理者214は通知テーブルにシンボルに対する名前(「B.symbol_1」)とコールバック関数に対する参照(A.on_B.symbol_1_changed)を結合して通知テーブルエントリを構成した後、連結管理者216を通じてロボットプラグイン実行エンジン装置110側に通知登録を要請するなどの機能を行う。
【0046】
これに応答して、ロボットプラグイン実行エンジン装置110の連結管理者116では通知の登録要請を送ったオブジェクトに相応するプロキシを探し(オブジェクトプロキシA)、この客体に通知登録を要請し、プロキシオブジェクトは要請を受けたシンボル名とこのシンボルが変更された時、通知を受けるコールバック関数(on_any_symbol_changed)を関数サービス管理者113に登録要請する。ここで、on_any_symbol_changed関数は該当オブジェクトが登録する全ての通知サービスのために設けられる共通コールバック関数を意味する。即ち、対象シンボルの名前が変更されてもロボットプラグイン実行エンジンに登録されるコールバック関数は同一である。その理由は、この関数を通じて相応する遠隔オブジェクトに要請を伝達する機能のみを行い、実際のコールバック関数の呼び出しは遠隔プラグイン装置で行われるためである。ロボットプラグイン実行エンジン装置110の通知サービス管理者114は、伝達を受けたシンボル名(B.symbol_1)と呼び出される関数名(A.on_any_symbol_changed)を結合して通知サービスエントリを作った後、これを通知サービステーブルに登録する。
【0047】
また、タイマサービス管理者215は、各遠隔オブジェクトが登録したタイマをロボットプラグイン実行エンジン装置110に登録して管理する役割を果たすモジュールを意味するものであって、タイマサービスは一定の周期毎にロボットプラグイン実行エンジン装置110が遠隔オブジェクトの特定関数を呼び出すサービスである。
【0048】
まず、遠隔オブジェクトが登録しようとするタイマサービスのためにコールバックされる関数に対する参照(A.on_timeout_1)と呼び出される周期(1秒)をタイマサービス管理者215に伝達すれば、タイマサービス管理者215はタイマ名(「A.on_timeout_1」)と関数に対する参照(A.on_timeout_1)と結合してタイマテーブルエントリを構成した後、連結管理者216を通じてロボットプラグイン実行エンジン装置110側にタイマサービスの登録を要請するなどの機能を行う。
【0049】
これに応答して、ロボットプラグイン実行エンジン装置110の連結管理者116ではこの要請を送ったオブジェクトに相応するプロキシを探し(オブジェクトプロキシA)、この客体にタイマサービスの登録を要請し、プロキシオブジェクトは伝達を受けたタイマ名(A.timeout_1)と自身の関数であるon_any_timeoutを結合してタイマサービスエントリを作った後、これをタイマサービス管理者115に登録要請し、タイマサービス管理者115はタイマサービスエントリをタイマサービステーブルに登録する。ここで、on_any_timeout関数はオブジェクトが登録する全てのタイマサービスのために設けられる共通コールバック関数である。即ち、対象タイマの名前が変更されてもロボットプラグイン実行エンジン装置110に登録されるコールバック関数は同一である。その理由は、この関数を通じて相応する遠隔オブジェクトにタイムアウトを伝達する機能のみ行い、実際のコールバック関数の呼び出しは遠隔プラグイン装置210で行われるためである。
【0050】
そして、連結管理者216はネットワークを介して遠隔プラグイン装置210とロボットプラグイン実行エンジン装置110との通信を担当するモジュールである。
【0051】
図4は、本発明による遠隔オブジェクトとオブジェクトプロキシの構造を示すものであって、遠隔オブジェクト410は遠隔地コンピュータ200に搭載された遠隔プラグイン装置210内で定義されて実体化され、オブジェクトプロキシ420はロボット100に搭載されたロボットプラグイン実行エンジン装置110で実体化されるが、ここで、遠隔オブジェクト410は、登録インターフェース412、共通インターフェース414、個別インターフェース/個別データ定義部416からなる3つの部分の論理領域で構成され、オブジェクトプロキシ420は登録インターフェース422及び共通インターフェース424からなる2つの部分の論理領域で構成される。
【0052】
まず、遠隔プラグイン装置210で登録された各オブジェクトはロボットプラグイン実行エンジン装置110でそれに相応するプロキシを生成するようになる。即ち、遠隔オブジェクト410とオブジェクトプロキシ420は一対で生成されて消滅する。
【0053】
遠隔プラグイン装置210は、登録インターフェース412に定義されたオブジェクトに対する生成、削除を担当する関数をプラグインに伝達するが、プラグインがこの関数を呼び出すことで、特定オブジェクトに対する客体を生成又は削除するようになる。
【0054】
そして、共通インターフェース414は、オブジェクトとプラグイン間で予め約束されたインターフェースであって、オブジェクトを初期化するためのInit()、そして、オブジェクトを活性化するためのOn()、オブジェクトを非活性化するためのOff()で構成される。
【0055】
また、個別インターフェース/個別データ定義部416は、個別オブジェクトで定義する部分であって、実際のオブジェクトで行う主要関数及びシンボルはこの部分で定義され、この部分はオブジェクトを開発する開発者が任意に定義できる。
【0056】
一方、オブジェクトプロキシ420の場合には共通インターフェース424がオブジェクトを初期化するためのInit()、そして、オブジェクトを活性化するためのOn()、オブジェクトを非活性化するためのOff()以外に多数のインターフェースを追加で含むが、On_any_timeoutインターフェースはロボットプラグイン実行エンジン装置110でタイマイベントが発生した場合、これを処理するためのインターフェースであり、このインターフェースを介してロボットプラグイン実行エンジン装置110で発生したタイマイベントを受け取り、これを遠隔地にある相応する遠隔オブジェクトに伝達する。On_any_symbol_changedインターフェースは、シンボルの値が変更された時に通知を受けるためのインターフェースであって、この関数がロボットプラグイン実行エンジン装置110によって呼び出されると、これを再び遠隔地にある遠隔オブジェクトに伝達する役割を果たす。Get_symbol関数はオブジェクトのシンボル値を得るための関数であって、呼び出されれば、これを遠隔地にある遠隔オブジェクトに伝達する役割を果たす。Set_symbol関数はオブジェクトのシンボル値を変更するための関数であって、呼び出されれば、これを遠隔地にある遠隔オブジェクトに伝達する役割を果たす。Call_function関数はオブジェクトの関数を呼び出すためのインターフェースであって、ロボットプラグイン実行エンジン装置110でこの関数を呼び出せば、これを遠隔地の遠隔オブジェクトに伝達する役割を果たす。
【0057】
図5は、ロボット遠隔プラグイン装置が内部にあるオブジェクトをロボットで実行中のロボットプラグイン実行エンジン装置に登録する過程を説明する構成図である。
【0058】
図5を参照すれば、遠隔プラグイン装置210でオブジェクトAが生成されれば、オブジェクト管理者211に登録を要請する(段階502)。これに応答して、オブジェクト管理者211は該当オブジェクトAを自身の内部テーブルに保管した後、連結管理者216を通じてロボットプラグイン実行エンジン装置110にオブジェクトの登録を要請し(段階504)、連結管理者216ではオブジェクトの登録要請をロボットプラグイン実行エンジン装置110側に伝達する(段階506)。
【0059】
次に、ロボットプラグイン実行エンジン装置110側では連結管理者116がオブジェクトの登録要請を受けるが、連結管理者116はオブジェクトの登録要請を受けたオブジェクト名Aと同じ名前を有するオブジェクトプロキシ客体Aを生成し(段階508)、このように生成されたオブジェクトプロキシ客体Aはオブジェクト管理者111に伝達されてロボットプラグイン実行エンジン装置110にプロキシとして登録される(段階510)。
【0060】
図6は、遠隔オブジェクトが外部に露出させようとするシンボルを登録する過程を説明する構成図である。
【0061】
図6を参照すれば、遠隔オブジェクトが登録しようとするシンボル(A.symbol_1)とオブジェクト客体をシンボルサービス管理者212に渡せば(段階602)、シンボルサービス管理者212ではシンボルテーブル221に該当シンボルに対する名前(A.symbol_1)と該当シンボルに対する参照(A.symbol_1)を結合してシンボルテーブルエントリを構成する(段階604)。その後、シンボルサービス管理者212は、連結管理者216を通じてロボットプラグイン実行エンジン装置110にシンボルに対する登録を要請し(段階606)、連結管理者216ではシンボルの登録要請をロボットプラグイン実行エンジン装置110側に伝達する(段階608)。ここで、各シンボルや関数など遠隔オブジェクトが露出させる全てのエンティティはロボットプラグイン実行エンジン装置110に登録されなければ、他のプラグインで活用できない。
【0062】
次に、シンボルの登録要請を受けたロボットプラグイン実行エンジン装置110内の連結管理者116は、シンボルの登録要請を送ったオブジェクトに相応するプロキシを探し(オブジェクトプロキシA)、この客体にシンボルの登録を要請する(段階610)。その後、プロキシオブジェクトは要請を受けたシンボル名とプロキシオブジェクト自身の参照をシンボルサービス管理者112に伝達する(段階612)。
【0063】
これに応答して、シンボルサービス管理者112は、該当シンボルの名前とプロキシオブジェクトの参照を結合してシンボルサービスエントリを作った後、シンボルサービステーブル121に登録する(段階614)。
【0064】
図7は、遠隔オブジェクトが外部に露出させようとする関数を登録する過程を説明する構成図である。
【0065】
図7を参照すれば、遠隔オブジェクトが登録しようとする関数(A.f1)を関数サービス管理者213に渡せば(段階702)、関数サービス管理者213は関数テーブル222に該当関数に対する名前(「A.f1」)と該当関数に対する参照(A.f1)を結合して関数テーブルエントリを構成する(段階704)。その後、関数サービス管理者213は、連結管理者216を通じてロボットプラグイン実行エンジン装置110に関数に対する登録を要請し(段階706)、連結管理者216では関数の登録要請をロボットプラグイン実行エンジン装置110側に伝達する。
【0066】
次に、ロボットプラグイン実行エンジン装置110側では連結管理者116が関数の登録要請を受けるが、連結管理者116はオブジェクトに相応するプロキシを探し(オブジェクトプロキシA)、この客体に関数の登録を要請する(段階708)。
【0067】
その後、プロキシオブジェクトが要請を受けた関数名とこの関数が呼び出される時に、代わりに呼び出される関数(on_any_function)を関数サービス管理者113に登録要請すれば(段階710)、関数サービス管理者113は伝達を受けた関数名(A.f1)と呼び出される関数名(A.on_any_function)を結合して関数サービスエントリを作った後、関数サービステーブル122に登録する(段階712)。
【0068】
図8は、遠隔オブジェクトが通知サービスを登録する過程を説明する構成図である。
【0069】
図8を参照すると、通知サービスはロボットプラグイン実行エンジン装置110に登録された特定シンボルが変更される場合、これの通知を受けるサービスであって、該当シンボルの値が変更される場合、通知サービスに登録された関数を呼び出すサービスである。
【0070】
まず、遠隔オブジェクトが登録しようとする通知サービスのために対象シンボルの名前とコールバックされる関数に対する参照を通知サービス管理者214に伝達すれば(段階802)、通知サービス管理者214は通知テーブル223に該当シンボルに対する名前(「B.symbol_1」)とコールバック関数に対する参照(A.on_B.symbol_1_changed)を結合して通知テーブルエントリを構成する(段階804)。その後、通知サービス管理者214は、連結管理者216を通じてロボットプラグイン実行エンジン装置110に通知に対する登録を要請し(段階806)、連結管理者216では通知の登録要請をロボットプラグイン実行エンジン装置110側に伝達する。
【0071】
次に、ロボットプラグイン実行エンジン装置110側では連結管理者116が通知の登録要請を受けるが、連結管理者116は通知の登録要請を送ったオブジェクトに相応するプロキシを探し(オブジェクトプロキシA)、この客体に通知登録を要請する(段階808)。
【0072】
その後、プロキシオブジェクトは要請を受けたシンボル名とこのシンボルが変更された時、通知を受けるコールバック関数(on_any_symbol_changed)を通知サービス管理者114に登録要請する(段階810)。前述したように、on_any_symbol_changed関数は該当オブジェクトが登録する全ての通知サービスのために設けられる共通コールバック関数である。
【0073】
これに応答して、通知サービス管理者114は、伝達を受けたシンボル名(B.symbol_1)と呼び出される関数名(A.on_any_symbol_changed)を結合して通知サービスエントリを作った後、これを通知サービステーブルに123登録する(段階812)。
【0074】
図9は、遠隔オブジェクトがタイマサービスを登録する過程を説明する構成図である。
【0075】
図9を参照すれば、タイマサービスは一定の周期毎にロボットプラグイン実行エンジン装置110が遠隔オブジェクトの特定関数を呼び出すサービスである。
【0076】
まず、遠隔オブジェクトが登録しようとするタイマサービスのためにコールバックされる関数に対する参照(A.on_timeout_1)と呼び出される周期(1秒)をタイマサービス管理者215に伝達すれば(段階902)、タイマサービス管理者215はタイマテーブル224にタイマ名(「A.on_timeout_1」)と関数に対する参照(A.on_timeout_1)を結合してタイマテーブルエントリを構成する(段階904)。その後、タイマサービス管理者215は、連結管理者216を通じてロボットプラグイン実行エンジン装置110にタイマに対する登録を要請し(段階906)、連結管理者216ではタイマの登録要請をロボットプラグイン実行エンジン装置110側に伝達する。
【0077】
次に、ロボットプラグイン実行エンジン装置110側では連結管理者116がタイマの登録要請を受けるが、連結管理者116はタイマの登録要請を送ったオブジェクトに相応するプロキシを探し(オブジェクトプロキシA)、この客体にタイマサービスの登録を要請する(段階908)。
【0078】
その後、プロキシオブジェクトは伝達を受けたタイマ名(A.timeout_1)と自身の関数であるon_any_timeoutを結合してタイマサービスエントリを作った後、タイマサービス管理者115に登録を要請する(段階910)。前述したように、on_any_timeout関数は該当オブジェクトが登録する全てのタイマサービスのために設けられる共通コールバック関数である。
【0079】
これに応答して、タイマサービス管理者114はタイマサービスエントリをタイマサービステーブル124に登録する(段階912)。
【0080】
図10Aから図10Cは、各種遠隔プラグイン装置が自身が持っている遠隔オブジェクトに対する登録及び初期化が完了した状態における一連の動作を示す図である。
【0081】
図10Aから図10Cを参照すると、本例示では2つの遠隔オブジェクト(例えば、障害物検知オブジェクト、障害物回避オブジェクト)が用いられるが、各オブジェクトは互いに異なる遠隔プラグイン装置1200、1300に定義されている。また、各遠隔プラグイン装置1200、1300は互いに異なるコンピューティングノードで行われる。従って、本例示ではロボットと他の2つのコンピューティングノードを合せて計3個のコンピューティングノードが活用される。
【0082】
本例示の全体的な流れは障害物検知オブジェクトのfind_obstacle関数が一定の周期でロボットプラグイン実行エンジン装置1100によって呼び出される。このとき、find_obstacle関数は障害物とロボットとの距離を測定して障害物が存在すると判断されれば、自身のobstacle_foundシンボルにこれを設定する。この設定が変更されれば、このシンボルの値が変更された時、通知を受けると登録した障害物回避オブジェクトのon_obstacle_found関数が呼び出され、障害物回避のためにavoid_obstacle関数を呼び出すようになる。このようなシナリオ上で各段階別の流れを説明すれば、以下の通りである。
【0083】
(1)タイマサービス管理者1102によってdetector.time_out1タイマが1秒毎にタイムアウトされる。このとき、このタイマと連結されたdetector.on_any_timeoutコールバック関数が1秒毎に呼び出されて障害物検知オブジェクトプロキシ1120に伝達される。
【0084】
(2)、(3)detector.on_any_timeout関数の呼び出しを受けた障害物検知オブジェクトプロキシ1120は、これを連結管理者1108、1206を通じて障害物検知オブジェクトに伝送する。
【0085】
(4)遠隔プラグイン装置1200の連結管理者1206は、タイマサービス管理者1202にdetector.time_out1がタイムアウトされたことを知らせる。
【0086】
(5)タイマサービス管理者1202は、detector.time_out1タイマに該当するコールバック関数(detector.find_obstacle)を呼び出す。
【0087】
(6)障害物検知オブジェクトは、find_obstacle関数で障害物との距離を計算した後、障害物があると判断されれば、detector.obstacleシンボルの値を変更するようにシンボルサービス管理者1204に要請する。
【0088】
(7)、(8)シンボルサービス管理者1204は該当シンボルの値を変更するために、ロボットプラグイン実行エンジン装置1100側に該当シンボルの値を変更するよう要請するが、このような要請は連結管理者1206を通じてロボットプラグイン実行エンジン装置1100側に伝達される。
【0089】
(9)シンボル値の変更を要請されたロボットプラグイン実行エンジン装置1100側の連結管理者1108は、シンボルサービス管理者1104に該当値を変更するよう要請する。
【0090】
(10)シンボルサービス管理者1104は該当変数の値を変更した後、該当シンボルに通知サービスが登録されているか通知サービス管理者1106にサービスを要請する。
【0091】
(11)通知サービス管理者1106は、detector.obstacle_foundというシンボル名に該当する通知コールバックが登録されているか調べる。ここでは、avoider.on_any_symbol_changedというコールバック関数が登録されているため、該当関数を呼び出す。このとき、該当シンボル名(detector.obstacle_found)をパラメータとして伝達する。
【0092】
(12)、(13)障害物回避オブジェクトプロキシ122は、連結管理者1110を通じて呼び出しを受けたon_any_symbol_changed関数で自身と相応する遠隔オブジェクトである障害物回避オブジェクトに連結管理者1110を通じてこの事実を通報する。
【0093】
(14)遠隔プラグイン装置1300側の連結管理者1304はシンボル値の通知サービスの要請を受け、該当シンボル名(detector.obstacle_found)を通知サービス管理者1302に伝達する。
【0094】
(15)通知サービス管理者1302は該当シンボル名(detector.obstacle_found)をもってこのシンボルに登録されたコールバック関数であるavoider.avoid_obstacle関数を呼び出す。この関数の呼び出しを受けたavoider障害物回避オブジェクトはavoid_obstacle関数を呼び出して障害物を回避する。
【0095】
(16)1秒毎に(2)〜(15)過程を繰り返し行うことで、ロボットプラグイン実行エンジン装置1100は障害物が現れる度に障害物回避プロセスを起動させる。
【0096】
以上の説明では、本発明の好適な実施形態を提示して説明したが、本発明は必ずしもこれに限定されるものではなく、本発明の属する技術分野において通常の知識を有する者であれば、本発明の技術的思想から逸脱しない範囲内で様々な置換、変形及び変更が可能であることが容易に分かる。
【符号の説明】
【0097】
100 ロボット
110 ロボットプラグイン実行エンジン装置
111、211 オブジェクト管理者
112、211 シンボルサービス管理者
113、213 関数サービス管理者
114、214 通知サービス管理者
115、215 タイマサービス管理者
116、216 連結管理者
【技術分野】
【0001】
本発明はロボットプラグイン技法に関し、更に詳しくは、ロボットの各プラグイン(モジュール)を遠隔地で実行することで、ロボット応用を動的に構成し、多数のコンピューティングリソースを活用するのに適した遠隔プラグイン装置、ロボットプラグイン実行エンジン装置及びロボットプラグイン実行システムに関する。
【背景技術】
【0002】
従来のロボットソフトウェアは各機能を担当するモジュールが静的に結合されて1つの実行プログラムで実体化され、それがロボットに搭載されて実行する構造を有するのが一般的であった。
【0003】
しかしながら、このような方式はロボットプラットフォームの変更、ロボットモジュールの機能向上及び変更による既存モジュールの交換時には、ロボットプログラム全体を再コンパイルしなければならないという負担があり、各モジュールの開発時に独立的な開発が難しく、ロボットの内部や外部に存在する多数のコンピューティングノードを利用できないため、非効率的であるという短所がある。
【0004】
このような点を解決するための従来技術の1つとして、ロボットソフトウェアをコンポーネントで構成する方式であって、各モジュールをコンポーネント化してロボットや外部コンピューティングノードで実行する方式が挙げられる。
【0005】
即ち、コンポーネント技術は遠隔地でロボット応用を構成するモジュール(コンポーネント)を実行することが可能であった。この方式では遠隔地にもロボットモジュールをローディングし、実行できるコンポーネント実行エンジンが設けられ、この遠隔エンジンがコンポーネントをローディングして実行する方式である。
【0006】
従って、従来のコンポーネント技術はコンポーネント単独では実行できず、その実体化の方式も動的ライブラリ(.dll又は.so)の形であった。即ち、この方式はそれぞれのコンピューティングノードにコンポーネント実行エンジンが搭載されなければならない方式である。
【0007】
また、従来のコンポーネント技術は遠隔地で実行が可能であるものの、コンポーネントエンジンがコンポーネントを活用するために関連情報をプロファイルに正確に記述しなければならなかった。このプロファイル情報には他のコンポーネントとの連結性、コンポーネントインターフェースなど自らの属性を記述した情報が含まれる。従って、開発者はコンポーネント自体の開発と共にプロファイル情報を共に記述しなければならなかった。
【0008】
従来の他の技術はプラグイン方式を用いたロボットソフトウェアのモジュール化方式である。
【0009】
このような従来のロボットプラグイン技術はプラグインエンジンが存在するローカル上でのみモジュールをプラグインすることができた。従って、ネットワーク上に存在する各種コンピューティングリソースを効率的に活用するためにロボットプラグイン実行エンジンと他のコンピューティングノードで実行可能なモジュールを支援する必要がある。
【先行技術文献】
【特許文献】
【0010】
【特許文献1】米国特許公開第2008-0133052号
【発明の概要】
【発明が解決しようとする課題】
【0011】
しかしながら、ロボットソフトウェアをコンポーネントで構成する従来方式は、各コンポーネントが動作するコンピューティングノードに別途のコンポーネント実行エンジンが搭載されなければならないため、コンポーネント単独では実行が不可能である。また、コンポーネント同士の連結やコンポーネントが有するインターフェースを記述するプロファイル情報を共に提供しなければならないため、コンポーネントの開発が容易ではなく、そのため、大部分専用の開発道具を用いなければならないという短所がある。
【0012】
一方、従来のプラグイン方式は、プラグイン実行エンジンが存在するコンピューティングノード上でのみプラグインが存在しなければならないため、ネットワーク上でプラグインの機能を活用できないという問題がある。
【課題を解決するための手段】
【0013】
そこで、本発明は上記事情に鑑みてなされたものであって、その目的は、ロボットの各プラグイン(モジュール)を遠隔地で実行することで、ロボット応用を動的に構成し、多数のコンピューティングリソースを活用するのに適した遠隔プラグイン装置、ロボットプラグイン実行エンジン装置及びロボットプラグイン実行システムを提供することにある。
【0014】
前記目的を達成するために本発明の一観点によれば、各遠隔プラグインの内部に入っている各遠隔オブジェクトを管理するオブジェクト管理者と、前記各遠隔オブジェクトが登録したシンボルをロボットプラグイン実行エンジン装置に登録して管理するシンボルサービス管理者と、前記各遠隔オブジェクトが登録した関数を前記ロボットプラグイン実行エンジン装置に登録して管理する関数サービス管理者と、前記各遠隔オブジェクトが登録した通知関数を前記ロボットプラグイン実行エンジン装置に登録して管理する通知サービス管理者と、前記各遠隔オブジェクトが登録したタイマを前記ロボットプラグイン実行エンジン装置に登録して管理するタイマサービス管理者と、ネットワークを介して前記各管理者と前記ロボットプラグイン実行エンジン装置との通信を担当する連結管理者とを含む遠隔プラグイン装置を提供する。
【0015】
ここで、本発明の遠隔プラグイン装置内のオブジェクト管理者はロボットプラグイン実行エンジン装置に登録しようとする遠隔オブジェクトが生成される時、生成された遠隔オブジェクトを内部オブジェクトテーブルに格納した後、連結管理者に伝達し、シンボルサービス管理者は特定遠隔オブジェクトが外部に露出させようとするシンボルを登録する時、該当シンボルに対する名前と該当シンボルに対する参照を結合してシンボルテーブルエントリを構成した後、連結管理者に伝達し、関数サービス管理者は特定遠隔オブジェクトが外部に露出させようとする関数を登録する時、関数に対する名前と関数に対する参照を結合して関数テーブルエントリを構成した後、連結管理者に伝達し、通知サービス管理者は特定遠隔オブジェクトが登録しようとする通知サービスのために対象シンボルの名前とコールバックされる関数に対する参照が伝達される時、対象シンボルに対する名前とコールバック関数に対する参照を結合して通知テーブルエントリを構成した後、連結管理者に伝達し、タイマサービス管理者は特定遠隔オブジェクトが登録しようとするタイマサービスのためにコールバックする関数に対する参照と呼び出される周期が伝達される時、タイマ名と関数に対する参照を結合してタイマテーブルエントリを構成した後、連結管理者に伝達する。
【0016】
本発明の他の観点によれば、各ローカルプラグインの内部に入っているオブジェクトを管理し、オブジェクトの登録要請がある時、それに相応するオブジェクトプロキシを生成及び登録するオブジェクト管理者と、前記各ローカルプラグインで登録したシンボルを管理し、各シンボルの参照及び変更を担当するシンボルサービス管理者と、前記各ローカルプラグインで登録した関数を管理し、各関数に対する呼び出し及び結果値の返還を担当する関数サービス管理者と、特定イベントが発生する時、該当ローカルプラグインで登録した関数を呼び出す通知サービス管理者と、特定周期別に前記各ローカルプラグインで登録した関数を呼び出すタイマサービス管理者と、ネットワークを介して前記各管理者と遠隔プラグイン装置との通信を担当する連結管理者とを含むロボットプラグイン実行エンジン装置を提供する。
【0017】
ここで、本発明のロボットプラグイン実行エンジン装置内のオブジェクト管理者は、遠隔プラグイン装置から登録の要請を受けたオブジェクト名と同じ名前を有するオブジェクトプロキシ客体を生成してプロキシとして登録し、シンボルサービス管理者は遠隔プラグイン装置からシンボルの登録要請を受けた該当シンボル名と相応するプロキシオブジェクトの参照を結合してシンボルサービスエントリを構成した後、シンボルサービステーブルに登録し、関数サービス管理者は遠隔プラグイン装置から関数の登録要請を受けた関数名と呼び出される関数名を結合して関数サービスエントリを構成した後、関数サービステーブルに登録し、通知サービス管理者は遠隔プラグイン装置から通知の登録要請を受けた該当シンボル名と呼び出される関数名を結合して通知サービスエントリを構成した後、通知サービステーブルに登録し、タイマサービス管理者は遠隔プラグイン装置からタイマの登録要請を受けたタイマ名と自身が関数を結合してタイマサービスエントリを構成した後、タイマサービステーブルに登録する。
【0018】
本発明の更に他の観点によれば、各遠隔プラグインの内部に入っている各遠隔オブジェクトを管理し、連結管理者を利用したネットワーク通信を通じて前記各遠隔オブジェクトが登録したシンボル、関数、通知関数、タイマをロボットプラグイン実行エンジンに登録して管理する遠隔プラグインと、各ローカルプラグインの内部に入っているオブジェクトを管理し、連結管理者を利用したネットワーク通信を通じて前記各ローカルプラグインで登録したシンボル、各関数、前記各関数に対する呼び出し及び結果値の返還、前記各関数の呼び出しをサービスする前記ロボットプラグイン実行エンジンを含むロボットプラグイン実行システムを提供する。
【発明の効果】
【0019】
本発明はロボット応用プログラムがネットワーク上で散在する各種コンピューティングノードに搭載された遠隔プラグインを動的にプラグイン実行エンジンに連結されるようにすることで、以下のような効果が得られる。
【0020】
第1に、ネットワークコンピューティング能力の最大化を図ることができる。即ち、ロボットソフトウェアをなす各機能をモジュール別に分け、各機能モジュールをネットワーク上で分散されたコンピューティングノードに割り当てて実行することで、各コンピューティングノードが有しているコンピューティング能力を十分に活用できるだけでなく、ロボット自体の計算要求を減少させることで、ロボットがより効率よくコンピューティングリソースを使用できる。
【0021】
第2に、ソフトウェアモジュールの独立実行が可能となる。即ち、ロボットソフトウェアを構成する各モジュールをロボット遠隔プラグインで作成し、各遠隔プラグインが独立して実行可能なファイル形式で具体化される。これにより、遠隔地でプラグインを独立して実行するため、別途の実行エンジンを遠隔地で実行しなくても済むという長所がある。これは遠隔地コンピューティングリソース(メモリ、計算能力)に対する要求量を減少させて遠隔地コンピューティングリソースの効率的な使用にも貢献し、使用の便宜性も増大される。
【0022】
第3に、モジュール開発の単純化が期待される。既存のコンポーネント方式のモジュール支援ではコンポーネントがコンポーネント実行エンジンに搭載されるように各種プロファイル情報を共に記述したが、本発明はこのようなプロファイル情報を不要とするため、開発者はロボット遠隔プラグインモジュールの開発にのみ集中すればよい。従って、開発過程が単純化され、開発の効率性と誤りの可能性を低減できる。
【0023】
第4に、チーム開発の容易性が増大する。従来のプラグイン方式はローカルでのみプラグインが支援される方式であったため、各プラグインの開発者は同じコンピューティングリソースへ地理的にアクセス可能な場所に集まって開発及びテストを進めなければならなかった。しかしながら、本発明は遠隔地でもソフトウェアモジュールを実行し、このソフトウェアモジュールがロボットに搭載されたプラグイン実行エンジンに接続して相互作用する方式であるため、各モジュールの開発を担当する多数のチームが個別で開発を進めることが可能である。
【図面の簡単な説明】
【0024】
【図1】本発明によってロボットと遠隔地コンピュータがネットワークを介して連結される構造を示すシステム系統図である。
【図2】本発明によるロボットプラグイン実行エンジン装置のブロック構成図である。
【図3】本発明による遠隔プラグイン装置のブロック構成図である。
【図4】本発明による遠隔オブジェクトとオブジェクトプロキシの構造図である。
【図5】ロボット遠隔プラグイン装置が内部にあるオブジェクトをロボットで実行中のロボットプラグイン実行エンジン装置に登録する過程を説明する構成図である。
【図6】遠隔オブジェクトが外部に露出させようとするシンボルを登録する過程を説明する構成図である。
【図7】遠隔オブジェクトが外部に露出させようとする関数を登録する過程を説明する構成図である。
【図8】遠隔オブジェクトが通知サービスを登録する過程を説明する構成図である。
【図9】遠隔オブジェクトがタイマサービスを登録する過程を説明する構成図である。
【図10A】各種遠隔プラグイン装置が、各種遠隔プラグイン装置自身が持っている遠隔オブジェクトに対する登録及び初期化が完了した状態における一連の動作を示す図である。
【図10B】各種遠隔プラグイン装置が、各種遠隔プラグイン装置自身が持っている遠隔オブジェクトに対する登録及び初期化が完了した状態における一連の動作を示す図である。
【図10C】各種遠隔プラグイン装置が、各種遠隔プラグイン装置自身が持っている遠隔オブジェクトに対する登録及び初期化が完了した状態における一連の動作を示す図である。
【発明を実施するための形態】
【0025】
以下、添付する図面を参照して本発明の好適な実施形態について詳細に説明する。
【0026】
なお、下記の本発明を説明するにおいて公知となった機能又は構成などに関する具体的な説明が本発明の要旨を不要に曖昧にするおそれがあると判断される場合にはその詳細な説明を省略する。そして、後述する用語は、本発明における機能を考慮して定義されたものであって、これはユーザ、運用者などの意図又は慣例などによって変わり得るのはもちろんである。従って、その定義は本明細書の全般に渡って記述される技術思想に基づいてなされるべきである。
【実施例】
【0027】
図1は、本発明によってロボットと遠隔地コンピュータがネットワークを介して連結される構造を示すシステム系統図であって、ロボット100にはロボットプラグインを実行するためのロボットプラグイン実行エンジン装置110が搭載され、遠隔地コンピュータ200には多数の遠隔プラグイン装置210が搭載される。
【0028】
ここで、ロボットプラグインはローカル又は遠隔プラグインになることができ、本発明では遠隔プラグインを遠隔地のロボットにローディングして実行するが、遠隔プラグインはロボットプラグイン実行エンジン装置が搭載されたコンピューティングノードとは異なるコンピューティングノードで実行されるプラグインである。即ち、多数の遠隔地コンピュータで実行される各プラグインはロボットプラグイン実行エンジン装置に登録した後、それに相応する各種サービスの提供を受けることができる。
【0029】
遠隔地コンピュータ200の遠隔プラグイン装置210ではオブジェクト、シンボルサービス、関数サービス、通知サービス、タイマサービスなどと関連したプラグインをロボットプラグイン実行エンジン装置110に搭載し、ロボット100のロボットプラグイン実行エンジン装置110では搭載されたプラグインに相応する各種サービスを遠隔プラグイン装置210に提供する。
【0030】
図2は、本発明によるロボットプラグイン実行エンジン装置のブロック構成図であって、オブジェクト管理者111、シンボルサービス管理者112、関数サービス管理者113、通知サービス管理者114、タイマサービス管理者115及び連結管理者116などを含む。
【0031】
オブジェクト管理者111は、それぞれの遠隔プラグインの内部に入っているオブジェクトを管理するモジュールを意味するものであって、遠隔プラグイン装置210からオブジェクトの登録要請がある時、これに相応して生成されるオブジェクトプロキシ客体を登録するなどの機能を行う。
【0032】
次に、シンボルサービス管理者112は各遠隔プラグインで登録したシンボルを管理し、これらのシンボルに対する参照及び変更を担当するサービスモジュールを意味するものであって、遠隔プラグイン装置210からシンボルの登録要請がある時、シンボルの名前とプロキシオブジェクトの参照を結合してシンボルサービスエントリを作った後、これをシンボルサービステーブルに登録するなどの機能を行う。
【0033】
また、関数サービス管理者113は、各遠隔プラグインで登録した関数を管理し、これらの関数に対する呼び出し及び結果値の返還を担当するサービスモジュールを意味するものであって、遠隔プラグイン装置210から関数の登録要請がある時、伝達を受けた関数名と呼び出される関数名を結合して関数サービスエントリを作った後、これを関数サービステーブルに登録するなどの機能を行う。
【0034】
そして、通知サービス管理者114は特定イベントが発生した時、遠隔プラグインで登録した関数を呼び出すサービスモジュールを意味するものであって、遠隔プラグイン装置210から通知の登録要請がある時、伝達を受けたシンボル名と呼び出される関数名を結合して通知サービスエントリを作った後、これを通知サービステーブルに登録するなどの機能を行う。
【0035】
次に、タイマサービス管理者115は特定周期別にローカルプラグインで登録した関数を呼び出す機能を提供するサービスモジュールを意味するものであって、遠隔プラグイン装置210から通知の登録要請がある時、タイマ名とコールバックされる関数を結合して作られるタイマサービスエントリをタイマサービステーブルに登録するなどの機能を行う。
【0036】
最後に、連結管理者116は遠隔プラグイン装置210との通信を担当するモジュールを意味するものであって、遠隔プラグイン装置210からネットワークを介してオブジェクト、シンボルサービス、関数サービス、通知サービス、タイマサービスなどに対する登録要請が受信される時、それと関連したオブジェクトプロキシ客体を生成、或いはオブジェクトに相応するプロキシを探してオブジェクト管理者111、シンボルサービス管理者112、関数サービス管理者113、通知サービス管理者114、タイマサービス管理者115などに客体への登録を要請するなどの機能を行う。
【0037】
図3は、本発明によるロボット遠隔プラグイン装置のブロック構成図であって、オブジェクト管理者211、シンボルサービス管理者212、関数サービス管理者213、通知サービス管理者214、タイマサービス管理者215及び連結管理者216などを含むが、各遠隔プラグインは多数のオブジェクト(オブジェクト1、オブジェクト2、...オブジェクトN)を定義できる。
【0038】
図3を参照すれば、オブジェクト管理者211は、各遠隔プラグイン装置210の内部に入っている遠隔オブジェクトを管理するモジュールを意味するものであって、遠隔プラグイン装置210の内部にある遠隔オブジェクトをロボットで実行中のロボットプラグイン実行エンジン装置110に登録しようとする時、遠隔プラグイン装置210でオブジェクトが生成されれば、生成された遠隔オブジェクトを自身の内部テーブルに保管した後、連結管理者216を通じてロボットプラグイン実行エンジン装置110側にオブジェクトの登録を要請するなどの機能を行う。
【0039】
これに応答して、ロボットプラグイン実行エンジン装置110内の連結管理者116では登録の要請を受けたオブジェクト名Aと同じ名前を有するオブジェクトプロキシ客体Aを生成し、このように生成されたオブジェクトプロキシ客体Aはロボットプラグイン実行エンジン装置110にプロキシとして登録される。
【0040】
また、シンボルサービス管理者212は、各遠隔オブジェクトが登録したシンボルをロボットプラグイン実行エンジン装置110に登録して管理する役割を果たすモジュールを意味する。即ち、遠隔オブジェクトが外部に露出させようとするシンボルを登録しようとする時、遠隔オブジェクトが登録しようとするシンボル(A.symbol_1)とオブジェクト客体を渡せば、シンボルテーブルに該当シンボルに対する名前(A.symbol_1)とシンボルに対する参照(A.symbol_1)を結合してシンボルテーブルエントリを構成した後、連結管理者216を通じてロボットプラグイン実行エンジン装置110側にシンボルに対する登録を要請するなどの機能を行う。これは各シンボルや関数など遠隔オブジェクトが露出させる全てのエンティティ(entity)がロボットプラグイン実行エンジン装置110に登録されなければ他のプラグインで活用できないためである。
【0041】
これに応答して、ロボットプラグイン実行エンジン装置110内の連結管理者116ではシンボルの登録要請を送ったオブジェクトに相応するプロキシを探し(オブジェクトプロキシA)、この客体にシンボルの登録を要請し、このようなプロキシオブジェクトは要請を受けたシンボル名とプロキシオブジェクト自身の参照をシンボルサービス管理者112に伝達する。その結果、シンボルサービス管理者112は、シンボルの名前とプロキシオブジェクトの参照を結合してシンボルサービスエントリを作った後、これをシンボルサービステーブルに登録する。
【0042】
次に、関数サービス管理者213は、各遠隔オブジェクトが登録した関数をロボットプラグイン実行エンジン装置110に登録して管理する役割を果たすモジュールを意味するものであって、遠隔オブジェクトが外部に露出させようとする関数を実行エンジン装置110に登録しようとする時、遠隔オブジェクトが登録しようとする関数(A.f1)を渡せば、関数テーブルに関数に対する名前(「A.f1」)と関数に対する参照(A.f1)を結合して関数テーブルエントリを構成した後、連結管理者216を通じてロボットプラグイン実行エンジン装置110側に関数に対する登録を要請するなどの機能を行う。
【0043】
これに応答して、ロボットプラグイン実行エンジン110内の連結管理者116では関数の登録要請を送ったオブジェクトに相応するプロキシを探し(オブジェクトプロキシA)、この客体に関数登録を要請し、このようなプロキシオブジェクトは要請を受けた関数名とこの関数が呼び出される時に、代わりに呼び出される関数(on_any_function)を関数サービス管理者113に登録要請し、その結果、関数サービス管理者113では伝達を受けた関数名(A.f1)と呼び出される関数名(A.on_any_function)を結合して関数サービスエントリを作った後、これを関数サービステーブルに登録する。
【0044】
そして、通知サービス管理者214は、各遠隔オブジェクトが登録した通知関数をロボットプラグイン実行エンジン装置110に登録して管理する役割を果たすモジュールを意味する。ロボットプラグイン実行エンジン装置110に登録された特定シンボルが変更される場合、これを通知するためのサービスを提供するが、例えば、シンボルの値が変更される場合、通知サービスに登録された関数を呼び出すサービスである。
【0045】
まず、遠隔オブジェクトが登録しようとする通知サービスのために対象シンボルの名前とコールバックされる関数に対する参照を通知サービス管理者214に伝達すれば、通知サービス管理者214は通知テーブルにシンボルに対する名前(「B.symbol_1」)とコールバック関数に対する参照(A.on_B.symbol_1_changed)を結合して通知テーブルエントリを構成した後、連結管理者216を通じてロボットプラグイン実行エンジン装置110側に通知登録を要請するなどの機能を行う。
【0046】
これに応答して、ロボットプラグイン実行エンジン装置110の連結管理者116では通知の登録要請を送ったオブジェクトに相応するプロキシを探し(オブジェクトプロキシA)、この客体に通知登録を要請し、プロキシオブジェクトは要請を受けたシンボル名とこのシンボルが変更された時、通知を受けるコールバック関数(on_any_symbol_changed)を関数サービス管理者113に登録要請する。ここで、on_any_symbol_changed関数は該当オブジェクトが登録する全ての通知サービスのために設けられる共通コールバック関数を意味する。即ち、対象シンボルの名前が変更されてもロボットプラグイン実行エンジンに登録されるコールバック関数は同一である。その理由は、この関数を通じて相応する遠隔オブジェクトに要請を伝達する機能のみを行い、実際のコールバック関数の呼び出しは遠隔プラグイン装置で行われるためである。ロボットプラグイン実行エンジン装置110の通知サービス管理者114は、伝達を受けたシンボル名(B.symbol_1)と呼び出される関数名(A.on_any_symbol_changed)を結合して通知サービスエントリを作った後、これを通知サービステーブルに登録する。
【0047】
また、タイマサービス管理者215は、各遠隔オブジェクトが登録したタイマをロボットプラグイン実行エンジン装置110に登録して管理する役割を果たすモジュールを意味するものであって、タイマサービスは一定の周期毎にロボットプラグイン実行エンジン装置110が遠隔オブジェクトの特定関数を呼び出すサービスである。
【0048】
まず、遠隔オブジェクトが登録しようとするタイマサービスのためにコールバックされる関数に対する参照(A.on_timeout_1)と呼び出される周期(1秒)をタイマサービス管理者215に伝達すれば、タイマサービス管理者215はタイマ名(「A.on_timeout_1」)と関数に対する参照(A.on_timeout_1)と結合してタイマテーブルエントリを構成した後、連結管理者216を通じてロボットプラグイン実行エンジン装置110側にタイマサービスの登録を要請するなどの機能を行う。
【0049】
これに応答して、ロボットプラグイン実行エンジン装置110の連結管理者116ではこの要請を送ったオブジェクトに相応するプロキシを探し(オブジェクトプロキシA)、この客体にタイマサービスの登録を要請し、プロキシオブジェクトは伝達を受けたタイマ名(A.timeout_1)と自身の関数であるon_any_timeoutを結合してタイマサービスエントリを作った後、これをタイマサービス管理者115に登録要請し、タイマサービス管理者115はタイマサービスエントリをタイマサービステーブルに登録する。ここで、on_any_timeout関数はオブジェクトが登録する全てのタイマサービスのために設けられる共通コールバック関数である。即ち、対象タイマの名前が変更されてもロボットプラグイン実行エンジン装置110に登録されるコールバック関数は同一である。その理由は、この関数を通じて相応する遠隔オブジェクトにタイムアウトを伝達する機能のみ行い、実際のコールバック関数の呼び出しは遠隔プラグイン装置210で行われるためである。
【0050】
そして、連結管理者216はネットワークを介して遠隔プラグイン装置210とロボットプラグイン実行エンジン装置110との通信を担当するモジュールである。
【0051】
図4は、本発明による遠隔オブジェクトとオブジェクトプロキシの構造を示すものであって、遠隔オブジェクト410は遠隔地コンピュータ200に搭載された遠隔プラグイン装置210内で定義されて実体化され、オブジェクトプロキシ420はロボット100に搭載されたロボットプラグイン実行エンジン装置110で実体化されるが、ここで、遠隔オブジェクト410は、登録インターフェース412、共通インターフェース414、個別インターフェース/個別データ定義部416からなる3つの部分の論理領域で構成され、オブジェクトプロキシ420は登録インターフェース422及び共通インターフェース424からなる2つの部分の論理領域で構成される。
【0052】
まず、遠隔プラグイン装置210で登録された各オブジェクトはロボットプラグイン実行エンジン装置110でそれに相応するプロキシを生成するようになる。即ち、遠隔オブジェクト410とオブジェクトプロキシ420は一対で生成されて消滅する。
【0053】
遠隔プラグイン装置210は、登録インターフェース412に定義されたオブジェクトに対する生成、削除を担当する関数をプラグインに伝達するが、プラグインがこの関数を呼び出すことで、特定オブジェクトに対する客体を生成又は削除するようになる。
【0054】
そして、共通インターフェース414は、オブジェクトとプラグイン間で予め約束されたインターフェースであって、オブジェクトを初期化するためのInit()、そして、オブジェクトを活性化するためのOn()、オブジェクトを非活性化するためのOff()で構成される。
【0055】
また、個別インターフェース/個別データ定義部416は、個別オブジェクトで定義する部分であって、実際のオブジェクトで行う主要関数及びシンボルはこの部分で定義され、この部分はオブジェクトを開発する開発者が任意に定義できる。
【0056】
一方、オブジェクトプロキシ420の場合には共通インターフェース424がオブジェクトを初期化するためのInit()、そして、オブジェクトを活性化するためのOn()、オブジェクトを非活性化するためのOff()以外に多数のインターフェースを追加で含むが、On_any_timeoutインターフェースはロボットプラグイン実行エンジン装置110でタイマイベントが発生した場合、これを処理するためのインターフェースであり、このインターフェースを介してロボットプラグイン実行エンジン装置110で発生したタイマイベントを受け取り、これを遠隔地にある相応する遠隔オブジェクトに伝達する。On_any_symbol_changedインターフェースは、シンボルの値が変更された時に通知を受けるためのインターフェースであって、この関数がロボットプラグイン実行エンジン装置110によって呼び出されると、これを再び遠隔地にある遠隔オブジェクトに伝達する役割を果たす。Get_symbol関数はオブジェクトのシンボル値を得るための関数であって、呼び出されれば、これを遠隔地にある遠隔オブジェクトに伝達する役割を果たす。Set_symbol関数はオブジェクトのシンボル値を変更するための関数であって、呼び出されれば、これを遠隔地にある遠隔オブジェクトに伝達する役割を果たす。Call_function関数はオブジェクトの関数を呼び出すためのインターフェースであって、ロボットプラグイン実行エンジン装置110でこの関数を呼び出せば、これを遠隔地の遠隔オブジェクトに伝達する役割を果たす。
【0057】
図5は、ロボット遠隔プラグイン装置が内部にあるオブジェクトをロボットで実行中のロボットプラグイン実行エンジン装置に登録する過程を説明する構成図である。
【0058】
図5を参照すれば、遠隔プラグイン装置210でオブジェクトAが生成されれば、オブジェクト管理者211に登録を要請する(段階502)。これに応答して、オブジェクト管理者211は該当オブジェクトAを自身の内部テーブルに保管した後、連結管理者216を通じてロボットプラグイン実行エンジン装置110にオブジェクトの登録を要請し(段階504)、連結管理者216ではオブジェクトの登録要請をロボットプラグイン実行エンジン装置110側に伝達する(段階506)。
【0059】
次に、ロボットプラグイン実行エンジン装置110側では連結管理者116がオブジェクトの登録要請を受けるが、連結管理者116はオブジェクトの登録要請を受けたオブジェクト名Aと同じ名前を有するオブジェクトプロキシ客体Aを生成し(段階508)、このように生成されたオブジェクトプロキシ客体Aはオブジェクト管理者111に伝達されてロボットプラグイン実行エンジン装置110にプロキシとして登録される(段階510)。
【0060】
図6は、遠隔オブジェクトが外部に露出させようとするシンボルを登録する過程を説明する構成図である。
【0061】
図6を参照すれば、遠隔オブジェクトが登録しようとするシンボル(A.symbol_1)とオブジェクト客体をシンボルサービス管理者212に渡せば(段階602)、シンボルサービス管理者212ではシンボルテーブル221に該当シンボルに対する名前(A.symbol_1)と該当シンボルに対する参照(A.symbol_1)を結合してシンボルテーブルエントリを構成する(段階604)。その後、シンボルサービス管理者212は、連結管理者216を通じてロボットプラグイン実行エンジン装置110にシンボルに対する登録を要請し(段階606)、連結管理者216ではシンボルの登録要請をロボットプラグイン実行エンジン装置110側に伝達する(段階608)。ここで、各シンボルや関数など遠隔オブジェクトが露出させる全てのエンティティはロボットプラグイン実行エンジン装置110に登録されなければ、他のプラグインで活用できない。
【0062】
次に、シンボルの登録要請を受けたロボットプラグイン実行エンジン装置110内の連結管理者116は、シンボルの登録要請を送ったオブジェクトに相応するプロキシを探し(オブジェクトプロキシA)、この客体にシンボルの登録を要請する(段階610)。その後、プロキシオブジェクトは要請を受けたシンボル名とプロキシオブジェクト自身の参照をシンボルサービス管理者112に伝達する(段階612)。
【0063】
これに応答して、シンボルサービス管理者112は、該当シンボルの名前とプロキシオブジェクトの参照を結合してシンボルサービスエントリを作った後、シンボルサービステーブル121に登録する(段階614)。
【0064】
図7は、遠隔オブジェクトが外部に露出させようとする関数を登録する過程を説明する構成図である。
【0065】
図7を参照すれば、遠隔オブジェクトが登録しようとする関数(A.f1)を関数サービス管理者213に渡せば(段階702)、関数サービス管理者213は関数テーブル222に該当関数に対する名前(「A.f1」)と該当関数に対する参照(A.f1)を結合して関数テーブルエントリを構成する(段階704)。その後、関数サービス管理者213は、連結管理者216を通じてロボットプラグイン実行エンジン装置110に関数に対する登録を要請し(段階706)、連結管理者216では関数の登録要請をロボットプラグイン実行エンジン装置110側に伝達する。
【0066】
次に、ロボットプラグイン実行エンジン装置110側では連結管理者116が関数の登録要請を受けるが、連結管理者116はオブジェクトに相応するプロキシを探し(オブジェクトプロキシA)、この客体に関数の登録を要請する(段階708)。
【0067】
その後、プロキシオブジェクトが要請を受けた関数名とこの関数が呼び出される時に、代わりに呼び出される関数(on_any_function)を関数サービス管理者113に登録要請すれば(段階710)、関数サービス管理者113は伝達を受けた関数名(A.f1)と呼び出される関数名(A.on_any_function)を結合して関数サービスエントリを作った後、関数サービステーブル122に登録する(段階712)。
【0068】
図8は、遠隔オブジェクトが通知サービスを登録する過程を説明する構成図である。
【0069】
図8を参照すると、通知サービスはロボットプラグイン実行エンジン装置110に登録された特定シンボルが変更される場合、これの通知を受けるサービスであって、該当シンボルの値が変更される場合、通知サービスに登録された関数を呼び出すサービスである。
【0070】
まず、遠隔オブジェクトが登録しようとする通知サービスのために対象シンボルの名前とコールバックされる関数に対する参照を通知サービス管理者214に伝達すれば(段階802)、通知サービス管理者214は通知テーブル223に該当シンボルに対する名前(「B.symbol_1」)とコールバック関数に対する参照(A.on_B.symbol_1_changed)を結合して通知テーブルエントリを構成する(段階804)。その後、通知サービス管理者214は、連結管理者216を通じてロボットプラグイン実行エンジン装置110に通知に対する登録を要請し(段階806)、連結管理者216では通知の登録要請をロボットプラグイン実行エンジン装置110側に伝達する。
【0071】
次に、ロボットプラグイン実行エンジン装置110側では連結管理者116が通知の登録要請を受けるが、連結管理者116は通知の登録要請を送ったオブジェクトに相応するプロキシを探し(オブジェクトプロキシA)、この客体に通知登録を要請する(段階808)。
【0072】
その後、プロキシオブジェクトは要請を受けたシンボル名とこのシンボルが変更された時、通知を受けるコールバック関数(on_any_symbol_changed)を通知サービス管理者114に登録要請する(段階810)。前述したように、on_any_symbol_changed関数は該当オブジェクトが登録する全ての通知サービスのために設けられる共通コールバック関数である。
【0073】
これに応答して、通知サービス管理者114は、伝達を受けたシンボル名(B.symbol_1)と呼び出される関数名(A.on_any_symbol_changed)を結合して通知サービスエントリを作った後、これを通知サービステーブルに123登録する(段階812)。
【0074】
図9は、遠隔オブジェクトがタイマサービスを登録する過程を説明する構成図である。
【0075】
図9を参照すれば、タイマサービスは一定の周期毎にロボットプラグイン実行エンジン装置110が遠隔オブジェクトの特定関数を呼び出すサービスである。
【0076】
まず、遠隔オブジェクトが登録しようとするタイマサービスのためにコールバックされる関数に対する参照(A.on_timeout_1)と呼び出される周期(1秒)をタイマサービス管理者215に伝達すれば(段階902)、タイマサービス管理者215はタイマテーブル224にタイマ名(「A.on_timeout_1」)と関数に対する参照(A.on_timeout_1)を結合してタイマテーブルエントリを構成する(段階904)。その後、タイマサービス管理者215は、連結管理者216を通じてロボットプラグイン実行エンジン装置110にタイマに対する登録を要請し(段階906)、連結管理者216ではタイマの登録要請をロボットプラグイン実行エンジン装置110側に伝達する。
【0077】
次に、ロボットプラグイン実行エンジン装置110側では連結管理者116がタイマの登録要請を受けるが、連結管理者116はタイマの登録要請を送ったオブジェクトに相応するプロキシを探し(オブジェクトプロキシA)、この客体にタイマサービスの登録を要請する(段階908)。
【0078】
その後、プロキシオブジェクトは伝達を受けたタイマ名(A.timeout_1)と自身の関数であるon_any_timeoutを結合してタイマサービスエントリを作った後、タイマサービス管理者115に登録を要請する(段階910)。前述したように、on_any_timeout関数は該当オブジェクトが登録する全てのタイマサービスのために設けられる共通コールバック関数である。
【0079】
これに応答して、タイマサービス管理者114はタイマサービスエントリをタイマサービステーブル124に登録する(段階912)。
【0080】
図10Aから図10Cは、各種遠隔プラグイン装置が自身が持っている遠隔オブジェクトに対する登録及び初期化が完了した状態における一連の動作を示す図である。
【0081】
図10Aから図10Cを参照すると、本例示では2つの遠隔オブジェクト(例えば、障害物検知オブジェクト、障害物回避オブジェクト)が用いられるが、各オブジェクトは互いに異なる遠隔プラグイン装置1200、1300に定義されている。また、各遠隔プラグイン装置1200、1300は互いに異なるコンピューティングノードで行われる。従って、本例示ではロボットと他の2つのコンピューティングノードを合せて計3個のコンピューティングノードが活用される。
【0082】
本例示の全体的な流れは障害物検知オブジェクトのfind_obstacle関数が一定の周期でロボットプラグイン実行エンジン装置1100によって呼び出される。このとき、find_obstacle関数は障害物とロボットとの距離を測定して障害物が存在すると判断されれば、自身のobstacle_foundシンボルにこれを設定する。この設定が変更されれば、このシンボルの値が変更された時、通知を受けると登録した障害物回避オブジェクトのon_obstacle_found関数が呼び出され、障害物回避のためにavoid_obstacle関数を呼び出すようになる。このようなシナリオ上で各段階別の流れを説明すれば、以下の通りである。
【0083】
(1)タイマサービス管理者1102によってdetector.time_out1タイマが1秒毎にタイムアウトされる。このとき、このタイマと連結されたdetector.on_any_timeoutコールバック関数が1秒毎に呼び出されて障害物検知オブジェクトプロキシ1120に伝達される。
【0084】
(2)、(3)detector.on_any_timeout関数の呼び出しを受けた障害物検知オブジェクトプロキシ1120は、これを連結管理者1108、1206を通じて障害物検知オブジェクトに伝送する。
【0085】
(4)遠隔プラグイン装置1200の連結管理者1206は、タイマサービス管理者1202にdetector.time_out1がタイムアウトされたことを知らせる。
【0086】
(5)タイマサービス管理者1202は、detector.time_out1タイマに該当するコールバック関数(detector.find_obstacle)を呼び出す。
【0087】
(6)障害物検知オブジェクトは、find_obstacle関数で障害物との距離を計算した後、障害物があると判断されれば、detector.obstacleシンボルの値を変更するようにシンボルサービス管理者1204に要請する。
【0088】
(7)、(8)シンボルサービス管理者1204は該当シンボルの値を変更するために、ロボットプラグイン実行エンジン装置1100側に該当シンボルの値を変更するよう要請するが、このような要請は連結管理者1206を通じてロボットプラグイン実行エンジン装置1100側に伝達される。
【0089】
(9)シンボル値の変更を要請されたロボットプラグイン実行エンジン装置1100側の連結管理者1108は、シンボルサービス管理者1104に該当値を変更するよう要請する。
【0090】
(10)シンボルサービス管理者1104は該当変数の値を変更した後、該当シンボルに通知サービスが登録されているか通知サービス管理者1106にサービスを要請する。
【0091】
(11)通知サービス管理者1106は、detector.obstacle_foundというシンボル名に該当する通知コールバックが登録されているか調べる。ここでは、avoider.on_any_symbol_changedというコールバック関数が登録されているため、該当関数を呼び出す。このとき、該当シンボル名(detector.obstacle_found)をパラメータとして伝達する。
【0092】
(12)、(13)障害物回避オブジェクトプロキシ122は、連結管理者1110を通じて呼び出しを受けたon_any_symbol_changed関数で自身と相応する遠隔オブジェクトである障害物回避オブジェクトに連結管理者1110を通じてこの事実を通報する。
【0093】
(14)遠隔プラグイン装置1300側の連結管理者1304はシンボル値の通知サービスの要請を受け、該当シンボル名(detector.obstacle_found)を通知サービス管理者1302に伝達する。
【0094】
(15)通知サービス管理者1302は該当シンボル名(detector.obstacle_found)をもってこのシンボルに登録されたコールバック関数であるavoider.avoid_obstacle関数を呼び出す。この関数の呼び出しを受けたavoider障害物回避オブジェクトはavoid_obstacle関数を呼び出して障害物を回避する。
【0095】
(16)1秒毎に(2)〜(15)過程を繰り返し行うことで、ロボットプラグイン実行エンジン装置1100は障害物が現れる度に障害物回避プロセスを起動させる。
【0096】
以上の説明では、本発明の好適な実施形態を提示して説明したが、本発明は必ずしもこれに限定されるものではなく、本発明の属する技術分野において通常の知識を有する者であれば、本発明の技術的思想から逸脱しない範囲内で様々な置換、変形及び変更が可能であることが容易に分かる。
【符号の説明】
【0097】
100 ロボット
110 ロボットプラグイン実行エンジン装置
111、211 オブジェクト管理者
112、211 シンボルサービス管理者
113、213 関数サービス管理者
114、214 通知サービス管理者
115、215 タイマサービス管理者
116、216 連結管理者
【特許請求の範囲】
【請求項1】
各遠隔プラグインの内部に入っている各遠隔オブジェクトを管理するオブジェクト管理者と、
前記各遠隔オブジェクトが登録したシンボルをロボットプラグイン実行エンジン装置に登録して管理するシンボルサービス管理者と、
前記各遠隔オブジェクトが登録した関数を前記ロボットプラグイン実行エンジン装置に登録して管理する関数サービス管理者と、
前記各遠隔オブジェクトが登録した通知関数を前記ロボットプラグイン実行エンジン装置に登録して管理する通知サービス管理者と、
前記各遠隔オブジェクトが登録したタイマを前記ロボットプラグイン実行エンジン装置に登録して管理するタイマサービス管理者と、
ネットワークを介して前記各管理者と前記ロボットプラグイン実行エンジン装置との通信を担当する連結管理者と
を含む遠隔プラグイン装置。
【請求項2】
前記オブジェクト管理者は、
前記ロボットプラグイン実行エンジン装置に登録しようとする遠隔オブジェクトが生成される時、前記生成された遠隔オブジェクトを内部オブジェクトテーブルに格納した後、前記連結管理者に伝達することを特徴とする請求項1に記載の遠隔プラグイン装置。
【請求項3】
前記シンボルサービス管理者は、
特定遠隔オブジェクトが外部に露出させようとするシンボルを登録する時、該当シンボルに対する名前と前記該当シンボルに対する参照を結合してシンボルテーブルエントリを構成した後、前記連結管理者に伝達することを特徴とする請求項1に記載の遠隔プラグイン装置。
【請求項4】
前記関数サービス管理者は、
特定遠隔オブジェクトが外部に露出させようとする関数を登録する時、該当関数に対する名前と前記該当関数に対する参照を結合して関数テーブルエントリを構成した後、前記連結管理者に伝達することを特徴とする請求項1に記載の遠隔プラグイン装置。
【請求項5】
前記通知サービス管理者は、
特定遠隔オブジェクトが登録しようとする通知サービスのために対象シンボルの名前とコールバックされる関数に対する参照が伝達される時、前記対象シンボルに対する名前とコールバック関数に対する参照を結合して通知テーブルエントリを構成した後、前記連結管理者に伝達することを特徴とする請求項1に記載の遠隔プラグイン装置。
【請求項6】
前記タイマサービス管理者は、
特定遠隔オブジェクトが登録しようとするタイマサービスのためにコールバックする関数に対する参照と呼び出される周期が伝達される時、前記タイマ名と関数に対する参照を結合してタイマテーブルエントリを構成した後、前記連結管理者に伝達することを特徴とする請求項1に記載の遠隔プラグイン装置。
【請求項7】
前記各遠隔オブジェクトは、
各オブジェクトに対する生成、削除を定義する登録インターフェースと、
各オブジェクトとプラグイン間で予め約束されたインターフェースを提供する共通インターフェースと、
実際にオブジェクトで行う主要関数及びシンボルを定義する個別インターフェース/個別データ定義部と
を含むことを特徴とする請求項1〜6の何れか1項に記載の遠隔プラグイン装置。
【請求項8】
前記共通インターフェースは、
オブジェクトを初期化するためのInit()、オブジェクトを活性化するためのOn()、オブジェクトを非活性化するためのOff()で構成されることを特徴とする請求項7に記載の遠隔プラグイン装置。
【請求項9】
各ローカルプラグインの内部に入っているオブジェクトを管理し、オブジェクトの登録要請がある時、それに相応するオブジェクトプロキシを生成及び登録するオブジェクト管理者と、
前記各ローカルプラグインで登録したシンボルを管理し、各シンボルの参照及び変更を担当するシンボルサービス管理者と、
前記各ローカルプラグインで登録した関数を管理し、各関数に対する呼び出し及び結果値の返還を担当する関数サービス管理者と、
特定イベントが発生する時、該当ローカルプラグインで登録した関数を呼び出す通知サービス管理者と、
特定周期別に前記各ローカルプラグインで登録した関数を呼び出すタイマサービス管理者と、
ネットワークを介して前記各管理者と遠隔プラグイン装置との通信を担当する連結管理者と
を含むロボットプラグイン実行エンジン装置。
【請求項10】
前記オブジェクト管理者は、
前記遠隔プラグイン装置から登録の要請を受けた該当オブジェクト名と同じ名前を有するオブジェクトプロキシ客体を生成してプロキシとして登録することを特徴とする請求項9に記載のロボットプラグイン実行エンジン装置。
【請求項11】
前記シンボルサービス管理者は、
前記遠隔プラグイン装置からシンボルの登録要請を受けた該当シンボル名と相応するプロキシオブジェクトの参照を結合してシンボルサービスエントリを構成した後、シンボルサービステーブルに登録することを特徴とする請求項9に記載のロボットプラグイン実行エンジン装置。
【請求項12】
前記関数サービス管理者は、
前記遠隔プラグイン装置から関数の登録要請を受けた該当関数名と呼び出される関数名を結合して関数サービスエントリを構成した後、関数サービステーブルに登録することを特徴とする請求項9に記載のロボットプラグイン実行エンジン装置。
【請求項13】
前記通知サービス管理者は、
前記遠隔プラグイン装置から通知の登録要請を受けた該当シンボル名と呼び出される関数名を結合して通知サービスエントリを構成した後、通知サービステーブルに登録することを特徴とする請求項9に記載のロボットプラグイン実行エンジン装置。
【請求項14】
前記タイマサービス管理者は、
前記遠隔プラグイン装置からタイマの登録要請を受けた該当タイマ名と自身の関数を結合してタイマサービスエントリを構成した後、タイマサービステーブルに登録することを特徴とする請求項9に記載のロボットプラグイン実行エンジン装置。
【請求項15】
前記オブジェクトプロキシは、
各オブジェクトに対する生成、削除を定義する登録インターフェースと、
各オブジェクトとプラグイン間で予め約束されたインターフェースを提供する共通インターフェースと
を含むことを特徴とする請求項9〜14の何れか1項に記載のロボットプラグイン実行エンジン装置。
【請求項16】
前記共通インターフェース部は、
オブジェクトを初期化するためのInit()、オブジェクトを活性化するためのOn()、オブジェクトを非活性化するためのOff()、前記ロボットプラグイン実行エンジン装置でタイマイベントが発生した場合、これを処理するためのOn_any_timeoutインターフェース、シンボルの値が変更された時、通知を受けるためのOn_any_symbol_changedインターフェース、オブジェクトのシンボル値を得るためのインターフェースを提供するGet_symbol関数、オブジェクトのシンボル値を変更するためのインターフェースを提供するSet_symbol関数、オブジェクトの関数を呼び出すためのインターフェースを提供するCall_function関数で構成されることを特徴とする請求項15に記載のロボットプラグイン実行エンジン装置。
【請求項17】
各遠隔プラグインの内部に入っている各遠隔オブジェクトを管理し、連結管理者を利用したネットワーク通信を通じて前記各遠隔オブジェクトが登録したシンボル、関数、通知関数、タイマをロボットプラグイン実行エンジンに登録して管理する遠隔プラグインと、
各ローカルプラグインの内部に入っているオブジェクトを管理し、連結管理者を利用したネットワーク通信を通じて前記各ローカルプラグインで登録したシンボル、各関数、前記各関数に対する呼び出し及び結果値の返還、前記各関数の呼び出しをサービスする前記ロボットプラグイン実行エンジンと
を備えるロボットプラグイン実行システム。
【請求項1】
各遠隔プラグインの内部に入っている各遠隔オブジェクトを管理するオブジェクト管理者と、
前記各遠隔オブジェクトが登録したシンボルをロボットプラグイン実行エンジン装置に登録して管理するシンボルサービス管理者と、
前記各遠隔オブジェクトが登録した関数を前記ロボットプラグイン実行エンジン装置に登録して管理する関数サービス管理者と、
前記各遠隔オブジェクトが登録した通知関数を前記ロボットプラグイン実行エンジン装置に登録して管理する通知サービス管理者と、
前記各遠隔オブジェクトが登録したタイマを前記ロボットプラグイン実行エンジン装置に登録して管理するタイマサービス管理者と、
ネットワークを介して前記各管理者と前記ロボットプラグイン実行エンジン装置との通信を担当する連結管理者と
を含む遠隔プラグイン装置。
【請求項2】
前記オブジェクト管理者は、
前記ロボットプラグイン実行エンジン装置に登録しようとする遠隔オブジェクトが生成される時、前記生成された遠隔オブジェクトを内部オブジェクトテーブルに格納した後、前記連結管理者に伝達することを特徴とする請求項1に記載の遠隔プラグイン装置。
【請求項3】
前記シンボルサービス管理者は、
特定遠隔オブジェクトが外部に露出させようとするシンボルを登録する時、該当シンボルに対する名前と前記該当シンボルに対する参照を結合してシンボルテーブルエントリを構成した後、前記連結管理者に伝達することを特徴とする請求項1に記載の遠隔プラグイン装置。
【請求項4】
前記関数サービス管理者は、
特定遠隔オブジェクトが外部に露出させようとする関数を登録する時、該当関数に対する名前と前記該当関数に対する参照を結合して関数テーブルエントリを構成した後、前記連結管理者に伝達することを特徴とする請求項1に記載の遠隔プラグイン装置。
【請求項5】
前記通知サービス管理者は、
特定遠隔オブジェクトが登録しようとする通知サービスのために対象シンボルの名前とコールバックされる関数に対する参照が伝達される時、前記対象シンボルに対する名前とコールバック関数に対する参照を結合して通知テーブルエントリを構成した後、前記連結管理者に伝達することを特徴とする請求項1に記載の遠隔プラグイン装置。
【請求項6】
前記タイマサービス管理者は、
特定遠隔オブジェクトが登録しようとするタイマサービスのためにコールバックする関数に対する参照と呼び出される周期が伝達される時、前記タイマ名と関数に対する参照を結合してタイマテーブルエントリを構成した後、前記連結管理者に伝達することを特徴とする請求項1に記載の遠隔プラグイン装置。
【請求項7】
前記各遠隔オブジェクトは、
各オブジェクトに対する生成、削除を定義する登録インターフェースと、
各オブジェクトとプラグイン間で予め約束されたインターフェースを提供する共通インターフェースと、
実際にオブジェクトで行う主要関数及びシンボルを定義する個別インターフェース/個別データ定義部と
を含むことを特徴とする請求項1〜6の何れか1項に記載の遠隔プラグイン装置。
【請求項8】
前記共通インターフェースは、
オブジェクトを初期化するためのInit()、オブジェクトを活性化するためのOn()、オブジェクトを非活性化するためのOff()で構成されることを特徴とする請求項7に記載の遠隔プラグイン装置。
【請求項9】
各ローカルプラグインの内部に入っているオブジェクトを管理し、オブジェクトの登録要請がある時、それに相応するオブジェクトプロキシを生成及び登録するオブジェクト管理者と、
前記各ローカルプラグインで登録したシンボルを管理し、各シンボルの参照及び変更を担当するシンボルサービス管理者と、
前記各ローカルプラグインで登録した関数を管理し、各関数に対する呼び出し及び結果値の返還を担当する関数サービス管理者と、
特定イベントが発生する時、該当ローカルプラグインで登録した関数を呼び出す通知サービス管理者と、
特定周期別に前記各ローカルプラグインで登録した関数を呼び出すタイマサービス管理者と、
ネットワークを介して前記各管理者と遠隔プラグイン装置との通信を担当する連結管理者と
を含むロボットプラグイン実行エンジン装置。
【請求項10】
前記オブジェクト管理者は、
前記遠隔プラグイン装置から登録の要請を受けた該当オブジェクト名と同じ名前を有するオブジェクトプロキシ客体を生成してプロキシとして登録することを特徴とする請求項9に記載のロボットプラグイン実行エンジン装置。
【請求項11】
前記シンボルサービス管理者は、
前記遠隔プラグイン装置からシンボルの登録要請を受けた該当シンボル名と相応するプロキシオブジェクトの参照を結合してシンボルサービスエントリを構成した後、シンボルサービステーブルに登録することを特徴とする請求項9に記載のロボットプラグイン実行エンジン装置。
【請求項12】
前記関数サービス管理者は、
前記遠隔プラグイン装置から関数の登録要請を受けた該当関数名と呼び出される関数名を結合して関数サービスエントリを構成した後、関数サービステーブルに登録することを特徴とする請求項9に記載のロボットプラグイン実行エンジン装置。
【請求項13】
前記通知サービス管理者は、
前記遠隔プラグイン装置から通知の登録要請を受けた該当シンボル名と呼び出される関数名を結合して通知サービスエントリを構成した後、通知サービステーブルに登録することを特徴とする請求項9に記載のロボットプラグイン実行エンジン装置。
【請求項14】
前記タイマサービス管理者は、
前記遠隔プラグイン装置からタイマの登録要請を受けた該当タイマ名と自身の関数を結合してタイマサービスエントリを構成した後、タイマサービステーブルに登録することを特徴とする請求項9に記載のロボットプラグイン実行エンジン装置。
【請求項15】
前記オブジェクトプロキシは、
各オブジェクトに対する生成、削除を定義する登録インターフェースと、
各オブジェクトとプラグイン間で予め約束されたインターフェースを提供する共通インターフェースと
を含むことを特徴とする請求項9〜14の何れか1項に記載のロボットプラグイン実行エンジン装置。
【請求項16】
前記共通インターフェース部は、
オブジェクトを初期化するためのInit()、オブジェクトを活性化するためのOn()、オブジェクトを非活性化するためのOff()、前記ロボットプラグイン実行エンジン装置でタイマイベントが発生した場合、これを処理するためのOn_any_timeoutインターフェース、シンボルの値が変更された時、通知を受けるためのOn_any_symbol_changedインターフェース、オブジェクトのシンボル値を得るためのインターフェースを提供するGet_symbol関数、オブジェクトのシンボル値を変更するためのインターフェースを提供するSet_symbol関数、オブジェクトの関数を呼び出すためのインターフェースを提供するCall_function関数で構成されることを特徴とする請求項15に記載のロボットプラグイン実行エンジン装置。
【請求項17】
各遠隔プラグインの内部に入っている各遠隔オブジェクトを管理し、連結管理者を利用したネットワーク通信を通じて前記各遠隔オブジェクトが登録したシンボル、関数、通知関数、タイマをロボットプラグイン実行エンジンに登録して管理する遠隔プラグインと、
各ローカルプラグインの内部に入っているオブジェクトを管理し、連結管理者を利用したネットワーク通信を通じて前記各ローカルプラグインで登録したシンボル、各関数、前記各関数に対する呼び出し及び結果値の返還、前記各関数の呼び出しをサービスする前記ロボットプラグイン実行エンジンと
を備えるロボットプラグイン実行システム。
【図1】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9】
【図10A】
【図10B】
【図10C】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9】
【図10A】
【図10B】
【図10C】
【公開番号】特開2011−118867(P2011−118867A)
【公開日】平成23年6月16日(2011.6.16)
【国際特許分類】
【出願番号】特願2010−164186(P2010−164186)
【出願日】平成22年7月21日(2010.7.21)
【出願人】(596180076)韓國電子通信研究院 (733)
【氏名又は名称原語表記】Electronics and Telecommunications Research Institute
【住所又は居所原語表記】161 Kajong−dong, Yusong−gu, Taejon korea
【Fターム(参考)】
【公開日】平成23年6月16日(2011.6.16)
【国際特許分類】
【出願日】平成22年7月21日(2010.7.21)
【出願人】(596180076)韓國電子通信研究院 (733)
【氏名又は名称原語表記】Electronics and Telecommunications Research Institute
【住所又は居所原語表記】161 Kajong−dong, Yusong−gu, Taejon korea
【Fターム(参考)】
[ Back to top ]