情報処理システム及び情報処理方法、ロボットの制御システム及び制御方法、並びコンピュータ・プログラム
【課題】関節などの物理動作を制御する運動制御と、運動制御以外の制御とからなるロボットの制御を同一プラットフォーム上の分散システムとして構築する。
【解決手段】リアルタイム性が要求される複数のモジュールを同一のプロセス内に配置するとともに、モジュール間でメッセージ・パッシングを行なう際に、メッセージ・データのシリアライズ及びデシリアライズが必要か否かを判断するメッセージ・ブローカを各プロセスに配設し、同一プロセス内でのメッセージ・パッシングを高速化し、さらにメッセージ・キューを利用しないメッセージ受信を行なうことでメッセージの同期処理が可能になる。
【解決手段】リアルタイム性が要求される複数のモジュールを同一のプロセス内に配置するとともに、モジュール間でメッセージ・パッシングを行なう際に、メッセージ・データのシリアライズ及びデシリアライズが必要か否かを判断するメッセージ・ブローカを各プロセスに配設し、同一プロセス内でのメッセージ・パッシングを高速化し、さらにメッセージ・キューを利用しないメッセージ受信を行なうことでメッセージの同期処理が可能になる。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、モジュール化、並列化、再利用性の観点から分散処理を行なうように構築された情報処理システム及び情報処理方法、ロボットの制御システム及び制御方法、並びコンピュータ・プログラムに係り、例えば人や環境に対してインタラクションを行なうロボットの制御に適用される情報処理システム及び情報処理方法、ロボットの制御システム及び制御方法、並びコンピュータ・プログラムに関する。
【0002】
さらに詳しくは、本発明は、関節などの物理動作を制御する運動制御と、運動制御以外の制御をともに行なうロボットの制御に適用することができる情報処理システム及び情報処理方法、ロボットの制御システム及び制御方法、並びコンピュータ・プログラムに係り、特に、運動制御において要求される同期リアルタイム性と非同期が許容される運動制御以外の制御において要求される処理の並列性を両立させた、情報処理システム及び情報処理方法、ロボットの制御システム及び制御方法、並びコンピュータ・プログラムに関する。
【背景技術】
【0003】
ロボットは人的作業の代替手段など、さまざまな目的・用途で研究開発が行なわれてきた。最近では、人や環境に対して多用な物理的インタラクションを実現し、メンタル・アシストを行なうことへの要求も高まってきている。例えば、視覚や聴覚などの外部環境の認識結果や本能や感情などの内部状態などの状況を統合的に判断して行動を選択するロボットについて提案がなされている(例えば、特許文献1を参照のこと)。
【0004】
本発明者らは、ロボットの制御体系として分散システムが適していると思料するが、これには幾つかの理由がある。
【0005】
理由の1つとして、ロボットではさまざまなセンサ・デバイスを利用することが挙げられる。各センサ・デバイスが情報取得を行なう周期は区々であり、各々のタイミングで制御ソフトウェアへの割り込みを発生させる。割り込みが発生する度に制御が中断されると、制御性能に悪い影響を及ぼす事が懸念される。このような割り込みを効率よく処理するには、センサ・デバイス毎に処理ルーチンを組み、各処理ルーチンは非同期に実行することが望ましい。すなわち、非同期で動作する分散システムが適していると思料される。
【0006】
また、他の大きな理由として、処理をモジュール化し、これに伴って処理の並列化や再利用性の向上を実現することが挙げられる。ロボットの制御を、運動制御、視覚認識、音声認識、行動計画など、独立性の高い複数の処理に分割することが可能であり、各処理のモジュール化を行ない易い。そして、処理内容によっては高負荷な演算コストを必要する場合もあることから、各モジュールを並列実行する要求が高い。例えば、それぞれ異なるタスクを実行する複数の行動モジュールで構成され、各行動モジュールは並列実行が可能であるとともに、優先度に応じて実行権をスイッチし且つタスク再開が可能となるロボットの行動制御システムについて提案がなされている(例えば、特許文献1を参照のこと)。
【0007】
さらに、ソフトウェア全般に言えることではあるが、一度実装した処理のモジュールを他のロボットでも利用したいという再利用の要求もある。
【0008】
このように、モジュール化、並列化、再利用性の観点から、ロボットの制御には分散システムが積極的に利用される。
【0009】
また、ロボットの制御体系を、関節などの物理動作を制御する運動制御と、運動制御以外の制御に分類することもできる。
【0010】
前者の運動制御では、時々刻々と変化する外部環境に対し適応的に動作する必要がある。このため、視覚・触覚・姿勢・関節角度など各種センサ情報をできる限り早く制御へフィードバックし、それらの情報を考慮した新たな制御値を与えなければならない。また、近年、位置制御だけでなく力制御、あるいは、位置制御と力制御のハイブリッド制御やインピーダンス制御など運動のための制御手法が多様化・高度化してきているが、これらの複雑な制御を安定に運用するためにはミリ秒オーダーの制御周期が要求される。万一、何らかの理由で制御周期が守れないと、ロボットは意図した運動ができなくなり、転倒や環境に危害を加えるといった致命的なダメージが生じる。つまり、ロボットの運動制御は、同期リアルタイム性が要求される制御システムであることが望ましい。
【0011】
さらに付言するならば、運動制御の内容も複雑化の一途を辿っていることからも、分散システムであることが望ましい。さまざまな状況で動作を完遂させるためには、物体把持制御、歩行制御、転倒制御、外力適応制御といった複数の制御方法を用意し、状況を判断しながら自在に制御内容を切り替えたり組み合わせたりする必要がある。このような複雑な制御内容を記述するためには、制御内容毎に独立したモジュールとして実装する方法が有効である。つまり、運動制御の内部も分散システムとして構築することが望ましい。勿論、運動制御はミリ秒オーダー制御周期で動作する必要があり、リアルタイム・システムの要求を満たした分散システムでなければならない。
【0012】
他方、運動制御以外の制御全般においては、視覚情報を用いた物体認識や行動認識、触覚情報を用いた環境物体の動作推定、音声認識、又はこれらの認識結果を用いた機械知能のための演算など、さまざまな処理が必要である。この種の処理には、一度に数100ミリ秒から数秒程度の計算時間を要する場合があるが、通常は運動制御に要求されるようなリアルタイム性は不必要であることから、別のコンピュータ(若しくはプロセッサ)を利用して並列処理することが可能である。また、視覚・触覚・音声などの各認識処理は相互依存性が低く、それぞれが非同期に実行することが可能であることが多い。つまり、運動制御以外の制御は、非同期且つ並列の分散システムに適した処理であると言える。
【0013】
要言すれば、ロボットの制御システムは分散システムが適しているが、運動制御のように同期リアルタイム性を満たした分散システムと、運動制御以外の制御において、非同期が許容されつつ並列実行することが要求される分散システムという2通りのシステム要求がある。
【0014】
ここで、当業界で一般に知られている分散システム、並びにリアルタイム・システムについて幾つかを紹介しておく。
【0015】
複数のプロセッサからなる分散システムのアーキテクチャを密結合型と疎結合型に大別することができる。前者の密結合型アーキテクチャでは共有メモリを用いたプロセス間通信が可能であるのに対し、後者の疎結合型アーキテクチャではメッセージ交換型すなわちメッセージ・パッシングが主に利用される。共有メモリを用いた密結合型アーキテクチャはプログラミングが容易であるのに対し、疎結合型アーキテクチャは、ハードウェアの実現の容易さとスケーラビリティの観点から有利である。MPI(Message−Passing Interface)は、メッセージ・パッシングのための代表的なライブラリであり、さまざまな要求に応えるため、多くの関数(インターフェース)が用意されている。MPIは、分散メモリ型の並列コンピュータ(若しくはプロセッサ)を前提とし、並列に接続されたコンピュータ間をメッセージ・パッシングによって通信するための規格である(言い換えれば、直接的な関数呼び出しを行なうものではない)。コンピュータ間でメッセージ・パッシングするためには各コンピュータにメッセージ・キューを装備することが不可欠である。このメッセージ・キューを使うことで、コンピュータ間の通信が非同期になることは免れない。言い換えれば、MPIでは、コンピュータ間の通信が非同期になるため、ミリ秒オーダーのリアルタイム・システムを要求するアプリケーションには適用が困難である。
【0016】
また、分散オブジェクト技術を実現するアーキテクチャとして代表的なものに、CORBA(Common Object Request Broker Architecture)が挙げられ、ネットワーク接続された複数のコンピュータを一度に動かすために利用することができる。CORBAによるオブジェクト機能呼び出しは、通常は同期的に処理されるが、アーキテクチャ構造上、オブジェクト機能を呼び出す毎にシリアライゼーションとネットワーク通信が発生し、通常一度の呼び出しで数ミリ秒以上の時間コストが必要となる(ネットワーク接続されたコンピュータ間で言語を超えた通信を行なう際、送信元では、送信先に適合するよう、データを冗長化したシリアライゼーションを行なう)。このため、CORBAは、ミリ秒オーダーのリアルタイム・システムを要求するアプリケーションには適用が困難である。また、非同期処理を利用した場合には、指定時間内にシステムに課せられた処理を終えることが保障されないため、リアルタイム・システムの要求を満たさないことは明白である。(初期表現から他の何らかの表現への変換をシリアライゼーションと呼び、その後の初期表現への逆変換のことをデシリアライゼーションと呼ぶ。シリアライズは、具体的には、オブジェクトの状態を表す変数(フィールド)、さらにはオブジェクトの種類(クラス)を表す何らかの識別子を、ファイル化できるようなバイト列やXMLフォーマットの形に書き出す直列化に相当し、デシリアライズは、その逆の直列化復元に相当する。)
【0017】
また、リアルタイム・システムの機能要求を満たす機構として、VxWorksやONXに代表されるようなRTOS(Real Time Operating System)が挙げられる。RTOSを用いると、ミリ秒オーダーのリアルタイム・システムを要求するアプリケーションの実現が可能である。しかし、RTOSでは、リアルタイム性を要求する処理と、数100ミリ秒から数秒オーダーの処理時間を要求する非同期処理とを並列実行するための仕組みを持たない。並列処理を実現するには、複数のコンピュータによる並列実行が必要となる。これに対し、RTOSでは、リアルタイム・システムに特化した機構になっており、通常は1つのコンピュータ内での処理だけ想定して設計されている。RTOSでコンピュータ間の通信による並列実行を実現するには、コンピュータ間の通信規約を定める、あるいは利用する必要があると思料される。このようなことから、リアルタイム処理と別のコンピュータを利用した非同期処理とを同時に実現するには、実装に多くの負担が生じる。
【0018】
既に述べたように、ロボットの制御全体を考慮すると、分散システムで構築することが好ましい。また、分散システムの技術自体は、情報処理の分野において古くから研究開発がなされている。
【0019】
例えば、ロボット・アームの制御に適用した分散処理システムについて提案がなされている(例えば、特許文献2を参照のこと)。
【0020】
ところが、視覚認識や音声認識などのようにリアルタイム性を問わず複数のコンピュータ(プロセッサ)を利用して非同期であっても並列処理を行ないたいという要求と、運動制御のように同期しながらリアルタイムに処理を行ないたい要求の双方を両立させた単一のシステムとして構築した分散システムは皆無に等しい。
【0021】
【特許文献1】特許第3558222号公報
【特許文献2】特開2002−342300号公報
【発明の開示】
【発明が解決しようとする課題】
【0022】
本発明の目的は、例えば人や環境に対してインタラクションを行なうロボットの制御に好適に適用することができる、優れた情報処理システム及び情報処理方法、ロボットの制御システム及び制御方法、並びコンピュータ・プログラムを提供することにある。
【0023】
本発明のさらなる目的は、関節などの物理動作を制御する運動制御と、運動制御以外の制御をともに行なうロボットの制御に好適に適用することができる、優れた情報処理システム及び情報処理方法、ロボットの制御システム及び制御方法、並びコンピュータ・プログラムを提供することにある。
【0024】
本発明のさらなる目的は、運動制御において要求される同期リアルタイム性と非同期が許容される運動制御以外の制御において要求される処理の並列性を両立させることができる、優れた情報処理システム及び情報処理方法、ロボットの制御システム及び制御方法、並びコンピュータ・プログラムを提供することにある。
【課題を解決するための手段】
【0025】
本発明は、上記課題を参酌してなされたものであり、その第1の側面は、
リアルタイムの同期処理が要求されるモジュール群を、プログラムを実行する単位となる1つのプロセス内で実行する同期処理手段と、
非同期であることが許容されるが並列処理が要求される各モジュールをそれぞれ個別のプロセスに配置して並列して実行する並列処理手段と、
前記モジュール間でのデータの受け渡しをメッセージ・パッシングにより行なうモジュール間通信手段と、
を具備することを特徴とする情報処理システムである。
【0026】
但し、ここで言う「システム」とは、複数の装置(又は特定の機能を実現する機能モジュール)が論理的に集合した物のことを言い、各装置や機能モジュールが単一の筐体内にあるか否かは特に問わない。
【0027】
例えばロボットの制御全体を考慮すると、モジュール化、並列化、再利用性の観点から分散システムで構築することが好ましい。ロボットの制御は、各モジュールが同期しながらリアルタイム処理を行なうことが要求される運動制御と、視覚認識や音声認識のように非同期であることが許容されつつも各モジュールを並列処理することが要求される運動制御以外の制御に分けることができるが、同期リアルタイム処理と非同期・並列処理の双方を両立させた単一のシステムとして構築した分散システムは皆無に等しい。
【0028】
コンピュータにおけるプログラムの実行単位を「プロセス」と呼ぶと、並列処理されるプロセス間でのメッセージ・パッシングは、メッセージ・データのシリアライズ及びデシリアライズの処理が介在することから、非同期となってしまう(前述)。各プロセスが同一のコンピュータ、あるいは異なるコンピュータで実行される場合も同様である。他方、同一プロセス内でのメッセージ・パッシングは、シリアライズ及びデシリアライズが不要であることから、リアルタイム性を失うことはない。
【0029】
ロボットの制御システムは、メッセージ・パッシングによるモジュール間通信を用いた分散システムとして構築することが好ましい。本発明では、リアルタイム性が要求される複数のモジュールを同一のプロセス内に配置するとともに、モジュール間でのメッセージ交換に介在するメッセージ・ブローカをプロセス毎に配設している。
【0030】
このメッセージ・ブローカは、モジュール間でメッセージ・パッシングを行なう際に、メッセージ・データのシリアライズ及びデシリアライズが必要か否か、並びにメッセージをメッセージ・キューに一時保管する必要があるか否かを判断する。これによって、同一プロセス内でのメッセージ・パッシングは、シリアライズ及びデシリアライズ処理は介在しなくなることから高速化する。プロセスをまたいだメッセージ・パッシングは分散メモリ型の並列処理として扱われるが、プロセス内のメッセージ・パッシングは共有メモリ型並列処理として扱われることから、メッセージ・データのシリアライズ及びデシリアライズを省略することが可能である。
【0031】
また、個々のモジュールは、他のモジュールから受信したメッセージを一時的に保管するメッセージ・キューを装備しているが、メッセージの送信元モジュールがどのプロセスに存在するかに応じて、受信したメッセージをメッセージ・キューに保管すべきかどうかを適応的に決定するようにしている。具体的には、モジュールは、自身がメッセージの送信先となる場合において、送信元となるモジュールが同じプロセス内にないときには、受信したメッセージをメッセージ・キューに一時保管することで、送信元モジュールと送信先モジュールの実行を切り離すことができ、非同期分散処理が可能になる。これに対し、メッセージ送信先のモジュールが同じプロセス内にあるときには、モジュールは受信したメッセージ・キューを利用しないようにする。この結果、関数呼び出しと同等の処理負荷でのメッセージ・パッシングが可能となり、同一プロセス内のモジュール間においてメッセージの同期処理が可能になる。
【0032】
各モジュールは、送信メッセージの一覧を取得する関数及び受信メッセージの一覧を取得する関数を含むものとし、モジュール毎の前記の送信メッセージの一覧を取得する関数及び受信メッセージの一覧を基に各メッセージの送信モジュール及び受信モジュールに関するメッセージ送受信情報を収集することができる。また、システム内では、各プロセスを実行するコンピュータ名と、プロセス内に配置されるモジュール並びに各モジュールのメッセージ処理タイミングを記述するとともに、処理順序依存性のあるメッセージを指定した構成ファイルが管理されている。そして、構成ファイル及びメッセージ送受信情報を用いて、処理順序依存関係を取得することができる。また、メッセージ・ブローカは、各モジュール内の送信メッセージの一覧を取得する関数及び受信メッセージの一覧を取得する関数を用いて、メッセージを適切に扱うことができる。また、受信モジュール側でモジュールを受信する際には、構成ファイルに記述されている受信モジュールのメッセージ処理タイミングに応じて、メッセージを該受信モジュールのメッセージ・キューに保管するか否かを決定することができる。
【0033】
本発明の第1の側面に係る情報処理システムは、2以上のコンピュータ(若しくはプロセッサ)を用いて構築することができる。異なるコンピュータ(若しくはプロセッサ)間では処理の並列性を充分確保することができる(周知)。したがって、並列処理手段により非同期で実行されるモジュールのうちとりわけ並列性が要求されるモジュールの組み合わせに関しては、異なるコンピュータ上で実行されるプロセスに分散して配置することで、確実に並列処理を実現することができる。
【0034】
したがって、本発明によれば、非同期・並列処理と同期リアルタイム処理の要求を満たした分散システムを同一のプラットフォーム上で構築することができる。
【0035】
ロボットの運動制御のように周期的に処理が行なわれる場合、通常、割り込み処理が利用される(例えば、ロボットの各部位に配設されたセンサ・デバイスは、情報取得を行なうと、制御ソフトウェアへの割り込みを発生させる)。運動制御プログラムが、一連の周期的な処理を複数のモジュールに分割して実装され、各モジュールが協調して動作する構造になっている場合、各モジュールに割り込みを発生させれば良いが、このとき、モジュール間で処理の順序依存性の問題が発生する。例えば、運動制御プログラム内で、手の関節角度制御と手を用いた物体把持制御がそれぞれ独立した制御モジュールとして実装されている場合、先に関節角度制御モジュールに割り込みが発生して関節角度指令を発すると、物体把持制御のための関節角度指令がその制御周期では反映されなくなる。
【0036】
これに対し、本発明に係るロボット制御システムは、メッセージ・パッシングによるモジュール間通信を用いた分散システムとして構築されるが(前述)、モジュール間における処理順序依存性を、モジュール間で発生するメッセージの送受信関係に基づいて判断するようにしている。
【0037】
例えば、関節角度制御と物体把持制御が別々のモジュールに実装され、同じプロセス内に配置することで、両モジュール間でメッセージの同期処理が可能となる。また、物体把持制御のための関節角度指令はメッセージ・パッシングによって関節角度制御モジュールへ通知される。つまり、関節角度制御モジュールと物体把持制御モジュールの間での処理の順序性依存は、これらのモジュール間で発生するメッセージの送受信関係から判断することが可能である。具体的には、同期マルチキャスト通信の送信先となるモジュール間におけるメッセージ送受信関係においてメッセージ・パッシングの送信先にしかならないルート・モジュールをまず抽出し、各ルート・モジュールからメッセージ・パッシングで繋がる順に従って処理の順序依存性を把握することができる。
【0038】
したがって、本発明に係るロボット制御システムでは、処理順序の依存性が問題となるモジュール群に対しては、メッセージの送受信関係に基づいて割り込み順序を決定するというアルゴリズムを提供することによって、(人間(例えば、オペレータ)が判断する必要なく)自動的に適切な順序で各モジュールに割り込みを発生させることができる。
【0039】
また、本発明の第2の側面は、複数のモジュールからなりコンピュータ上で実行するようにコンピュータ可読形式で記述されたコンピュータ・プログラムであって、前記コンピュータを、
リアルタイムの同期処理が要求されるモジュール群を、プログラムを実行する単位となる1つのプロセス内で実行する同期処理手段と、
非同期であることが許容されるが並列処理が要求される各モジュールをそれぞれ個別のプロセスに配置して並列して実行する並列処理手段と、
前記モジュール間でのデータの受け渡しをメッセージ・パッシングにより行なうモジュール間通信手段と、
として機能させるためのコンピュータ・プログラムである。
【0040】
本発明の第2の側面に係るコンピュータ・プログラムは、コンピュータ上で所定の処理を実現するようにコンピュータ可読形式で記述されたコンピュータ・プログラムを定義したものである。換言すれば、本発明の第2の側面に係るコンピュータ・プログラムをコンピュータにインストールすることによって、コンピュータ上では協働的作用が発揮され、本発明の第1の側面に係る情報処理システムと同様の作用効果を得ることができる。
【発明の効果】
【0041】
本発明によれば、例えば人や環境に対してインタラクションを行なうロボットの制御に好適に適用することができる、優れた情報処理システム及び情報処理方法、ロボットの制御システム及び制御方法、並びコンピュータ・プログラムを提供することができる。
【0042】
また、本発明によれば、関節などの物理動作を制御する運動制御と、運動制御以外の制御をともに行なうロボットの制御に好適に適用することができる、優れた情報処理システム及び情報処理方法、ロボットの制御システム及び制御方法、並びコンピュータ・プログラムを提供することができる。
【0043】
また、本発明によれば、運動制御において要求される同期リアルタイム性と非同期が許容される運動制御以外の制御において要求される処理の並列性を両立させることができる、優れた情報処理システム及び情報処理方法、ロボットの制御システム及び制御方法、並びコンピュータ・プログラムを提供することができる。
【0044】
本発明によれば、リアルタイム・システムが要求される運動制御のような機能であってもその内部をモジュール化することが可能で、且つ、物体認識や知能機械といった機能をモジュール化して並列分散処理が可能になる。その結果、すべてのモジュールがシームレスに接続でき、アプリケーション全体で一貫性のあるシステム構成が実現できるようになる。人や環境に対してインタラクションを行なうロボットなどでは複雑な機能構成を持つが、本発明を適用することで上記の効果を得ることができる。
【0045】
また、本発明によれば、同期マルチキャスト・メッセージ通信において、自動的に処理順序依存性の問題を解決することができる。運動制御を複数のモジュールに分割して構成すると、モジュール間で処理の順序依存性を持つことがあるが、処理順序依存性を解決することで、制御システムは破綻することなく稼動することができる。
【0046】
本発明のさらに他の目的、特徴や利点は、後述する本発明の実施形態や添付する図面に基づくより詳細な説明によって明らかになるであろう。
【発明を実施するための最良の形態】
【0047】
以下、図面を参照しながら本発明の実施形態について詳解する。
【0048】
A.ロボット装置並びにその制御体系
図1には、本発明に係る分散処理システムを適用して制御を実現することができるロボット装置の構成例を示している。図示のロボット装置1は、全体の動作の統括的制御やその他のデータ処理を行なう制御ユニット20と、入出力部40と、駆動部50と、電源部60で構成される。
【0049】
入出力部40は、入力部としてロボット装置1の目に相当するCCDカメラ15や、耳に相当するマイクロフォン16、頭部や背中などの部位に配設されてユーザの接触を感知するタッチ・センサ18、あるいは五感に相当するその他の各種のセンサを含む。また、出力部として、口に相当するスピーカ17、あるいは点滅の組み合わせや点灯のタイミングにより顔の表情を形成するLEDインジケータ(目ランプ)19などを装備している。これら出力部は、音声やランプの点滅など、脚などによる機械運動パターン以外の形式でもロボット装置1からのユーザ・フィードバックを表現することができる。
【0050】
駆動部50は、制御部20が指令する所定の運動パターンに従ってロボット装置1の機体動作を実現する機能ブロックであり、行動制御による制御対象である。駆動部50は、それぞれの関節におけるロール、ピッチ、ヨーなど軸毎に設けられた複数の駆動ユニットで構成され、ロボット装置1の各関節における自由度を実現する。各駆動ユニットは、所定軸回りの回転動作を行なうモータ51と、モータ51の回転位置を検出するエンコーダ52と、エンコーダ52の出力に基づいてモータ51の回転位置や回転速度を適応的に制御するドライバ53の組み合わせで構成される。駆動ユニットの組み合わせ方によって、ロボット装置1を例えば2足歩行又は4足歩行などの脚式移動ロボットとして構成することができる。
【0051】
電源部60は、ロボット装置1内の各電気回路などに対して給電を行なう。ロボット装置1は、バッテリを用いた自律駆動式であり、電源部60は、充電バッテリ61と、充電バッテリ61の充放電状態を管理する充放電制御部62とで構成される。
【0052】
制御ユニット20は、「頭脳」に相当し、例えばロボット装置1の機体頭部あるいは胴体部に搭載されている。
【0053】
図2には、制御ユニット20の構成をさらに詳細に図解している。同図に示すように、制御ユニット20は、メイン・コントローラとしてのCPU(Central Processing Unit)21が、メモリやその他の各回路コンポーネントや周辺機器とバス接続された構成である。
【0054】
RAM(Random Access Memory)22は、DRAM(Dynamic RAM)などの揮発性メモリで構成された書き込み可能メモリであり、CPU21が実行するプログラム・コードをロードしたり、実行プログラムによる作業データの一時的な保存したりために使用される。また、ROM(Read Only Memory)23は、制御プログラムやデータを恒久的に格納する読み出し専用メモリである。ここで、ロボット装置1の制御プログラムには、カメラ15やマイクロフォン16などのセンサ入力を処理してシンボルとして認識する「センサ入力・認識処理プログラム」や、短期記憶や長期記憶などの記憶動作(後述)を司りながらセンサ入力と所定の行動制御モデルとに基づいてロボット装置1の行動を制御する「行動制御プログラム」、行動制御モデルに従って各関節モータの駆動やスピーカ17の音声出力などを制御する「駆動制御プログラム」などが含まれる。
【0055】
不揮発性メモリ24は、例えばEEPROM(Electrically Erasable and Programmable ROM)のように電気的に消去再書き込みが可能なメモリ素子で構成され、逐次更新すべきデータを不揮発的に保持するために使用される。逐次更新すべきデータには、暗号鍵やその他のセキュリティ情報、出荷後にインストールすべき装置制御プログラムなどが挙げられる。
【0056】
インターフェース25は、制御ユニット20外の機器と相互接続し、データ交換を可能にするための装置である。インターフェース25は、例えば、カメラ15やマイクロフォン16、スピーカ17との間でデータ入出力を行なう。また、インターフェース25は、駆動部50内の各ドライバ53−1…との間でデータやコマンドの入出力を行なう。
【0057】
また、インターフェース25は、RS−232Cなどのシリアル・インターフェース、IEEE1284などのパラレル・インターフェース、USBインターフェース、i−Link(IEEE1394)インターフェース、SCSIインターフェース、PCカードやメモリ・スティックを受容するメモリ・カード・インターフェース(カード・スロット)などのような、コンピュータの周辺機器接続用の汎用インターフェースを備え、ローカル接続された外部機器との間でプログラムやデータの移動を行なうようにしてもよい。また、インターフェース25の他の例として、赤外線通信(IrDA)インターフェースを備え、外部機器と無線通信を行なうようにしてもよい。
【0058】
さらに、制御ユニット20は、無線通信インターフェース26やネットワーク・インターフェース・カード(NIC)27などを含み、Bluetooth(登録商標)通信のような近接無線データ通信や、IEEE802.11のような無線LAN、さらにはインターネットなどの広域ネットワークを経由して、外部のさまざまなホスト・コンピュータとデータ通信を行なうことができる。
ロボット装置1とホスト・コンピュータ間におけるデータ通信により、遠隔のコンピュータ資源を用いて、ロボット装置1の複雑な動作制御を演算したり、リモート・コントロールしたりすることができる。
【0059】
ロボット装置1の行動制御システムは、いわゆるオブジェクト指向(Object Oriented)技術を採り入れて実装される。オブジェクト指向によれば、ソフトウェアの開発と保守が効率化する。オブジェクト指向に基づくソフトウェアは、基本的に、データとそのデータに対する処理手続きとを一体化させた「オブジェクト」というモジュール単位で扱われる。また、必要に応じて複数のオブジェクトを作成し、これら組み合わせることで1つのソフトウェアが完成する。
【0060】
なお、オブジェクト指向パラダイムは、「カプセル化」、「クラス/インスタンス」、「クラス継承(インヘリタンス)」、及び、「メッセージ・パッシング」という主要な基本技術によって実現される。カプセル化は、データと手続き(メソッド)を一体化させることを指す。クラスは、複数のオブジェクトを共通化して定義することを指す。インスタンスはクラスに属するオブジェクトの実体を表す(同一クラスに属するオブジェクトすなわちインスタンスは基本的に同一のメソッドを有するので、個々にメソッドを定義する必要がない)。インヘリタンスとは、あるクラスで定義したことを別の(例えば下位の)クラスが継承することを意味する(新たにクラスを定義するときには、定義済みのクラスとの差分のみを追加変更するだけでよい)。メッセージ・パッシングとは、オブジェクトにメッセージを送って所定の動作を指示することを言う。各オブジェクトは自身のデータを隠蔽しているので、通常、メッセージ・パッシング以外の方法でオブジェクトにアクセスすることはできない。
【0061】
また、後述するが、ロボット1の行動制御システムは、オブジェクト指向(前述)により実装された複数のモジュールで構成される。オブジェクト指向技術により実装されたモジュールのことを「スキーマ(schema)」とも呼び、多数のスキーマをツリー状に階層化することで行動制御システムが構築される。
【0062】
B.分散システムの構築
[背景技術]の欄でも述べたように、ロボットの制御は、各モジュールが同期しながらリアルタイム処理を行なうことが要求される運動制御と、視覚認識や音声認識のように非同期であることが許容されつつも各モジュールを並列処理することが要求される運動制御以外の制御に分けることができる。本実施形態に係る行動制御システムは、モジュール化、並列化、再利用性の観点から分散システムで構築されるが、同期リアルタイム処理と非同期・並列処理の双方を両立させた単一のシステムである点に主な特徴がある。かかる分散システムにおいては、リアルタイムの同期処理が要求されるモジュール間のメッセージ・パッシングと、割り込み処理が発生した際などプロセス内で同期マルチキャスト通信を行なう場合のモジュール間での処理の順序依存性が問題となる。以下では、これらの点について詳解する。
【0063】
B−1.メッセージ・パッシングによるモジュール間通信
メッセージ・パッシングによるモジュール間通信の仕組みについて、図3を参照しながら説明する。
【0064】
同図において、モジュールはオブジェクト指向(前述)により実装されたソフトウェア・オブジェクトであり、インスタンスの生成単位である(インスタンスはクラスに属するオブジェクトの実体を表す)。
【0065】
プロセスは、コンピュータがプログラムを実行する単位である。本実施形態では、1つのプロセス内に複数のモジュールを配置することが許容されている。また、図示のように、プロセス内、プロセス間、さらにはコンピュータ間にまたがってモジュールを配置することができる。
【0066】
プロセス内、プロセス間、コンピュータ間のいずれにおいてもモジュール間通信は可能であるが、各モジュールへはメッセージ・パッシングによる方法によってのみアクセスが可能である。メッセージ・パッシングとは、オブジェクトにメッセージを送って所定の動作を指示することに相当する。
【0067】
メッセージ・パッシングには、1対1のモジュール間で通信するユニキャストや、1対複数のモジュール間で通信するマルチキャストがある。図3中の曲線は、メッセージ・パッシングの経路(モジュール間のメッセージ送受信関係)を示している。
【0068】
プロセスをまたいだメッセージ・パッシングは、分散メモリ型の並列処理として扱われ、プロセス境界においてメッセージ・データのシリアライズ及びデシリアライズが行なわれる。他方、プロセス内のメッセージ・パッシングは、いわゆる共有メモリ型並列処理として扱われ、メッセージ・データのシリアライズ及びデシリアライズは省略される。
【0069】
また、各モジュールは、他のモジュールから受信したメッセージを一時的に保管するメッセージ・キューを装備している。通常、メッセージ・キューに保管されたメッセージは、何らかのタイミングでメッセージ・キューから取り出され、モジュールによる処理が行なわれる。ここで言う何らかのタイミングとして、プロセッサのスケジューリングによってモジュールに実行権が与えられたときや、周期的な割り込みイベントが発生したときなどが挙げられる。モジュールは、受信したメッセージを、メッセージに一度も保管することなく、直接処理することも可能である。
【0070】
分散システムが2以上のコンピュータ(若しくはプロセッサ)を用いて構築される場合、異なるコンピュータ(若しくはプロセッサ)間では処理の並列性を充分確保することができる(周知)。非同期処理が許容されるモジュールの組み合わせのうちとりわけ並列実行が要求されるものに関しては、各モジュールを異なるコンピュータ(若しくはプロセッサ)に分散して配置することで、確実に並列処理を実現することができる。
【0071】
B−2.メッセージ・ブローカを介したメッセージ・パッシングの高速化
本実施形態に係る分散システムでは、同一のプロセス内のモジュール間でメッセージ・パッシングを行なう際に、シリアライズ及びデシリアライズという処理時間を要する処理を省略することで、高速通信を実現する。
【0072】
B−2−1.メッセージ・ブローカ
メッセージ・パッシングを行なう際にメッセージ・データのシリアライズ及びデシリアライズが必要か否かを判断するメッセージ・ブローカを各プロセス内に配置している。
【0073】
例えば、図4Aに示したようなモジュール構成からなる分散システムの各プロセス内にメッセージ・ブローカを配置すると、図4Bのようになる。図示のように、プロセス内及びプロセス間で行なわれるモジュール間通信は、必ずメッセージ・ブローカが介在したメッセージ・パッシングにより行なわれる。
【0074】
B−2−2.メッセージ・ブローカによるシリアライズ及びデシリアライズ
シリアライズは、具体的には、オブジェクトの状態を表す変数(フィールド)、さらにはオブジェクトの種類(クラス)を表す何らかの識別子を、ファイル化できるようなバイト列やXMLフォーマットの形に書き出す直列化に相当し、デシリアライズは、その逆の直列化復元に相当する。プロセス内のメッセージ・パッシングは共有メモリ型並列処理として扱われることから、メッセージ・データのシリアライズ及びデシリアライズを省略することが可能である。
【0075】
既に説明したように、すべてのメッセージはメッセージ・ブローカを介してパッシングされる。メッセージ・ブローカは、プロセス内外のいずれから受け取ったメッセージ・データであるのか、あるいはプロセス内外のいずれに送り出すメッセージ・データであるのかに応じて、シリアライズ又はデシリアライズを行なう必要があるかどうかを判断する。かかる判断を行なうためには、メッセージ・ブローカが該当メッセージの送受信関係(送信モジュールと受信モジュールの関係)を把握する必要がある。
【0076】
送受信関係を把握する方法としては、メッセージ自体にメッセージの送信元及び送信先のモジュールに関する情報を埋め込む方法や、システム開始時にメッセージの送受信関係をメッセージ・ブローカがあらかじめ取得しておく方法など、幾つか考えられる。本発明の要旨は特定の方法に限定されないので、ここでは送受信関係を把握する具体的な方法についての詳細な説明を省略する。
【0077】
図5には、メッセージが送られてきたときにメッセージ・ブローカが実行する処理手順をフローチャートの形式で示している。
【0078】
メッセージ・ブローカは、メッセージを受け取ると、その送信元がプロセス内のモジュールか否かをチェックする(ステップS1)。ここで、送信元モジュールがプロセス外である場合には(ステップS1のNo)、当該メッセージ・データは送信元モジュールが配置されたプロセスのメッセージ・ブローカによってシリアライズされていることになるので、当該メッセージ・ブローカは、メッセージ・データのデシリアライズを実行する(ステップS2)。
【0079】
次いで、メッセージ・ブローカは、受け取ったメッセージの送信先があるか否かをチェックする(ステップS3)。送信先がない場合(指定されているすべての送信先へのパッシングが終了したとき)には(ステップS3のNo)、当該処理ルーチンを終了する。
【0080】
一方、メッセージの送信先がある場合には(ステップS3のYes)、メッセージ・ブローカは、続いて当該送信先モジュールがプロセス内か否かをチェックする(ステップS4)。
【0081】
ここで、送信先モジュールがプロセス外のときには(ステップS4のNo)、メッセージ・ブローカは、メッセージ・データのシリアライズを行なってから(ステップS5)、送信先モジュールの存在するプロセスへメッセージ・データを送信する(ステップS7)。
【0082】
また、送信先モジュールがプロセス内のときには(ステップS4のYes)、メッセージ・ブローカは、メッセージ・データのシリアライズを省略して、当該メッセージをそのまま送信先モジュールへ届ける(ステップS6)。
【0083】
このようにして、メッセージ・データの送信を終えると、メッセージ・ブローカは、次の送信先メッセージを取り出して(ステップS8)、ステップS3に戻り、上記と同様の処理を繰り返し実行する。
【0084】
B−3.メッセージ・キューを利用しないメッセージ受信によるメッセージ・パッシングの高速化
各モジュールは、他のモジュールから届いたメッセージを一時的に保管するためのメッセージ・キューを備えている。本実施形態に係る分散システムでは、メッセージ・パッシングを高速化するためのその他の方法として、メッセージ・キューを利用しないメッセージ受信を行なうようにしている。
【0085】
すなわち、メッセージ・パッシングの際に、メッセージ・キューの利用の有無を選択する仕組みを導入する。メッセージ・キューを利用しない場合には、送信元モジュールから発行されたメッセージが送信先モジュールで即時処理される。送信元と送信先のモジュールが同一プロセス内にあるときには、メッセージ・キューを利用しないことで、関数呼び出しと同等の処理負荷でのメッセージ・パッシングが可能となり、同一プロセス内のモジュール間においてメッセージの同期処理が可能になる。
【0086】
B−3−1.メッセージ・キューを利用したメッセージ・パッシング
まず、メッセージ・キューを利用したメッセージ・パッシングについて説明する。送信先モジュールが受信したメッセージはメッセージ・キューに一時保存される。メッセージ・キューに一時保存することで、送信元モジュールと送信先モジュールの実行を切り離すことができ、非同期分散処理が可能になる。
【0087】
図6には、メッセージ・キューを利用した場合のメッセージ・パッシングの処理手順をフローチャートの形式で示している。
【0088】
まず、送信元モジュールがメッセージを送信する(ステップS11)。
【0089】
メッセージ・ブローカは、送信メッセージに対する処理を実施する(ステップS12)。例えば、送信元モジュールのあるプロセス内に配置されたメッセージ・ブローカはメッセージ・データのシリアライズを行ない、また、送信先モジュールのあるプロセス内に配置されたメッセージ・ブローカは、メッセージ・データのデシリアライズを行なう(前述)。そして、送信先モジュールのあるプロセス内に配置されたメッセージ・ブローカは、送信先モジュールが持つメッセージ・キューに、メッセージ・データを一時保存する(ステップS13)。
【0090】
送信先モジュールでの処理は、送信元モジュールとは非同期分散処理となる。すなわち、送信先モジュールは、メッセージ・キューに保管されたメッセージを、何らかのタイミングで取り出して(ステップS14)、その処理を実行する(ステップS15)。
【0091】
B−3−2.メッセージ・キューを利用ないメッセージ・パッシング
続いて、メッセージ・キューを利用ないたメッセージ・パッシングについて説明する。送信先モジュールが受信したメッセージは即時処理される。このメッセージ・パッシング方法は、送信元と送信先のモジュールが同一プロセス内にあるときに実施される。
【0092】
図7には、メッセージ・キューを利用しない場合のメッセージ・パッシングの処理手順をフローチャートの形式で示している。
【0093】
まず、送信元モジュールがメッセージを送信する(ステップS21)。
【0094】
メッセージ・ブローカは、送信メッセージに対する処理を実施する(ステップS22)。そして、送信先モジュールは、メッセージの処理を即時に実行する(ステップS23)。
【0095】
送信元と送信先のモジュールが同一プロセス内にある場合は、メッセージ・キューを利用しないことで、(送信元及び送信先モジュールの実行処理が切り離せないため)非同期分散処理ができなくなるが、関数呼び出しと同等の処理負荷でのメッセージ・パッシングが可能となる。
【0096】
B−4.同期型マルチキャスト通信における処理順序依存性の解決
割り込み処理が発生した際には、プロセス内ではあるモジュールから他の複数のモジュール宛ての同期マルチキャスト通信を行なうことがあるが、送信先となる各モジュール間において処理の順序依存性が問題になる。
【0097】
例えば、ロボットの運動制御プログラム内で、手の関節角度制御と手を用いた物体把持制御がそれぞれ独立した制御モジュールとして実装されている場合、先に関節角度制御モジュールに割り込みが発生して関節角度指令を発すると、物体把持制御のための関節角度指令がその制御周期では反映されなくなる。
【0098】
このような、並列処理におけるモジュール間の処理順序依存性の問題を解決するためには、メッセージ・パッシングを使う方法や、シグナルを使う方法、同期バリアを使う方法などさまざまな方法が挙げられ、状況に応じて使い分ければ良い。しかし、これらの方法はいずれも各モジュールが非同期に実行されている場合を前提にした解決方法であり、リアルタイム性の同期処理の要求を満足することはできない。
【0099】
上述したように、本実施形態に係る分散システムでは、メッセージ・キューを利用しないメッセージ・パッシングが利用でき、同一プロセス内でのモジュール間のメッセージ・パッシングは同期通信となる。このようなメッセージ・パッシング方法では、非同期の並列処理を前提にした従来の解決方法を適用することはできない。
【0100】
以下では、従来の解決方法を適用できない同期型マルチキャスト通信における処理順序依存性を解決するための方法について説明する。
【0101】
B−4−1.メッセージ・ブローカによる処理依存性の解決
図8には、分散システムのあるプロセス内で複数のモジュールに対する同期型マルチキャスト通信が実行される様子を示している。
【0102】
同図では、モジュールAがモジュールB、C、Dに対してメッセージを送信している。このときモジュールB、C、Dのうち、どのモジュールから順にメッセージを受信するかは不定である。
【0103】
本実施形態に係る分散システムでは、プロセス毎にメッセージ・ブローカが配設され、プロセス内及びプロセス間で行なわれるモジュール間通信は、必ずメッセージ・ブローカが介在したメッセージ・パッシングにより行なわれる(前述)。メッセージ・ブローカの介在によりプロセス内で行なわれる同期型マルチキャスト通信は、図9に示す通りとなる。したがって、メッセージ・ブローカがメッセージ送信先であるモジュールB、C、D間の処理依存関係を保持し、それを基にメッセージを配信する順序を並べ替えることで、処理順序依存性の問題を解決することができる。
【0104】
B−4−2.メッセージ送受信を基にした処理順序関係の自動解決
メッセージ・ブローカが処理順序関係を元にメッセージ配信を行なうためには、モジュール間の処理依存関係を調査し、その結果をメッセージ・ブローカに登録しておかなければならない。
【0105】
本実施形態に係る分散システムでは、モジュール間通信はメッセージ・パッシングによって実行される。言い換えれば、モジュール間の関係は、メッセージ・パッシングによって決定する。
【0106】
例えば、モジュールBがモジュールCにメッセージを送信する場合、モジュールBの情報に沿ってモジュールCが処理を行なうのであるから、「モジュールCはモジュールBに依存している」と言うことができる。図10に示す例では、モジュールCはモジュールBとモジュールDに依存し、モジュールDはモジュールBに依存していることが判る。
【0107】
図8に示した例で考えると、モジュールAは、モジュールB、C、D宛てに同期マルチキャスト通信を行なうときには、モジュールB、D、Cの順にメッセージ配信を行なうように送信先モジュールの並べ替えを行なうことで、処理順序依存性の問題を解決することができる。
【0108】
以下では、プロセス内のモジュール間におけるメッセージ送受信関係を基にモジュール間の処理順序依存関係を自動的に導き出すためのアルゴリズム例について説明する。
【0109】
ここでは、図11に示すような複数のモジュールからなるプロセス内において、矢印に示すように送信元モジュールαから複数のモジュールA〜J宛ての同期マルチキャスト通信を行なう場合を例にとる。また、図11に示したプロセス内では、同期マルチキャスト通信の送信先モジュールA〜Jの間では、図12中で矢印に示すようなメッセージ送受信関係が存在するものとする。そして、同期マルチキャスト通信のメッセージを受け取るモジュール間では処理順序依存性があり、これを解決しなければいけないとする。
【0110】
図13には、プロセス内のモジュール間におけるメッセージ送受信関係を基にモジュール間の処理順序依存関係を自動的に導き出すための処理手順をフローチャートの形式で示している。
【0111】
まず、プロセス内の同期マルチキャスト通信において、メッセージを受け取るモジュール(送信先モジュール)を抽出する(ステップS31)。図11に例示するような、モジュールαを送信元とする同期マルチキャスト通信の場合には、10個のモジュールA〜Jが送信先モジュールとして抽出される。
【0112】
次いで、同期マルチキャスト通信の送信先として抽出されたモジュール同士の間で通信されるメッセージ・パッシングすなわちメッセージ送受信関係を抽出する(ステップS32)。図12に示す例では、10個の送信先モジュールA〜Jでは、A→B、A→C、C→B、C→F、…の11個のメッセージ・パッシングm1〜m11が抽出される。
【0113】
次いで、同期マルチキャスト通信の送信先モジュールの中で、他のいずれの送信先モジュールからもメッセージを受け取らないモジュールを抽出する(ステップS33)。このようなモジュールは、ステップS32で抽出されたメッセージ送受信関係においてメッセージ・パッシングの送信先にしかならないことから、ここでは「ルート・モジュール」と呼ぶことにする。図12に示す例では、モジュールA、E、Jの3個のモジュールがルート・モジュールとして抽出される。
【0114】
そして、抽出されたルート・モジュール毎に、メッセージ・パッシングで繋がっているモジュールを順に探索しながら昇り順の処理番号をモジュールに登録する処理を繰り返していく。その際、ルート・モジュールの処理番号を1とし、モジュールを辿る毎に処理番号を1ずつ増分していく。また、これより以前の他のルート・モジュールを起点としたメッセージ・パッシング探索により処理番号が既に登録されているモジュールについては、大きい方の処理番号に置き換えられる。
【0115】
図13に示したフローチャートに沿って説明する。ルート・モジュールの数だけ繰り返すループR1内では、処理番号を1に初期化した後(ステップS34)、現在の処理対象であるモジュールに関し、既に処理番号が登録されているときには(ステップS35のYes)、新しい処理番号の方が大きければ(ステップS36のYes)その処理番号を登録するが(ステップS38)、そうでなければ(ステップS36のNo)既に登録されている値へ処理番号を更新する(ステップS37)。また、まだ処理番号が登録されていないモジュールであれば(ステップS35のNo)、新しい処理番号を登録する(ステップS38)。このようにして当該モジュールに関して処理番号の登録作業を終えると、処理番号を1だけ増分するとともに(ステップS39)、メッセージ・パッシングで次に繋がっている送信先モジュールを抽出する(ステップS40)。そして、送信先モジュールの数だか繰り返すループR2により、このような処理番号の登録処理を繰り返し実行する。
【0116】
ここで、図12に示した具体例に沿って説明しておく。例えば、ルート・モジュールAを開始モジュールとしたとき、ループR1内では、以下のような処理が行なわれる。
【0117】
(1)ルート・モジュールAに処理番号1を登録するとともに、処理番号を1だけ増分する。
(2)モジュールAからメッセージ・パッシングで繋がっているモジュールB、Cに処理番号2を登録するとともに、処理番号を1だけ増分する。
(3)モジュールCからメッセージ・パッシングで繋がっているモジュールBには、既に処理番号2が登録されているが、新しい処理番号3の方が大きいので、処理番号3に更新する。また、モジュールCからメッセージ・パッシングで繋がっているモジュールFに対しても、処理番号3を登録する。そして、処理番号を1だけ増分する。
(4)モジュールFからメッセージ・パッシングで繋がっているモジュールGに対して、処理番号4を登録する。
【0118】
上記(1)〜(4)の結果として、ルート・モジュールAに関する処理が終了した時点で、下表に示すような処理番号の割り振りとなる。
【0119】
【表1】
【0120】
同様の手順で、ルート・モジュールEに関する処理が終了した時点で、下表に示すような処理番号の割り振りとなる。
【0121】
【表2】
【0122】
さらに同様の手順で、ルート・モジュールJに関する処理が終了した時点で、最終的には下表に示すような処理番号の割り振りとなる。
【0123】
【表3】
【0124】
このようにして各送信先モジュールに割り振られた処理番号は、同期型マルチキャスト通信における処理順序依存性を表す値となる。そこで、処理番号にしたがって送信先モジュールの並べ替えを行なう(ステップS41)。
【0125】
図12に示す例では、送信先モジュールA〜Jは、A、E、J、C、D、H、B、I、F、Gの順に並べ替えられることになる。そして、モジュールαから同期マルチキャスト通信を行なう際には、並べ替えられた順にメッセージを送信すれば、処理順序依存性の問題は発生しなくなる。
【0126】
C.リアルタイム同期処理と非同期・並列処理を両立したロボットの制御システム
本実施形態に係るロボットの行動制御システムは、オブジェクト指向(前述)により実装され、多数のスキーマをツリー状に階層化することで構築される(スキーマは、オブジェクト指向技術を用いて実装されるモジュールのことである)。このような分散システムは、運動制御において要求される同期リアルタイム性と、非同期が許容される運動制御以外の制御において要求される処理の並列性とを両立させる必要がある。
【0127】
上記のB項で説明した分散システムは、モジュール間通信はメッセージ・パッシングにより行なわれる。コンピュータにおけるプログラムの実行単位であるプロセス毎にメッセージ・ブローカが配設されており、このメッセージ・ブローカはプロセス内でメッセージ・パッシングが発生した際にはシリアライズ及びでシリアライズの省略とメッセージ・キューへの保管を省略することにより、メッセージ・パッシングの高速化を実現している。
【0128】
したがって、リアルタイムの同期処理が要求される運動制御系の各処理を同じプロセス内のモジュールとして実装する一方、運動制御以外の制御系の各処理を個別のプロセス内のモジュールとして実装することにより処理の並列性を確保することができ、相反する要求を両立させた分散システムを構築することが可能となる。
【0129】
以下では、B項で説明した分散システムを利用したロボットの制御システムの具体的な運用方法について説明する。
【0130】
図14には、ロボットの行動制御システムのうち、視線制御に関連するサブシステムを抽出して示している。図示の視線制御サブシステムは、同期リアルタイム処理が要求されるモジュールと非同期並列処理が要求されるモジュールが混在した分散システムであり、カメラ15に代表される視覚センサの情報から注意すべき内容を判断し、視線制御のための運動指令を与える機能を持つものである。
【0131】
また、図示の視線制御サブシステムは、2台のコンピュータ1〜2を用いて構築され、合計3つのプロセスA〜Cが実行され、その中で合計6つのモジュールが動作している。なお、同図において、「コンピュータ」を「プロセッサ」と読み替えることもできる。
【0132】
コンピュータ1上では、プロセスA及びBが実行される。プロセスA内には、Vision Data Acquisition(視覚データ入力処理)、Visual Perception(視覚認識処理)という2つのモジュールが配置され、プロセスB内には、Control Trigger(制御トリガ)、Visual Controller(視線制御)、Cartesian Controller(位置姿勢制御)という3つのモジュールが配置される。また、コンピュータ2上では、Visual Attention(視覚注意)というモジュールが配置されたプロセスCが実行される。各モジュールの役割を下表に示す。なお、メッセージ処理タイミングに応じて、受信時のメッセージの取り扱い(メッセージ・キューに保管すべきか否か)が決定される。
【0133】
【表4】
【0134】
1つのプロセスはコンピュータがプログラムを実行する単位となる。リアルタイムの同期処理が要求されるモジュール群をプロセス内に配置すれば、同期処理を実行することができる。図14並びに表4に示す例では、Visual Controller及びCartesian Controllerといった運動制御系のモジュールは、プロセスB内に配置され、同期リアルタイムに処理される。
【0135】
一方、非同期であることが許容されるが並列処理が要求される各モジュールを、個別のプロセスあるいは別のコンピュータに配置すれば、並列して実行することができる。例えば、Visual Perceptionなどの認識用モジュールとVisual Attensionなどの思考用モジュールは異なるプロセスに配置され、非同期で処理される。また、これらの2モジュールは、異なるコンピュータ1及び2に分散して配置されるので、並列実行性も担保される。
【0136】
また、メッセージ・ブローカをプロセス毎に配置しており、モジュール間でのデータの受け渡しは、メッセージ・ブローカが介在するメッセージ・パッシングにより行なわれる。図14に示す視線制御サブシステムでは、プロセスA内で、Visual Data AcquisitionからVisual Perceptionへ、メッセージMsg_aが送信される。プロセスAとC間では、Visual PerceptionからVisual Attentionへ、メッセージMsg_bが送信される。プロセスCとB間では、Visual AttentionからVisual Controllerへ、メッセージMsg_cが送信される。プロセスB内では、Control TriggerからVisual Controller及びCartesian ControllerへメッセージMsg_eがそれぞれ送信されるとともに、Visual ControllerからCartesian ControllerへメッセージMsg_dが送信される。
【0137】
図15には、分散システムの起動処理手順をフローチャートの形式で示している。この起動処理はプロセス単位で行なわれ、図14に示したシステム構成であれば合計3回行なわれることになる。
【0138】
コンピュータ名とプロセス名によって実行するモジュールが決まることから、まず、これらを確認する(ステップS51)。
【0139】
次いで、起動処理を行なうために必要となるシステム構成ファイルを読み込む(ステップS52)。読み込んだシステム構成ファイルの内容に従って、必要なモジュールがインスタンス化され、実行される。
【0140】
図16には、図14及び表4に示した分散システム構成例に相当するシステム構成ファイルの構成をテキスト表記したものを示している。図示のように、システム構成ファイルでは、プログラムを実行する単位であるプロセス毎の構成情報が、{コンピュータ名,プロセス名,モジュール一覧,モジュール名及びそのメッセージ処理タイミング}という形式で記述されるとともに、(メッセージ処理タイミングは、当該処理が割り込み(Interrupt)、同期(Synchronpus)、又は非同期(Asynchronous)のいずれであるかを示すものとする)、処理順序依存性のあるメッセージ(Ordered Message)が指定されている。例えば、先行ステップS51で、コンピュータ名:Computer1、プロセス名:ProcessAが確認されている場合には、モジュールVisual Data Acquisition及びVisual Perceptionが対象であることが判る。また、システム構成ファイルには、モジュールが受信したメッセージを処理するタイミングも記述されているので、その内容に応じたモジュールのインスタンス化が行なわれる。
【0141】
次いで、インスタンス化するモジュール間のメッセージ送受信に関する情報を取得する(ステップS53)。
【0142】
本実施形態では、分散システムの構成要素となる各モジュール内に、メッセージ送受信情報を取得するための手段を備えている。図17には、モジュールの擬似コードを例示している。図中の送信メッセージの一覧を取得する関数“MessageListGetPostMessageList()”、及び、受信メッセージの一覧を取得する関数“MessageListGetReceiveMessageList()”がこれに相当し、インスタンスかされるモジュールからはメッセージ送受信情報を取得することができる。そして、収集されたメッセージ送受信情報は、起動処理の中の「プロセス間メッセージ情報の交換」で利用される他、メッセージ・ブローカがメッセージを適切に扱うために利用される。
【0143】
図14に示した分散システムの場合、コンピュータ1上で実行される各プロセスA、B、並びに、コンピュータ2上で実行されるプロセスCにおいて、下表5〜7に示すような、各メッセージの送信モジュール及び受信モジュールに関するメッセージ送受信情報を収集することができる。但し、各表から明らかなように、起動処理の段階では、プロセス間のメッセージ情報を取得することはできない。
【0144】
【表5】
【0145】
【表6】
【0146】
【表7】
【0147】
次いで、ステップS52で読み込んだシステム構成ファイルと、ステップS53で収集したメッセージ送受信情報を用いて、B−4項で説明した処理に従って、同期型マルチキャスト通信における処理順序依存性の解決メッセージ処理依存性の解決を行なう(ステップS54)。
【0148】
図14に示した分散システムの場合、図16に示すシステム構成ファイル内で、メッセージMsg_eが処理順序依存性のあるメッセージとして指定されているので、当該メッセージが処理対象となることが判る。また、表6に示したメッセージ送受信情報から、コンピュータ1上で実行されるプロセスBが処理対象のプロセスであることが判る。そこで、コンピュータ1上で実行されるプロセスBに対して、B−4項で説明した処理に従って、同期型マルチキャスト通信における処理順序依存性の解決メッセージ処理依存性の解決を行なう。
【0149】
次いで、ステップS53で収集したメッセージ送受信情報ではプロセス間のメッセージ送受信情報が欠落している場合には(ステップS55のYes)、当該欠落部分の情報を補うべく、他プロセスとの接続を試みる(ステップS56)。
【0150】
上記の表5〜表7に示した例では、送信モジュール又は受信モジュールが同一プロセス内に存在しない欄がブランクになっている。例えば、コンピュータ1上で実行するプロセスAの起動処理では、コンピュータ1上で実行する他のプロセスBとの接続を試みる。
【0151】
そして、他プロセスとの接続に成功すると(ステップS56のYes)、メッセージ送受信情報の欠落していたプロセス間でメッセージ情報の交換を行なう(ステップS57)。
【0152】
図14に示した分散システムにおいて、すべてのプロセスが接続されると、以下の表8〜表10のようなメッセージ送受信情報を取得することができる。
【0153】
【表8】
【0154】
【表9】
【0155】
【表10】
【0156】
メッセージ・ブローカは、上記のメッセージ送受信情報を利用して、B項で説明したメッセージ・パッシングの高速化を実現することができる。
【0157】
続いて、図14に示した分散システム中で、幾つかのメッセージ・パッシングを例にとって、そのシーケンスについて考察してみる。
【0158】
図18には、図14中のメッセージMsg_aのメッセージ・パッシングを行なうシーケンスを示している。
【0159】
同メッセージ・パッシングは、コンピュータ1上で実行されるプロセスA内における、モジュールVision Data AcquisitionからモジュールVisual Perceptionへのメッセージ・パッシングであり、同プロセス内のメッセージ・ブローカの介在により行なわれる。
【0160】
送受信モジュールがともに同一プロセス内に存在することから、メッセージ・ブローカは、シリアライズ/でシリアライズ処理を行なわない。
【0161】
また、受信モジュールであるVisual Perceptionは、表4に示したように非同期にメッセージを処理するので、受信メッセージMsg_aは一端メッセージ・キューに保存され、その後、モジュールVisual Perceptionはメッセージ・キューから同メッセージを取り出してその処理を行なう。
【0162】
図19には、図14中のメッセージMsg_bのメッセージ・パッシングを行なうシーケンスを示している。
【0163】
同メッセージ・パッシングは、コンピュータ1上で実行されるプロセスA内のモジュールVisual Perceptionから、別のコンピュータ2上で実行される他のロセスC内のモジュールVisual Attentionへのメッセージ・パッシングであり、各プロセス内のメッセージ・ブローカの介在により行なわれる。
【0164】
プロセス間のメッセージ・パッシングであることから、送信側のメッセージ・ブローカは、送信モジュールVisual PerceptionからのメッセージMsg_bをシリアライズして他のプロセスCへ転送する。そして、受信側のメッセージ・ブローカは、転送されてきたメッセージを、デシリアライズしてから、受信モジュールVison Attentionへ送る。
【0165】
図20には、図14中のメッセージMsg_eのメッセージ・パッシングを行なうシーケンスを示している。
【0166】
同メッセージ・パッシングは、コンピュータ1上で実行されるプロセスB内における、モジュールControl Triggerから複数のモジュールVision Controller及びCartesian Controllerへの同期マルチキャスト通信であり、同プロセス内のメッセージ・ブローカの介在により行なわれる。
【0167】
また、図16に示したシステム構成ファイルで、メッセージMsg_eは処理順序依存性のあるメッセージであることが示されている。したがって、メッセージ・ブローカは、システム起動時に並べ替えられた順序で、各モジュールへメッセージMsg_eを配信する。
【0168】
表4に示したように受信モジュールであるVision Controller及びCartesian Controllerはともにメッセージを同期処理する設定となっていることから、メッセージ・キューにメッセージを保存せず即時に処理される。
【0169】
図20からわかるように、メッセージMsg_eのメッセージ・パッシングは、すべての受信モジュールで同期処理され、且つ、関数呼び出しのみで実装を実現できる内容であることから、リアルタイム・システムの要求を満たすモジュール間通信が可能である。
【産業上の利用可能性】
【0170】
以上、特定の実施形態を参照しながら、本発明について詳解してきた。しかしながら、本発明の要旨を逸脱しない範囲で当業者が該実施形態の修正や代用を成し得ることは自明である。
【0171】
本明細書では、本発明に係る分散システムを人や環境に対してインタラクションを行なうロボットの制御に適用した場合の実施形態を中心に説明してきたが、本発明の要旨は必ずしもこのような用途に限定されるものではない。同期リアルタイム性の要求と、非同期を許容しつつ処理の並列性の要求とを両立しなければならないさまざまなタイプの分散システムに対して、本発明を同様に適用することができる。
【0172】
また、本発明の要旨は、必ずしも「ロボット」と称される製品には限定されない。すなわち、電気的若しくは磁気的な作用を用いて人間の動作に似せた運動を行なう機械装置であるならば、例えば玩具等のような他の産業分野に属する製品であっても、同様に本発明を適用することができる。
【0173】
要するに、例示という形態で本発明を開示してきたのであり、本明細書の記載内容を限定的に解釈するべきではない。本発明の要旨を判断するためには、特許請求の範囲を参酌すべきである。
【図面の簡単な説明】
【0174】
【図1】図1は、本発明の実施に供されるロボット装置1の機能構成を模式的に示した図である。
【図2】図2は、図1中の制御ユニット20の構成をさらに詳細に示した図である。
【図3】図3は、分散システムにおいてメッセージ・パッシングによるモジュール間通信を行なう仕組みを説明するための図である。
【図4A】図4Aは、分散システムの構成例を示した図である。
【図4B】図4Bは、図4Aに示した分散システムのプロセス毎にメッセージ・ブローカを配置した様子を示した図である。
【図5】図5は、メッセージが送られてきたときにメッセージ・ブローカが実行する処理手順を示したフローチャートである。
【図6】図6は、メッセージ・キューを利用した場合のメッセージ・パッシングの処理手順を示したフローチャートである。
【図7】図7は、メッセージ・キューを利用しない場合のメッセージ・パッシングの処理手順を示したフローチャートである。
【図8】図8は、分散システムのあるプロセス内で複数のモジュールに対する同期型マルチキャスト通信が実行される様子を示した図である。
【図9】図9は、メッセージ・ブローカの介在によりプロセス内で行なわれる同期型マルチキャスト通信の様子を示した図である。
【図10】図10は、モジュール間の関係がメッセージ・パッシングにより決定されることを説明するための図である。
【図11】図11は、プロセス内のモジュール間におけるメッセージ送受信関係を基にモジュール間の処理順序依存関係を自動的に導き出すためのアルゴリズム例を説明するための図であり、具体的には、プロセス内のメッセージ送受信関係を例示した図である。
【図12】図12は、プロセス内のモジュール間におけるメッセージ送受信関係を基にモジュール間の処理順序依存関係を自動的に導き出すためのアルゴリズム例を説明するための図であり、具体的には、プロセス内のモジュール間におけるメッセージ送受信関係を例示した図である。
【図13】図13は、プロセス内のモジュール間におけるメッセージ送受信関係を基にモジュール間の処理順序依存関係を自動的に導き出すための処理手順を示したフローチャートである。
【図14】図14は、ロボットの行動制御システムのうち、視線制御に関連するサブシステムを示した図である。
【図15】図15は、分散システムの起動処理手順を示したフローチャートである。
【図16】図16は、図14及び表4に示した分散システム構成例に相当するシステム構成ファイルの構成をテキスト表記した図である。
【図17】図17は、本発明の実施形態に係る分散システムの構成要素となるモジュールの擬似コードを示した図である。
【図18】図18は、コンピュータ1上で実行されるプロセスA内において、同プロセス内のメッセージ・ブローカの介在により、モジュールVision Data AcquisitionからモジュールVisual Perceptionへのメッセージ・パッシングを行なうシーケンスを示した図である。
【図19】図19は、コンピュータ1上で実行されるプロセスA内のモジュールVisual Perceptionから、別のコンピュータ2上で実行されるプロセスC内のモジュールVisual Attentionへ、各プロセス内のメッセージ・ブローカの介在によりプロセス間メッセージ・パッシングを行なうシーケンスを示した図である。
【図20】図20は、コンピュータ1上で実行されるプロセスB内において、同プロセス内のメッセージ・ブローカの介在により、モジュールControl Triggerから複数のモジュールVision Controller及びCartesian Controllerへのメッセージ・パッシング(同期マルチキャスト通信)を行なうシーケンスを示した図である。
【符号の説明】
【0175】
1…ロボット装置
15…CCDカメラ
16…マイクロフォン
17…スピーカ
18…タッチ・センサ
19…LEDインジケータ
20…制御部
21…CPU
22…RAM
23…ROM
24…不揮発メモリ
25…インターフェース
26…無線通信インターフェース
27…ネットワーク・インターフェース・カード
28…バス
29…キーボード
40…入出力部
50…駆動部
51…モータ
52…エンコーダ
53…ドライバ
【技術分野】
【0001】
本発明は、モジュール化、並列化、再利用性の観点から分散処理を行なうように構築された情報処理システム及び情報処理方法、ロボットの制御システム及び制御方法、並びコンピュータ・プログラムに係り、例えば人や環境に対してインタラクションを行なうロボットの制御に適用される情報処理システム及び情報処理方法、ロボットの制御システム及び制御方法、並びコンピュータ・プログラムに関する。
【0002】
さらに詳しくは、本発明は、関節などの物理動作を制御する運動制御と、運動制御以外の制御をともに行なうロボットの制御に適用することができる情報処理システム及び情報処理方法、ロボットの制御システム及び制御方法、並びコンピュータ・プログラムに係り、特に、運動制御において要求される同期リアルタイム性と非同期が許容される運動制御以外の制御において要求される処理の並列性を両立させた、情報処理システム及び情報処理方法、ロボットの制御システム及び制御方法、並びコンピュータ・プログラムに関する。
【背景技術】
【0003】
ロボットは人的作業の代替手段など、さまざまな目的・用途で研究開発が行なわれてきた。最近では、人や環境に対して多用な物理的インタラクションを実現し、メンタル・アシストを行なうことへの要求も高まってきている。例えば、視覚や聴覚などの外部環境の認識結果や本能や感情などの内部状態などの状況を統合的に判断して行動を選択するロボットについて提案がなされている(例えば、特許文献1を参照のこと)。
【0004】
本発明者らは、ロボットの制御体系として分散システムが適していると思料するが、これには幾つかの理由がある。
【0005】
理由の1つとして、ロボットではさまざまなセンサ・デバイスを利用することが挙げられる。各センサ・デバイスが情報取得を行なう周期は区々であり、各々のタイミングで制御ソフトウェアへの割り込みを発生させる。割り込みが発生する度に制御が中断されると、制御性能に悪い影響を及ぼす事が懸念される。このような割り込みを効率よく処理するには、センサ・デバイス毎に処理ルーチンを組み、各処理ルーチンは非同期に実行することが望ましい。すなわち、非同期で動作する分散システムが適していると思料される。
【0006】
また、他の大きな理由として、処理をモジュール化し、これに伴って処理の並列化や再利用性の向上を実現することが挙げられる。ロボットの制御を、運動制御、視覚認識、音声認識、行動計画など、独立性の高い複数の処理に分割することが可能であり、各処理のモジュール化を行ない易い。そして、処理内容によっては高負荷な演算コストを必要する場合もあることから、各モジュールを並列実行する要求が高い。例えば、それぞれ異なるタスクを実行する複数の行動モジュールで構成され、各行動モジュールは並列実行が可能であるとともに、優先度に応じて実行権をスイッチし且つタスク再開が可能となるロボットの行動制御システムについて提案がなされている(例えば、特許文献1を参照のこと)。
【0007】
さらに、ソフトウェア全般に言えることではあるが、一度実装した処理のモジュールを他のロボットでも利用したいという再利用の要求もある。
【0008】
このように、モジュール化、並列化、再利用性の観点から、ロボットの制御には分散システムが積極的に利用される。
【0009】
また、ロボットの制御体系を、関節などの物理動作を制御する運動制御と、運動制御以外の制御に分類することもできる。
【0010】
前者の運動制御では、時々刻々と変化する外部環境に対し適応的に動作する必要がある。このため、視覚・触覚・姿勢・関節角度など各種センサ情報をできる限り早く制御へフィードバックし、それらの情報を考慮した新たな制御値を与えなければならない。また、近年、位置制御だけでなく力制御、あるいは、位置制御と力制御のハイブリッド制御やインピーダンス制御など運動のための制御手法が多様化・高度化してきているが、これらの複雑な制御を安定に運用するためにはミリ秒オーダーの制御周期が要求される。万一、何らかの理由で制御周期が守れないと、ロボットは意図した運動ができなくなり、転倒や環境に危害を加えるといった致命的なダメージが生じる。つまり、ロボットの運動制御は、同期リアルタイム性が要求される制御システムであることが望ましい。
【0011】
さらに付言するならば、運動制御の内容も複雑化の一途を辿っていることからも、分散システムであることが望ましい。さまざまな状況で動作を完遂させるためには、物体把持制御、歩行制御、転倒制御、外力適応制御といった複数の制御方法を用意し、状況を判断しながら自在に制御内容を切り替えたり組み合わせたりする必要がある。このような複雑な制御内容を記述するためには、制御内容毎に独立したモジュールとして実装する方法が有効である。つまり、運動制御の内部も分散システムとして構築することが望ましい。勿論、運動制御はミリ秒オーダー制御周期で動作する必要があり、リアルタイム・システムの要求を満たした分散システムでなければならない。
【0012】
他方、運動制御以外の制御全般においては、視覚情報を用いた物体認識や行動認識、触覚情報を用いた環境物体の動作推定、音声認識、又はこれらの認識結果を用いた機械知能のための演算など、さまざまな処理が必要である。この種の処理には、一度に数100ミリ秒から数秒程度の計算時間を要する場合があるが、通常は運動制御に要求されるようなリアルタイム性は不必要であることから、別のコンピュータ(若しくはプロセッサ)を利用して並列処理することが可能である。また、視覚・触覚・音声などの各認識処理は相互依存性が低く、それぞれが非同期に実行することが可能であることが多い。つまり、運動制御以外の制御は、非同期且つ並列の分散システムに適した処理であると言える。
【0013】
要言すれば、ロボットの制御システムは分散システムが適しているが、運動制御のように同期リアルタイム性を満たした分散システムと、運動制御以外の制御において、非同期が許容されつつ並列実行することが要求される分散システムという2通りのシステム要求がある。
【0014】
ここで、当業界で一般に知られている分散システム、並びにリアルタイム・システムについて幾つかを紹介しておく。
【0015】
複数のプロセッサからなる分散システムのアーキテクチャを密結合型と疎結合型に大別することができる。前者の密結合型アーキテクチャでは共有メモリを用いたプロセス間通信が可能であるのに対し、後者の疎結合型アーキテクチャではメッセージ交換型すなわちメッセージ・パッシングが主に利用される。共有メモリを用いた密結合型アーキテクチャはプログラミングが容易であるのに対し、疎結合型アーキテクチャは、ハードウェアの実現の容易さとスケーラビリティの観点から有利である。MPI(Message−Passing Interface)は、メッセージ・パッシングのための代表的なライブラリであり、さまざまな要求に応えるため、多くの関数(インターフェース)が用意されている。MPIは、分散メモリ型の並列コンピュータ(若しくはプロセッサ)を前提とし、並列に接続されたコンピュータ間をメッセージ・パッシングによって通信するための規格である(言い換えれば、直接的な関数呼び出しを行なうものではない)。コンピュータ間でメッセージ・パッシングするためには各コンピュータにメッセージ・キューを装備することが不可欠である。このメッセージ・キューを使うことで、コンピュータ間の通信が非同期になることは免れない。言い換えれば、MPIでは、コンピュータ間の通信が非同期になるため、ミリ秒オーダーのリアルタイム・システムを要求するアプリケーションには適用が困難である。
【0016】
また、分散オブジェクト技術を実現するアーキテクチャとして代表的なものに、CORBA(Common Object Request Broker Architecture)が挙げられ、ネットワーク接続された複数のコンピュータを一度に動かすために利用することができる。CORBAによるオブジェクト機能呼び出しは、通常は同期的に処理されるが、アーキテクチャ構造上、オブジェクト機能を呼び出す毎にシリアライゼーションとネットワーク通信が発生し、通常一度の呼び出しで数ミリ秒以上の時間コストが必要となる(ネットワーク接続されたコンピュータ間で言語を超えた通信を行なう際、送信元では、送信先に適合するよう、データを冗長化したシリアライゼーションを行なう)。このため、CORBAは、ミリ秒オーダーのリアルタイム・システムを要求するアプリケーションには適用が困難である。また、非同期処理を利用した場合には、指定時間内にシステムに課せられた処理を終えることが保障されないため、リアルタイム・システムの要求を満たさないことは明白である。(初期表現から他の何らかの表現への変換をシリアライゼーションと呼び、その後の初期表現への逆変換のことをデシリアライゼーションと呼ぶ。シリアライズは、具体的には、オブジェクトの状態を表す変数(フィールド)、さらにはオブジェクトの種類(クラス)を表す何らかの識別子を、ファイル化できるようなバイト列やXMLフォーマットの形に書き出す直列化に相当し、デシリアライズは、その逆の直列化復元に相当する。)
【0017】
また、リアルタイム・システムの機能要求を満たす機構として、VxWorksやONXに代表されるようなRTOS(Real Time Operating System)が挙げられる。RTOSを用いると、ミリ秒オーダーのリアルタイム・システムを要求するアプリケーションの実現が可能である。しかし、RTOSでは、リアルタイム性を要求する処理と、数100ミリ秒から数秒オーダーの処理時間を要求する非同期処理とを並列実行するための仕組みを持たない。並列処理を実現するには、複数のコンピュータによる並列実行が必要となる。これに対し、RTOSでは、リアルタイム・システムに特化した機構になっており、通常は1つのコンピュータ内での処理だけ想定して設計されている。RTOSでコンピュータ間の通信による並列実行を実現するには、コンピュータ間の通信規約を定める、あるいは利用する必要があると思料される。このようなことから、リアルタイム処理と別のコンピュータを利用した非同期処理とを同時に実現するには、実装に多くの負担が生じる。
【0018】
既に述べたように、ロボットの制御全体を考慮すると、分散システムで構築することが好ましい。また、分散システムの技術自体は、情報処理の分野において古くから研究開発がなされている。
【0019】
例えば、ロボット・アームの制御に適用した分散処理システムについて提案がなされている(例えば、特許文献2を参照のこと)。
【0020】
ところが、視覚認識や音声認識などのようにリアルタイム性を問わず複数のコンピュータ(プロセッサ)を利用して非同期であっても並列処理を行ないたいという要求と、運動制御のように同期しながらリアルタイムに処理を行ないたい要求の双方を両立させた単一のシステムとして構築した分散システムは皆無に等しい。
【0021】
【特許文献1】特許第3558222号公報
【特許文献2】特開2002−342300号公報
【発明の開示】
【発明が解決しようとする課題】
【0022】
本発明の目的は、例えば人や環境に対してインタラクションを行なうロボットの制御に好適に適用することができる、優れた情報処理システム及び情報処理方法、ロボットの制御システム及び制御方法、並びコンピュータ・プログラムを提供することにある。
【0023】
本発明のさらなる目的は、関節などの物理動作を制御する運動制御と、運動制御以外の制御をともに行なうロボットの制御に好適に適用することができる、優れた情報処理システム及び情報処理方法、ロボットの制御システム及び制御方法、並びコンピュータ・プログラムを提供することにある。
【0024】
本発明のさらなる目的は、運動制御において要求される同期リアルタイム性と非同期が許容される運動制御以外の制御において要求される処理の並列性を両立させることができる、優れた情報処理システム及び情報処理方法、ロボットの制御システム及び制御方法、並びコンピュータ・プログラムを提供することにある。
【課題を解決するための手段】
【0025】
本発明は、上記課題を参酌してなされたものであり、その第1の側面は、
リアルタイムの同期処理が要求されるモジュール群を、プログラムを実行する単位となる1つのプロセス内で実行する同期処理手段と、
非同期であることが許容されるが並列処理が要求される各モジュールをそれぞれ個別のプロセスに配置して並列して実行する並列処理手段と、
前記モジュール間でのデータの受け渡しをメッセージ・パッシングにより行なうモジュール間通信手段と、
を具備することを特徴とする情報処理システムである。
【0026】
但し、ここで言う「システム」とは、複数の装置(又は特定の機能を実現する機能モジュール)が論理的に集合した物のことを言い、各装置や機能モジュールが単一の筐体内にあるか否かは特に問わない。
【0027】
例えばロボットの制御全体を考慮すると、モジュール化、並列化、再利用性の観点から分散システムで構築することが好ましい。ロボットの制御は、各モジュールが同期しながらリアルタイム処理を行なうことが要求される運動制御と、視覚認識や音声認識のように非同期であることが許容されつつも各モジュールを並列処理することが要求される運動制御以外の制御に分けることができるが、同期リアルタイム処理と非同期・並列処理の双方を両立させた単一のシステムとして構築した分散システムは皆無に等しい。
【0028】
コンピュータにおけるプログラムの実行単位を「プロセス」と呼ぶと、並列処理されるプロセス間でのメッセージ・パッシングは、メッセージ・データのシリアライズ及びデシリアライズの処理が介在することから、非同期となってしまう(前述)。各プロセスが同一のコンピュータ、あるいは異なるコンピュータで実行される場合も同様である。他方、同一プロセス内でのメッセージ・パッシングは、シリアライズ及びデシリアライズが不要であることから、リアルタイム性を失うことはない。
【0029】
ロボットの制御システムは、メッセージ・パッシングによるモジュール間通信を用いた分散システムとして構築することが好ましい。本発明では、リアルタイム性が要求される複数のモジュールを同一のプロセス内に配置するとともに、モジュール間でのメッセージ交換に介在するメッセージ・ブローカをプロセス毎に配設している。
【0030】
このメッセージ・ブローカは、モジュール間でメッセージ・パッシングを行なう際に、メッセージ・データのシリアライズ及びデシリアライズが必要か否か、並びにメッセージをメッセージ・キューに一時保管する必要があるか否かを判断する。これによって、同一プロセス内でのメッセージ・パッシングは、シリアライズ及びデシリアライズ処理は介在しなくなることから高速化する。プロセスをまたいだメッセージ・パッシングは分散メモリ型の並列処理として扱われるが、プロセス内のメッセージ・パッシングは共有メモリ型並列処理として扱われることから、メッセージ・データのシリアライズ及びデシリアライズを省略することが可能である。
【0031】
また、個々のモジュールは、他のモジュールから受信したメッセージを一時的に保管するメッセージ・キューを装備しているが、メッセージの送信元モジュールがどのプロセスに存在するかに応じて、受信したメッセージをメッセージ・キューに保管すべきかどうかを適応的に決定するようにしている。具体的には、モジュールは、自身がメッセージの送信先となる場合において、送信元となるモジュールが同じプロセス内にないときには、受信したメッセージをメッセージ・キューに一時保管することで、送信元モジュールと送信先モジュールの実行を切り離すことができ、非同期分散処理が可能になる。これに対し、メッセージ送信先のモジュールが同じプロセス内にあるときには、モジュールは受信したメッセージ・キューを利用しないようにする。この結果、関数呼び出しと同等の処理負荷でのメッセージ・パッシングが可能となり、同一プロセス内のモジュール間においてメッセージの同期処理が可能になる。
【0032】
各モジュールは、送信メッセージの一覧を取得する関数及び受信メッセージの一覧を取得する関数を含むものとし、モジュール毎の前記の送信メッセージの一覧を取得する関数及び受信メッセージの一覧を基に各メッセージの送信モジュール及び受信モジュールに関するメッセージ送受信情報を収集することができる。また、システム内では、各プロセスを実行するコンピュータ名と、プロセス内に配置されるモジュール並びに各モジュールのメッセージ処理タイミングを記述するとともに、処理順序依存性のあるメッセージを指定した構成ファイルが管理されている。そして、構成ファイル及びメッセージ送受信情報を用いて、処理順序依存関係を取得することができる。また、メッセージ・ブローカは、各モジュール内の送信メッセージの一覧を取得する関数及び受信メッセージの一覧を取得する関数を用いて、メッセージを適切に扱うことができる。また、受信モジュール側でモジュールを受信する際には、構成ファイルに記述されている受信モジュールのメッセージ処理タイミングに応じて、メッセージを該受信モジュールのメッセージ・キューに保管するか否かを決定することができる。
【0033】
本発明の第1の側面に係る情報処理システムは、2以上のコンピュータ(若しくはプロセッサ)を用いて構築することができる。異なるコンピュータ(若しくはプロセッサ)間では処理の並列性を充分確保することができる(周知)。したがって、並列処理手段により非同期で実行されるモジュールのうちとりわけ並列性が要求されるモジュールの組み合わせに関しては、異なるコンピュータ上で実行されるプロセスに分散して配置することで、確実に並列処理を実現することができる。
【0034】
したがって、本発明によれば、非同期・並列処理と同期リアルタイム処理の要求を満たした分散システムを同一のプラットフォーム上で構築することができる。
【0035】
ロボットの運動制御のように周期的に処理が行なわれる場合、通常、割り込み処理が利用される(例えば、ロボットの各部位に配設されたセンサ・デバイスは、情報取得を行なうと、制御ソフトウェアへの割り込みを発生させる)。運動制御プログラムが、一連の周期的な処理を複数のモジュールに分割して実装され、各モジュールが協調して動作する構造になっている場合、各モジュールに割り込みを発生させれば良いが、このとき、モジュール間で処理の順序依存性の問題が発生する。例えば、運動制御プログラム内で、手の関節角度制御と手を用いた物体把持制御がそれぞれ独立した制御モジュールとして実装されている場合、先に関節角度制御モジュールに割り込みが発生して関節角度指令を発すると、物体把持制御のための関節角度指令がその制御周期では反映されなくなる。
【0036】
これに対し、本発明に係るロボット制御システムは、メッセージ・パッシングによるモジュール間通信を用いた分散システムとして構築されるが(前述)、モジュール間における処理順序依存性を、モジュール間で発生するメッセージの送受信関係に基づいて判断するようにしている。
【0037】
例えば、関節角度制御と物体把持制御が別々のモジュールに実装され、同じプロセス内に配置することで、両モジュール間でメッセージの同期処理が可能となる。また、物体把持制御のための関節角度指令はメッセージ・パッシングによって関節角度制御モジュールへ通知される。つまり、関節角度制御モジュールと物体把持制御モジュールの間での処理の順序性依存は、これらのモジュール間で発生するメッセージの送受信関係から判断することが可能である。具体的には、同期マルチキャスト通信の送信先となるモジュール間におけるメッセージ送受信関係においてメッセージ・パッシングの送信先にしかならないルート・モジュールをまず抽出し、各ルート・モジュールからメッセージ・パッシングで繋がる順に従って処理の順序依存性を把握することができる。
【0038】
したがって、本発明に係るロボット制御システムでは、処理順序の依存性が問題となるモジュール群に対しては、メッセージの送受信関係に基づいて割り込み順序を決定するというアルゴリズムを提供することによって、(人間(例えば、オペレータ)が判断する必要なく)自動的に適切な順序で各モジュールに割り込みを発生させることができる。
【0039】
また、本発明の第2の側面は、複数のモジュールからなりコンピュータ上で実行するようにコンピュータ可読形式で記述されたコンピュータ・プログラムであって、前記コンピュータを、
リアルタイムの同期処理が要求されるモジュール群を、プログラムを実行する単位となる1つのプロセス内で実行する同期処理手段と、
非同期であることが許容されるが並列処理が要求される各モジュールをそれぞれ個別のプロセスに配置して並列して実行する並列処理手段と、
前記モジュール間でのデータの受け渡しをメッセージ・パッシングにより行なうモジュール間通信手段と、
として機能させるためのコンピュータ・プログラムである。
【0040】
本発明の第2の側面に係るコンピュータ・プログラムは、コンピュータ上で所定の処理を実現するようにコンピュータ可読形式で記述されたコンピュータ・プログラムを定義したものである。換言すれば、本発明の第2の側面に係るコンピュータ・プログラムをコンピュータにインストールすることによって、コンピュータ上では協働的作用が発揮され、本発明の第1の側面に係る情報処理システムと同様の作用効果を得ることができる。
【発明の効果】
【0041】
本発明によれば、例えば人や環境に対してインタラクションを行なうロボットの制御に好適に適用することができる、優れた情報処理システム及び情報処理方法、ロボットの制御システム及び制御方法、並びコンピュータ・プログラムを提供することができる。
【0042】
また、本発明によれば、関節などの物理動作を制御する運動制御と、運動制御以外の制御をともに行なうロボットの制御に好適に適用することができる、優れた情報処理システム及び情報処理方法、ロボットの制御システム及び制御方法、並びコンピュータ・プログラムを提供することができる。
【0043】
また、本発明によれば、運動制御において要求される同期リアルタイム性と非同期が許容される運動制御以外の制御において要求される処理の並列性を両立させることができる、優れた情報処理システム及び情報処理方法、ロボットの制御システム及び制御方法、並びコンピュータ・プログラムを提供することができる。
【0044】
本発明によれば、リアルタイム・システムが要求される運動制御のような機能であってもその内部をモジュール化することが可能で、且つ、物体認識や知能機械といった機能をモジュール化して並列分散処理が可能になる。その結果、すべてのモジュールがシームレスに接続でき、アプリケーション全体で一貫性のあるシステム構成が実現できるようになる。人や環境に対してインタラクションを行なうロボットなどでは複雑な機能構成を持つが、本発明を適用することで上記の効果を得ることができる。
【0045】
また、本発明によれば、同期マルチキャスト・メッセージ通信において、自動的に処理順序依存性の問題を解決することができる。運動制御を複数のモジュールに分割して構成すると、モジュール間で処理の順序依存性を持つことがあるが、処理順序依存性を解決することで、制御システムは破綻することなく稼動することができる。
【0046】
本発明のさらに他の目的、特徴や利点は、後述する本発明の実施形態や添付する図面に基づくより詳細な説明によって明らかになるであろう。
【発明を実施するための最良の形態】
【0047】
以下、図面を参照しながら本発明の実施形態について詳解する。
【0048】
A.ロボット装置並びにその制御体系
図1には、本発明に係る分散処理システムを適用して制御を実現することができるロボット装置の構成例を示している。図示のロボット装置1は、全体の動作の統括的制御やその他のデータ処理を行なう制御ユニット20と、入出力部40と、駆動部50と、電源部60で構成される。
【0049】
入出力部40は、入力部としてロボット装置1の目に相当するCCDカメラ15や、耳に相当するマイクロフォン16、頭部や背中などの部位に配設されてユーザの接触を感知するタッチ・センサ18、あるいは五感に相当するその他の各種のセンサを含む。また、出力部として、口に相当するスピーカ17、あるいは点滅の組み合わせや点灯のタイミングにより顔の表情を形成するLEDインジケータ(目ランプ)19などを装備している。これら出力部は、音声やランプの点滅など、脚などによる機械運動パターン以外の形式でもロボット装置1からのユーザ・フィードバックを表現することができる。
【0050】
駆動部50は、制御部20が指令する所定の運動パターンに従ってロボット装置1の機体動作を実現する機能ブロックであり、行動制御による制御対象である。駆動部50は、それぞれの関節におけるロール、ピッチ、ヨーなど軸毎に設けられた複数の駆動ユニットで構成され、ロボット装置1の各関節における自由度を実現する。各駆動ユニットは、所定軸回りの回転動作を行なうモータ51と、モータ51の回転位置を検出するエンコーダ52と、エンコーダ52の出力に基づいてモータ51の回転位置や回転速度を適応的に制御するドライバ53の組み合わせで構成される。駆動ユニットの組み合わせ方によって、ロボット装置1を例えば2足歩行又は4足歩行などの脚式移動ロボットとして構成することができる。
【0051】
電源部60は、ロボット装置1内の各電気回路などに対して給電を行なう。ロボット装置1は、バッテリを用いた自律駆動式であり、電源部60は、充電バッテリ61と、充電バッテリ61の充放電状態を管理する充放電制御部62とで構成される。
【0052】
制御ユニット20は、「頭脳」に相当し、例えばロボット装置1の機体頭部あるいは胴体部に搭載されている。
【0053】
図2には、制御ユニット20の構成をさらに詳細に図解している。同図に示すように、制御ユニット20は、メイン・コントローラとしてのCPU(Central Processing Unit)21が、メモリやその他の各回路コンポーネントや周辺機器とバス接続された構成である。
【0054】
RAM(Random Access Memory)22は、DRAM(Dynamic RAM)などの揮発性メモリで構成された書き込み可能メモリであり、CPU21が実行するプログラム・コードをロードしたり、実行プログラムによる作業データの一時的な保存したりために使用される。また、ROM(Read Only Memory)23は、制御プログラムやデータを恒久的に格納する読み出し専用メモリである。ここで、ロボット装置1の制御プログラムには、カメラ15やマイクロフォン16などのセンサ入力を処理してシンボルとして認識する「センサ入力・認識処理プログラム」や、短期記憶や長期記憶などの記憶動作(後述)を司りながらセンサ入力と所定の行動制御モデルとに基づいてロボット装置1の行動を制御する「行動制御プログラム」、行動制御モデルに従って各関節モータの駆動やスピーカ17の音声出力などを制御する「駆動制御プログラム」などが含まれる。
【0055】
不揮発性メモリ24は、例えばEEPROM(Electrically Erasable and Programmable ROM)のように電気的に消去再書き込みが可能なメモリ素子で構成され、逐次更新すべきデータを不揮発的に保持するために使用される。逐次更新すべきデータには、暗号鍵やその他のセキュリティ情報、出荷後にインストールすべき装置制御プログラムなどが挙げられる。
【0056】
インターフェース25は、制御ユニット20外の機器と相互接続し、データ交換を可能にするための装置である。インターフェース25は、例えば、カメラ15やマイクロフォン16、スピーカ17との間でデータ入出力を行なう。また、インターフェース25は、駆動部50内の各ドライバ53−1…との間でデータやコマンドの入出力を行なう。
【0057】
また、インターフェース25は、RS−232Cなどのシリアル・インターフェース、IEEE1284などのパラレル・インターフェース、USBインターフェース、i−Link(IEEE1394)インターフェース、SCSIインターフェース、PCカードやメモリ・スティックを受容するメモリ・カード・インターフェース(カード・スロット)などのような、コンピュータの周辺機器接続用の汎用インターフェースを備え、ローカル接続された外部機器との間でプログラムやデータの移動を行なうようにしてもよい。また、インターフェース25の他の例として、赤外線通信(IrDA)インターフェースを備え、外部機器と無線通信を行なうようにしてもよい。
【0058】
さらに、制御ユニット20は、無線通信インターフェース26やネットワーク・インターフェース・カード(NIC)27などを含み、Bluetooth(登録商標)通信のような近接無線データ通信や、IEEE802.11のような無線LAN、さらにはインターネットなどの広域ネットワークを経由して、外部のさまざまなホスト・コンピュータとデータ通信を行なうことができる。
ロボット装置1とホスト・コンピュータ間におけるデータ通信により、遠隔のコンピュータ資源を用いて、ロボット装置1の複雑な動作制御を演算したり、リモート・コントロールしたりすることができる。
【0059】
ロボット装置1の行動制御システムは、いわゆるオブジェクト指向(Object Oriented)技術を採り入れて実装される。オブジェクト指向によれば、ソフトウェアの開発と保守が効率化する。オブジェクト指向に基づくソフトウェアは、基本的に、データとそのデータに対する処理手続きとを一体化させた「オブジェクト」というモジュール単位で扱われる。また、必要に応じて複数のオブジェクトを作成し、これら組み合わせることで1つのソフトウェアが完成する。
【0060】
なお、オブジェクト指向パラダイムは、「カプセル化」、「クラス/インスタンス」、「クラス継承(インヘリタンス)」、及び、「メッセージ・パッシング」という主要な基本技術によって実現される。カプセル化は、データと手続き(メソッド)を一体化させることを指す。クラスは、複数のオブジェクトを共通化して定義することを指す。インスタンスはクラスに属するオブジェクトの実体を表す(同一クラスに属するオブジェクトすなわちインスタンスは基本的に同一のメソッドを有するので、個々にメソッドを定義する必要がない)。インヘリタンスとは、あるクラスで定義したことを別の(例えば下位の)クラスが継承することを意味する(新たにクラスを定義するときには、定義済みのクラスとの差分のみを追加変更するだけでよい)。メッセージ・パッシングとは、オブジェクトにメッセージを送って所定の動作を指示することを言う。各オブジェクトは自身のデータを隠蔽しているので、通常、メッセージ・パッシング以外の方法でオブジェクトにアクセスすることはできない。
【0061】
また、後述するが、ロボット1の行動制御システムは、オブジェクト指向(前述)により実装された複数のモジュールで構成される。オブジェクト指向技術により実装されたモジュールのことを「スキーマ(schema)」とも呼び、多数のスキーマをツリー状に階層化することで行動制御システムが構築される。
【0062】
B.分散システムの構築
[背景技術]の欄でも述べたように、ロボットの制御は、各モジュールが同期しながらリアルタイム処理を行なうことが要求される運動制御と、視覚認識や音声認識のように非同期であることが許容されつつも各モジュールを並列処理することが要求される運動制御以外の制御に分けることができる。本実施形態に係る行動制御システムは、モジュール化、並列化、再利用性の観点から分散システムで構築されるが、同期リアルタイム処理と非同期・並列処理の双方を両立させた単一のシステムである点に主な特徴がある。かかる分散システムにおいては、リアルタイムの同期処理が要求されるモジュール間のメッセージ・パッシングと、割り込み処理が発生した際などプロセス内で同期マルチキャスト通信を行なう場合のモジュール間での処理の順序依存性が問題となる。以下では、これらの点について詳解する。
【0063】
B−1.メッセージ・パッシングによるモジュール間通信
メッセージ・パッシングによるモジュール間通信の仕組みについて、図3を参照しながら説明する。
【0064】
同図において、モジュールはオブジェクト指向(前述)により実装されたソフトウェア・オブジェクトであり、インスタンスの生成単位である(インスタンスはクラスに属するオブジェクトの実体を表す)。
【0065】
プロセスは、コンピュータがプログラムを実行する単位である。本実施形態では、1つのプロセス内に複数のモジュールを配置することが許容されている。また、図示のように、プロセス内、プロセス間、さらにはコンピュータ間にまたがってモジュールを配置することができる。
【0066】
プロセス内、プロセス間、コンピュータ間のいずれにおいてもモジュール間通信は可能であるが、各モジュールへはメッセージ・パッシングによる方法によってのみアクセスが可能である。メッセージ・パッシングとは、オブジェクトにメッセージを送って所定の動作を指示することに相当する。
【0067】
メッセージ・パッシングには、1対1のモジュール間で通信するユニキャストや、1対複数のモジュール間で通信するマルチキャストがある。図3中の曲線は、メッセージ・パッシングの経路(モジュール間のメッセージ送受信関係)を示している。
【0068】
プロセスをまたいだメッセージ・パッシングは、分散メモリ型の並列処理として扱われ、プロセス境界においてメッセージ・データのシリアライズ及びデシリアライズが行なわれる。他方、プロセス内のメッセージ・パッシングは、いわゆる共有メモリ型並列処理として扱われ、メッセージ・データのシリアライズ及びデシリアライズは省略される。
【0069】
また、各モジュールは、他のモジュールから受信したメッセージを一時的に保管するメッセージ・キューを装備している。通常、メッセージ・キューに保管されたメッセージは、何らかのタイミングでメッセージ・キューから取り出され、モジュールによる処理が行なわれる。ここで言う何らかのタイミングとして、プロセッサのスケジューリングによってモジュールに実行権が与えられたときや、周期的な割り込みイベントが発生したときなどが挙げられる。モジュールは、受信したメッセージを、メッセージに一度も保管することなく、直接処理することも可能である。
【0070】
分散システムが2以上のコンピュータ(若しくはプロセッサ)を用いて構築される場合、異なるコンピュータ(若しくはプロセッサ)間では処理の並列性を充分確保することができる(周知)。非同期処理が許容されるモジュールの組み合わせのうちとりわけ並列実行が要求されるものに関しては、各モジュールを異なるコンピュータ(若しくはプロセッサ)に分散して配置することで、確実に並列処理を実現することができる。
【0071】
B−2.メッセージ・ブローカを介したメッセージ・パッシングの高速化
本実施形態に係る分散システムでは、同一のプロセス内のモジュール間でメッセージ・パッシングを行なう際に、シリアライズ及びデシリアライズという処理時間を要する処理を省略することで、高速通信を実現する。
【0072】
B−2−1.メッセージ・ブローカ
メッセージ・パッシングを行なう際にメッセージ・データのシリアライズ及びデシリアライズが必要か否かを判断するメッセージ・ブローカを各プロセス内に配置している。
【0073】
例えば、図4Aに示したようなモジュール構成からなる分散システムの各プロセス内にメッセージ・ブローカを配置すると、図4Bのようになる。図示のように、プロセス内及びプロセス間で行なわれるモジュール間通信は、必ずメッセージ・ブローカが介在したメッセージ・パッシングにより行なわれる。
【0074】
B−2−2.メッセージ・ブローカによるシリアライズ及びデシリアライズ
シリアライズは、具体的には、オブジェクトの状態を表す変数(フィールド)、さらにはオブジェクトの種類(クラス)を表す何らかの識別子を、ファイル化できるようなバイト列やXMLフォーマットの形に書き出す直列化に相当し、デシリアライズは、その逆の直列化復元に相当する。プロセス内のメッセージ・パッシングは共有メモリ型並列処理として扱われることから、メッセージ・データのシリアライズ及びデシリアライズを省略することが可能である。
【0075】
既に説明したように、すべてのメッセージはメッセージ・ブローカを介してパッシングされる。メッセージ・ブローカは、プロセス内外のいずれから受け取ったメッセージ・データであるのか、あるいはプロセス内外のいずれに送り出すメッセージ・データであるのかに応じて、シリアライズ又はデシリアライズを行なう必要があるかどうかを判断する。かかる判断を行なうためには、メッセージ・ブローカが該当メッセージの送受信関係(送信モジュールと受信モジュールの関係)を把握する必要がある。
【0076】
送受信関係を把握する方法としては、メッセージ自体にメッセージの送信元及び送信先のモジュールに関する情報を埋め込む方法や、システム開始時にメッセージの送受信関係をメッセージ・ブローカがあらかじめ取得しておく方法など、幾つか考えられる。本発明の要旨は特定の方法に限定されないので、ここでは送受信関係を把握する具体的な方法についての詳細な説明を省略する。
【0077】
図5には、メッセージが送られてきたときにメッセージ・ブローカが実行する処理手順をフローチャートの形式で示している。
【0078】
メッセージ・ブローカは、メッセージを受け取ると、その送信元がプロセス内のモジュールか否かをチェックする(ステップS1)。ここで、送信元モジュールがプロセス外である場合には(ステップS1のNo)、当該メッセージ・データは送信元モジュールが配置されたプロセスのメッセージ・ブローカによってシリアライズされていることになるので、当該メッセージ・ブローカは、メッセージ・データのデシリアライズを実行する(ステップS2)。
【0079】
次いで、メッセージ・ブローカは、受け取ったメッセージの送信先があるか否かをチェックする(ステップS3)。送信先がない場合(指定されているすべての送信先へのパッシングが終了したとき)には(ステップS3のNo)、当該処理ルーチンを終了する。
【0080】
一方、メッセージの送信先がある場合には(ステップS3のYes)、メッセージ・ブローカは、続いて当該送信先モジュールがプロセス内か否かをチェックする(ステップS4)。
【0081】
ここで、送信先モジュールがプロセス外のときには(ステップS4のNo)、メッセージ・ブローカは、メッセージ・データのシリアライズを行なってから(ステップS5)、送信先モジュールの存在するプロセスへメッセージ・データを送信する(ステップS7)。
【0082】
また、送信先モジュールがプロセス内のときには(ステップS4のYes)、メッセージ・ブローカは、メッセージ・データのシリアライズを省略して、当該メッセージをそのまま送信先モジュールへ届ける(ステップS6)。
【0083】
このようにして、メッセージ・データの送信を終えると、メッセージ・ブローカは、次の送信先メッセージを取り出して(ステップS8)、ステップS3に戻り、上記と同様の処理を繰り返し実行する。
【0084】
B−3.メッセージ・キューを利用しないメッセージ受信によるメッセージ・パッシングの高速化
各モジュールは、他のモジュールから届いたメッセージを一時的に保管するためのメッセージ・キューを備えている。本実施形態に係る分散システムでは、メッセージ・パッシングを高速化するためのその他の方法として、メッセージ・キューを利用しないメッセージ受信を行なうようにしている。
【0085】
すなわち、メッセージ・パッシングの際に、メッセージ・キューの利用の有無を選択する仕組みを導入する。メッセージ・キューを利用しない場合には、送信元モジュールから発行されたメッセージが送信先モジュールで即時処理される。送信元と送信先のモジュールが同一プロセス内にあるときには、メッセージ・キューを利用しないことで、関数呼び出しと同等の処理負荷でのメッセージ・パッシングが可能となり、同一プロセス内のモジュール間においてメッセージの同期処理が可能になる。
【0086】
B−3−1.メッセージ・キューを利用したメッセージ・パッシング
まず、メッセージ・キューを利用したメッセージ・パッシングについて説明する。送信先モジュールが受信したメッセージはメッセージ・キューに一時保存される。メッセージ・キューに一時保存することで、送信元モジュールと送信先モジュールの実行を切り離すことができ、非同期分散処理が可能になる。
【0087】
図6には、メッセージ・キューを利用した場合のメッセージ・パッシングの処理手順をフローチャートの形式で示している。
【0088】
まず、送信元モジュールがメッセージを送信する(ステップS11)。
【0089】
メッセージ・ブローカは、送信メッセージに対する処理を実施する(ステップS12)。例えば、送信元モジュールのあるプロセス内に配置されたメッセージ・ブローカはメッセージ・データのシリアライズを行ない、また、送信先モジュールのあるプロセス内に配置されたメッセージ・ブローカは、メッセージ・データのデシリアライズを行なう(前述)。そして、送信先モジュールのあるプロセス内に配置されたメッセージ・ブローカは、送信先モジュールが持つメッセージ・キューに、メッセージ・データを一時保存する(ステップS13)。
【0090】
送信先モジュールでの処理は、送信元モジュールとは非同期分散処理となる。すなわち、送信先モジュールは、メッセージ・キューに保管されたメッセージを、何らかのタイミングで取り出して(ステップS14)、その処理を実行する(ステップS15)。
【0091】
B−3−2.メッセージ・キューを利用ないメッセージ・パッシング
続いて、メッセージ・キューを利用ないたメッセージ・パッシングについて説明する。送信先モジュールが受信したメッセージは即時処理される。このメッセージ・パッシング方法は、送信元と送信先のモジュールが同一プロセス内にあるときに実施される。
【0092】
図7には、メッセージ・キューを利用しない場合のメッセージ・パッシングの処理手順をフローチャートの形式で示している。
【0093】
まず、送信元モジュールがメッセージを送信する(ステップS21)。
【0094】
メッセージ・ブローカは、送信メッセージに対する処理を実施する(ステップS22)。そして、送信先モジュールは、メッセージの処理を即時に実行する(ステップS23)。
【0095】
送信元と送信先のモジュールが同一プロセス内にある場合は、メッセージ・キューを利用しないことで、(送信元及び送信先モジュールの実行処理が切り離せないため)非同期分散処理ができなくなるが、関数呼び出しと同等の処理負荷でのメッセージ・パッシングが可能となる。
【0096】
B−4.同期型マルチキャスト通信における処理順序依存性の解決
割り込み処理が発生した際には、プロセス内ではあるモジュールから他の複数のモジュール宛ての同期マルチキャスト通信を行なうことがあるが、送信先となる各モジュール間において処理の順序依存性が問題になる。
【0097】
例えば、ロボットの運動制御プログラム内で、手の関節角度制御と手を用いた物体把持制御がそれぞれ独立した制御モジュールとして実装されている場合、先に関節角度制御モジュールに割り込みが発生して関節角度指令を発すると、物体把持制御のための関節角度指令がその制御周期では反映されなくなる。
【0098】
このような、並列処理におけるモジュール間の処理順序依存性の問題を解決するためには、メッセージ・パッシングを使う方法や、シグナルを使う方法、同期バリアを使う方法などさまざまな方法が挙げられ、状況に応じて使い分ければ良い。しかし、これらの方法はいずれも各モジュールが非同期に実行されている場合を前提にした解決方法であり、リアルタイム性の同期処理の要求を満足することはできない。
【0099】
上述したように、本実施形態に係る分散システムでは、メッセージ・キューを利用しないメッセージ・パッシングが利用でき、同一プロセス内でのモジュール間のメッセージ・パッシングは同期通信となる。このようなメッセージ・パッシング方法では、非同期の並列処理を前提にした従来の解決方法を適用することはできない。
【0100】
以下では、従来の解決方法を適用できない同期型マルチキャスト通信における処理順序依存性を解決するための方法について説明する。
【0101】
B−4−1.メッセージ・ブローカによる処理依存性の解決
図8には、分散システムのあるプロセス内で複数のモジュールに対する同期型マルチキャスト通信が実行される様子を示している。
【0102】
同図では、モジュールAがモジュールB、C、Dに対してメッセージを送信している。このときモジュールB、C、Dのうち、どのモジュールから順にメッセージを受信するかは不定である。
【0103】
本実施形態に係る分散システムでは、プロセス毎にメッセージ・ブローカが配設され、プロセス内及びプロセス間で行なわれるモジュール間通信は、必ずメッセージ・ブローカが介在したメッセージ・パッシングにより行なわれる(前述)。メッセージ・ブローカの介在によりプロセス内で行なわれる同期型マルチキャスト通信は、図9に示す通りとなる。したがって、メッセージ・ブローカがメッセージ送信先であるモジュールB、C、D間の処理依存関係を保持し、それを基にメッセージを配信する順序を並べ替えることで、処理順序依存性の問題を解決することができる。
【0104】
B−4−2.メッセージ送受信を基にした処理順序関係の自動解決
メッセージ・ブローカが処理順序関係を元にメッセージ配信を行なうためには、モジュール間の処理依存関係を調査し、その結果をメッセージ・ブローカに登録しておかなければならない。
【0105】
本実施形態に係る分散システムでは、モジュール間通信はメッセージ・パッシングによって実行される。言い換えれば、モジュール間の関係は、メッセージ・パッシングによって決定する。
【0106】
例えば、モジュールBがモジュールCにメッセージを送信する場合、モジュールBの情報に沿ってモジュールCが処理を行なうのであるから、「モジュールCはモジュールBに依存している」と言うことができる。図10に示す例では、モジュールCはモジュールBとモジュールDに依存し、モジュールDはモジュールBに依存していることが判る。
【0107】
図8に示した例で考えると、モジュールAは、モジュールB、C、D宛てに同期マルチキャスト通信を行なうときには、モジュールB、D、Cの順にメッセージ配信を行なうように送信先モジュールの並べ替えを行なうことで、処理順序依存性の問題を解決することができる。
【0108】
以下では、プロセス内のモジュール間におけるメッセージ送受信関係を基にモジュール間の処理順序依存関係を自動的に導き出すためのアルゴリズム例について説明する。
【0109】
ここでは、図11に示すような複数のモジュールからなるプロセス内において、矢印に示すように送信元モジュールαから複数のモジュールA〜J宛ての同期マルチキャスト通信を行なう場合を例にとる。また、図11に示したプロセス内では、同期マルチキャスト通信の送信先モジュールA〜Jの間では、図12中で矢印に示すようなメッセージ送受信関係が存在するものとする。そして、同期マルチキャスト通信のメッセージを受け取るモジュール間では処理順序依存性があり、これを解決しなければいけないとする。
【0110】
図13には、プロセス内のモジュール間におけるメッセージ送受信関係を基にモジュール間の処理順序依存関係を自動的に導き出すための処理手順をフローチャートの形式で示している。
【0111】
まず、プロセス内の同期マルチキャスト通信において、メッセージを受け取るモジュール(送信先モジュール)を抽出する(ステップS31)。図11に例示するような、モジュールαを送信元とする同期マルチキャスト通信の場合には、10個のモジュールA〜Jが送信先モジュールとして抽出される。
【0112】
次いで、同期マルチキャスト通信の送信先として抽出されたモジュール同士の間で通信されるメッセージ・パッシングすなわちメッセージ送受信関係を抽出する(ステップS32)。図12に示す例では、10個の送信先モジュールA〜Jでは、A→B、A→C、C→B、C→F、…の11個のメッセージ・パッシングm1〜m11が抽出される。
【0113】
次いで、同期マルチキャスト通信の送信先モジュールの中で、他のいずれの送信先モジュールからもメッセージを受け取らないモジュールを抽出する(ステップS33)。このようなモジュールは、ステップS32で抽出されたメッセージ送受信関係においてメッセージ・パッシングの送信先にしかならないことから、ここでは「ルート・モジュール」と呼ぶことにする。図12に示す例では、モジュールA、E、Jの3個のモジュールがルート・モジュールとして抽出される。
【0114】
そして、抽出されたルート・モジュール毎に、メッセージ・パッシングで繋がっているモジュールを順に探索しながら昇り順の処理番号をモジュールに登録する処理を繰り返していく。その際、ルート・モジュールの処理番号を1とし、モジュールを辿る毎に処理番号を1ずつ増分していく。また、これより以前の他のルート・モジュールを起点としたメッセージ・パッシング探索により処理番号が既に登録されているモジュールについては、大きい方の処理番号に置き換えられる。
【0115】
図13に示したフローチャートに沿って説明する。ルート・モジュールの数だけ繰り返すループR1内では、処理番号を1に初期化した後(ステップS34)、現在の処理対象であるモジュールに関し、既に処理番号が登録されているときには(ステップS35のYes)、新しい処理番号の方が大きければ(ステップS36のYes)その処理番号を登録するが(ステップS38)、そうでなければ(ステップS36のNo)既に登録されている値へ処理番号を更新する(ステップS37)。また、まだ処理番号が登録されていないモジュールであれば(ステップS35のNo)、新しい処理番号を登録する(ステップS38)。このようにして当該モジュールに関して処理番号の登録作業を終えると、処理番号を1だけ増分するとともに(ステップS39)、メッセージ・パッシングで次に繋がっている送信先モジュールを抽出する(ステップS40)。そして、送信先モジュールの数だか繰り返すループR2により、このような処理番号の登録処理を繰り返し実行する。
【0116】
ここで、図12に示した具体例に沿って説明しておく。例えば、ルート・モジュールAを開始モジュールとしたとき、ループR1内では、以下のような処理が行なわれる。
【0117】
(1)ルート・モジュールAに処理番号1を登録するとともに、処理番号を1だけ増分する。
(2)モジュールAからメッセージ・パッシングで繋がっているモジュールB、Cに処理番号2を登録するとともに、処理番号を1だけ増分する。
(3)モジュールCからメッセージ・パッシングで繋がっているモジュールBには、既に処理番号2が登録されているが、新しい処理番号3の方が大きいので、処理番号3に更新する。また、モジュールCからメッセージ・パッシングで繋がっているモジュールFに対しても、処理番号3を登録する。そして、処理番号を1だけ増分する。
(4)モジュールFからメッセージ・パッシングで繋がっているモジュールGに対して、処理番号4を登録する。
【0118】
上記(1)〜(4)の結果として、ルート・モジュールAに関する処理が終了した時点で、下表に示すような処理番号の割り振りとなる。
【0119】
【表1】
【0120】
同様の手順で、ルート・モジュールEに関する処理が終了した時点で、下表に示すような処理番号の割り振りとなる。
【0121】
【表2】
【0122】
さらに同様の手順で、ルート・モジュールJに関する処理が終了した時点で、最終的には下表に示すような処理番号の割り振りとなる。
【0123】
【表3】
【0124】
このようにして各送信先モジュールに割り振られた処理番号は、同期型マルチキャスト通信における処理順序依存性を表す値となる。そこで、処理番号にしたがって送信先モジュールの並べ替えを行なう(ステップS41)。
【0125】
図12に示す例では、送信先モジュールA〜Jは、A、E、J、C、D、H、B、I、F、Gの順に並べ替えられることになる。そして、モジュールαから同期マルチキャスト通信を行なう際には、並べ替えられた順にメッセージを送信すれば、処理順序依存性の問題は発生しなくなる。
【0126】
C.リアルタイム同期処理と非同期・並列処理を両立したロボットの制御システム
本実施形態に係るロボットの行動制御システムは、オブジェクト指向(前述)により実装され、多数のスキーマをツリー状に階層化することで構築される(スキーマは、オブジェクト指向技術を用いて実装されるモジュールのことである)。このような分散システムは、運動制御において要求される同期リアルタイム性と、非同期が許容される運動制御以外の制御において要求される処理の並列性とを両立させる必要がある。
【0127】
上記のB項で説明した分散システムは、モジュール間通信はメッセージ・パッシングにより行なわれる。コンピュータにおけるプログラムの実行単位であるプロセス毎にメッセージ・ブローカが配設されており、このメッセージ・ブローカはプロセス内でメッセージ・パッシングが発生した際にはシリアライズ及びでシリアライズの省略とメッセージ・キューへの保管を省略することにより、メッセージ・パッシングの高速化を実現している。
【0128】
したがって、リアルタイムの同期処理が要求される運動制御系の各処理を同じプロセス内のモジュールとして実装する一方、運動制御以外の制御系の各処理を個別のプロセス内のモジュールとして実装することにより処理の並列性を確保することができ、相反する要求を両立させた分散システムを構築することが可能となる。
【0129】
以下では、B項で説明した分散システムを利用したロボットの制御システムの具体的な運用方法について説明する。
【0130】
図14には、ロボットの行動制御システムのうち、視線制御に関連するサブシステムを抽出して示している。図示の視線制御サブシステムは、同期リアルタイム処理が要求されるモジュールと非同期並列処理が要求されるモジュールが混在した分散システムであり、カメラ15に代表される視覚センサの情報から注意すべき内容を判断し、視線制御のための運動指令を与える機能を持つものである。
【0131】
また、図示の視線制御サブシステムは、2台のコンピュータ1〜2を用いて構築され、合計3つのプロセスA〜Cが実行され、その中で合計6つのモジュールが動作している。なお、同図において、「コンピュータ」を「プロセッサ」と読み替えることもできる。
【0132】
コンピュータ1上では、プロセスA及びBが実行される。プロセスA内には、Vision Data Acquisition(視覚データ入力処理)、Visual Perception(視覚認識処理)という2つのモジュールが配置され、プロセスB内には、Control Trigger(制御トリガ)、Visual Controller(視線制御)、Cartesian Controller(位置姿勢制御)という3つのモジュールが配置される。また、コンピュータ2上では、Visual Attention(視覚注意)というモジュールが配置されたプロセスCが実行される。各モジュールの役割を下表に示す。なお、メッセージ処理タイミングに応じて、受信時のメッセージの取り扱い(メッセージ・キューに保管すべきか否か)が決定される。
【0133】
【表4】
【0134】
1つのプロセスはコンピュータがプログラムを実行する単位となる。リアルタイムの同期処理が要求されるモジュール群をプロセス内に配置すれば、同期処理を実行することができる。図14並びに表4に示す例では、Visual Controller及びCartesian Controllerといった運動制御系のモジュールは、プロセスB内に配置され、同期リアルタイムに処理される。
【0135】
一方、非同期であることが許容されるが並列処理が要求される各モジュールを、個別のプロセスあるいは別のコンピュータに配置すれば、並列して実行することができる。例えば、Visual Perceptionなどの認識用モジュールとVisual Attensionなどの思考用モジュールは異なるプロセスに配置され、非同期で処理される。また、これらの2モジュールは、異なるコンピュータ1及び2に分散して配置されるので、並列実行性も担保される。
【0136】
また、メッセージ・ブローカをプロセス毎に配置しており、モジュール間でのデータの受け渡しは、メッセージ・ブローカが介在するメッセージ・パッシングにより行なわれる。図14に示す視線制御サブシステムでは、プロセスA内で、Visual Data AcquisitionからVisual Perceptionへ、メッセージMsg_aが送信される。プロセスAとC間では、Visual PerceptionからVisual Attentionへ、メッセージMsg_bが送信される。プロセスCとB間では、Visual AttentionからVisual Controllerへ、メッセージMsg_cが送信される。プロセスB内では、Control TriggerからVisual Controller及びCartesian ControllerへメッセージMsg_eがそれぞれ送信されるとともに、Visual ControllerからCartesian ControllerへメッセージMsg_dが送信される。
【0137】
図15には、分散システムの起動処理手順をフローチャートの形式で示している。この起動処理はプロセス単位で行なわれ、図14に示したシステム構成であれば合計3回行なわれることになる。
【0138】
コンピュータ名とプロセス名によって実行するモジュールが決まることから、まず、これらを確認する(ステップS51)。
【0139】
次いで、起動処理を行なうために必要となるシステム構成ファイルを読み込む(ステップS52)。読み込んだシステム構成ファイルの内容に従って、必要なモジュールがインスタンス化され、実行される。
【0140】
図16には、図14及び表4に示した分散システム構成例に相当するシステム構成ファイルの構成をテキスト表記したものを示している。図示のように、システム構成ファイルでは、プログラムを実行する単位であるプロセス毎の構成情報が、{コンピュータ名,プロセス名,モジュール一覧,モジュール名及びそのメッセージ処理タイミング}という形式で記述されるとともに、(メッセージ処理タイミングは、当該処理が割り込み(Interrupt)、同期(Synchronpus)、又は非同期(Asynchronous)のいずれであるかを示すものとする)、処理順序依存性のあるメッセージ(Ordered Message)が指定されている。例えば、先行ステップS51で、コンピュータ名:Computer1、プロセス名:ProcessAが確認されている場合には、モジュールVisual Data Acquisition及びVisual Perceptionが対象であることが判る。また、システム構成ファイルには、モジュールが受信したメッセージを処理するタイミングも記述されているので、その内容に応じたモジュールのインスタンス化が行なわれる。
【0141】
次いで、インスタンス化するモジュール間のメッセージ送受信に関する情報を取得する(ステップS53)。
【0142】
本実施形態では、分散システムの構成要素となる各モジュール内に、メッセージ送受信情報を取得するための手段を備えている。図17には、モジュールの擬似コードを例示している。図中の送信メッセージの一覧を取得する関数“MessageListGetPostMessageList()”、及び、受信メッセージの一覧を取得する関数“MessageListGetReceiveMessageList()”がこれに相当し、インスタンスかされるモジュールからはメッセージ送受信情報を取得することができる。そして、収集されたメッセージ送受信情報は、起動処理の中の「プロセス間メッセージ情報の交換」で利用される他、メッセージ・ブローカがメッセージを適切に扱うために利用される。
【0143】
図14に示した分散システムの場合、コンピュータ1上で実行される各プロセスA、B、並びに、コンピュータ2上で実行されるプロセスCにおいて、下表5〜7に示すような、各メッセージの送信モジュール及び受信モジュールに関するメッセージ送受信情報を収集することができる。但し、各表から明らかなように、起動処理の段階では、プロセス間のメッセージ情報を取得することはできない。
【0144】
【表5】
【0145】
【表6】
【0146】
【表7】
【0147】
次いで、ステップS52で読み込んだシステム構成ファイルと、ステップS53で収集したメッセージ送受信情報を用いて、B−4項で説明した処理に従って、同期型マルチキャスト通信における処理順序依存性の解決メッセージ処理依存性の解決を行なう(ステップS54)。
【0148】
図14に示した分散システムの場合、図16に示すシステム構成ファイル内で、メッセージMsg_eが処理順序依存性のあるメッセージとして指定されているので、当該メッセージが処理対象となることが判る。また、表6に示したメッセージ送受信情報から、コンピュータ1上で実行されるプロセスBが処理対象のプロセスであることが判る。そこで、コンピュータ1上で実行されるプロセスBに対して、B−4項で説明した処理に従って、同期型マルチキャスト通信における処理順序依存性の解決メッセージ処理依存性の解決を行なう。
【0149】
次いで、ステップS53で収集したメッセージ送受信情報ではプロセス間のメッセージ送受信情報が欠落している場合には(ステップS55のYes)、当該欠落部分の情報を補うべく、他プロセスとの接続を試みる(ステップS56)。
【0150】
上記の表5〜表7に示した例では、送信モジュール又は受信モジュールが同一プロセス内に存在しない欄がブランクになっている。例えば、コンピュータ1上で実行するプロセスAの起動処理では、コンピュータ1上で実行する他のプロセスBとの接続を試みる。
【0151】
そして、他プロセスとの接続に成功すると(ステップS56のYes)、メッセージ送受信情報の欠落していたプロセス間でメッセージ情報の交換を行なう(ステップS57)。
【0152】
図14に示した分散システムにおいて、すべてのプロセスが接続されると、以下の表8〜表10のようなメッセージ送受信情報を取得することができる。
【0153】
【表8】
【0154】
【表9】
【0155】
【表10】
【0156】
メッセージ・ブローカは、上記のメッセージ送受信情報を利用して、B項で説明したメッセージ・パッシングの高速化を実現することができる。
【0157】
続いて、図14に示した分散システム中で、幾つかのメッセージ・パッシングを例にとって、そのシーケンスについて考察してみる。
【0158】
図18には、図14中のメッセージMsg_aのメッセージ・パッシングを行なうシーケンスを示している。
【0159】
同メッセージ・パッシングは、コンピュータ1上で実行されるプロセスA内における、モジュールVision Data AcquisitionからモジュールVisual Perceptionへのメッセージ・パッシングであり、同プロセス内のメッセージ・ブローカの介在により行なわれる。
【0160】
送受信モジュールがともに同一プロセス内に存在することから、メッセージ・ブローカは、シリアライズ/でシリアライズ処理を行なわない。
【0161】
また、受信モジュールであるVisual Perceptionは、表4に示したように非同期にメッセージを処理するので、受信メッセージMsg_aは一端メッセージ・キューに保存され、その後、モジュールVisual Perceptionはメッセージ・キューから同メッセージを取り出してその処理を行なう。
【0162】
図19には、図14中のメッセージMsg_bのメッセージ・パッシングを行なうシーケンスを示している。
【0163】
同メッセージ・パッシングは、コンピュータ1上で実行されるプロセスA内のモジュールVisual Perceptionから、別のコンピュータ2上で実行される他のロセスC内のモジュールVisual Attentionへのメッセージ・パッシングであり、各プロセス内のメッセージ・ブローカの介在により行なわれる。
【0164】
プロセス間のメッセージ・パッシングであることから、送信側のメッセージ・ブローカは、送信モジュールVisual PerceptionからのメッセージMsg_bをシリアライズして他のプロセスCへ転送する。そして、受信側のメッセージ・ブローカは、転送されてきたメッセージを、デシリアライズしてから、受信モジュールVison Attentionへ送る。
【0165】
図20には、図14中のメッセージMsg_eのメッセージ・パッシングを行なうシーケンスを示している。
【0166】
同メッセージ・パッシングは、コンピュータ1上で実行されるプロセスB内における、モジュールControl Triggerから複数のモジュールVision Controller及びCartesian Controllerへの同期マルチキャスト通信であり、同プロセス内のメッセージ・ブローカの介在により行なわれる。
【0167】
また、図16に示したシステム構成ファイルで、メッセージMsg_eは処理順序依存性のあるメッセージであることが示されている。したがって、メッセージ・ブローカは、システム起動時に並べ替えられた順序で、各モジュールへメッセージMsg_eを配信する。
【0168】
表4に示したように受信モジュールであるVision Controller及びCartesian Controllerはともにメッセージを同期処理する設定となっていることから、メッセージ・キューにメッセージを保存せず即時に処理される。
【0169】
図20からわかるように、メッセージMsg_eのメッセージ・パッシングは、すべての受信モジュールで同期処理され、且つ、関数呼び出しのみで実装を実現できる内容であることから、リアルタイム・システムの要求を満たすモジュール間通信が可能である。
【産業上の利用可能性】
【0170】
以上、特定の実施形態を参照しながら、本発明について詳解してきた。しかしながら、本発明の要旨を逸脱しない範囲で当業者が該実施形態の修正や代用を成し得ることは自明である。
【0171】
本明細書では、本発明に係る分散システムを人や環境に対してインタラクションを行なうロボットの制御に適用した場合の実施形態を中心に説明してきたが、本発明の要旨は必ずしもこのような用途に限定されるものではない。同期リアルタイム性の要求と、非同期を許容しつつ処理の並列性の要求とを両立しなければならないさまざまなタイプの分散システムに対して、本発明を同様に適用することができる。
【0172】
また、本発明の要旨は、必ずしも「ロボット」と称される製品には限定されない。すなわち、電気的若しくは磁気的な作用を用いて人間の動作に似せた運動を行なう機械装置であるならば、例えば玩具等のような他の産業分野に属する製品であっても、同様に本発明を適用することができる。
【0173】
要するに、例示という形態で本発明を開示してきたのであり、本明細書の記載内容を限定的に解釈するべきではない。本発明の要旨を判断するためには、特許請求の範囲を参酌すべきである。
【図面の簡単な説明】
【0174】
【図1】図1は、本発明の実施に供されるロボット装置1の機能構成を模式的に示した図である。
【図2】図2は、図1中の制御ユニット20の構成をさらに詳細に示した図である。
【図3】図3は、分散システムにおいてメッセージ・パッシングによるモジュール間通信を行なう仕組みを説明するための図である。
【図4A】図4Aは、分散システムの構成例を示した図である。
【図4B】図4Bは、図4Aに示した分散システムのプロセス毎にメッセージ・ブローカを配置した様子を示した図である。
【図5】図5は、メッセージが送られてきたときにメッセージ・ブローカが実行する処理手順を示したフローチャートである。
【図6】図6は、メッセージ・キューを利用した場合のメッセージ・パッシングの処理手順を示したフローチャートである。
【図7】図7は、メッセージ・キューを利用しない場合のメッセージ・パッシングの処理手順を示したフローチャートである。
【図8】図8は、分散システムのあるプロセス内で複数のモジュールに対する同期型マルチキャスト通信が実行される様子を示した図である。
【図9】図9は、メッセージ・ブローカの介在によりプロセス内で行なわれる同期型マルチキャスト通信の様子を示した図である。
【図10】図10は、モジュール間の関係がメッセージ・パッシングにより決定されることを説明するための図である。
【図11】図11は、プロセス内のモジュール間におけるメッセージ送受信関係を基にモジュール間の処理順序依存関係を自動的に導き出すためのアルゴリズム例を説明するための図であり、具体的には、プロセス内のメッセージ送受信関係を例示した図である。
【図12】図12は、プロセス内のモジュール間におけるメッセージ送受信関係を基にモジュール間の処理順序依存関係を自動的に導き出すためのアルゴリズム例を説明するための図であり、具体的には、プロセス内のモジュール間におけるメッセージ送受信関係を例示した図である。
【図13】図13は、プロセス内のモジュール間におけるメッセージ送受信関係を基にモジュール間の処理順序依存関係を自動的に導き出すための処理手順を示したフローチャートである。
【図14】図14は、ロボットの行動制御システムのうち、視線制御に関連するサブシステムを示した図である。
【図15】図15は、分散システムの起動処理手順を示したフローチャートである。
【図16】図16は、図14及び表4に示した分散システム構成例に相当するシステム構成ファイルの構成をテキスト表記した図である。
【図17】図17は、本発明の実施形態に係る分散システムの構成要素となるモジュールの擬似コードを示した図である。
【図18】図18は、コンピュータ1上で実行されるプロセスA内において、同プロセス内のメッセージ・ブローカの介在により、モジュールVision Data AcquisitionからモジュールVisual Perceptionへのメッセージ・パッシングを行なうシーケンスを示した図である。
【図19】図19は、コンピュータ1上で実行されるプロセスA内のモジュールVisual Perceptionから、別のコンピュータ2上で実行されるプロセスC内のモジュールVisual Attentionへ、各プロセス内のメッセージ・ブローカの介在によりプロセス間メッセージ・パッシングを行なうシーケンスを示した図である。
【図20】図20は、コンピュータ1上で実行されるプロセスB内において、同プロセス内のメッセージ・ブローカの介在により、モジュールControl Triggerから複数のモジュールVision Controller及びCartesian Controllerへのメッセージ・パッシング(同期マルチキャスト通信)を行なうシーケンスを示した図である。
【符号の説明】
【0175】
1…ロボット装置
15…CCDカメラ
16…マイクロフォン
17…スピーカ
18…タッチ・センサ
19…LEDインジケータ
20…制御部
21…CPU
22…RAM
23…ROM
24…不揮発メモリ
25…インターフェース
26…無線通信インターフェース
27…ネットワーク・インターフェース・カード
28…バス
29…キーボード
40…入出力部
50…駆動部
51…モータ
52…エンコーダ
53…ドライバ
【特許請求の範囲】
【請求項1】
リアルタイムの同期処理が要求されるモジュール群を、プログラムを実行する単位となる1つのプロセス内で実行する同期処理手段と、
非同期であることが許容されるが並列処理が要求される各モジュールをそれぞれ個別のプロセスに配置して並列して実行する並列処理手段と、
前記モジュール間でのデータの受け渡しをメッセージ・パッシングにより行なうモジュール間通信手段と、
を具備することを特徴とする情報処理システム。
【請求項2】
前記モジュール間通信手段は、プロセス毎に配置され、モジュール間でのメッセージの交換に介在するメッセージ・ブローカを備える、
ことを特徴とする請求項1に記載の情報処理システム。
【請求項3】
前記メッセージ・ブローカは、メッセージを初期表現から他の表現へ変換するシリアライズ並びにその逆変換となるデシリアライズを行なう機能を備えるが、受け取ったメッセージの送信元が同一プロセス内であるときはデシリアライズを省略するとともに、受け取ったメッセージの送信先が同一プロセス内のときにはシリアライズを省略する、
ことを特徴とする請求項2に記載の情報処理システム。
【請求項4】
各モジュールは、他のモジュールから受信したメッセージを一時的に保管するメッセージ・キューを装備し、メッセージの送信先となる場合において、送信元となるモジュールが同じプロセス内にないときには受信したメッセージを前記メッセージ・キューに一時保管するが、送信元となるモジュールが同じプロセス内にあるときには受信したメッセージの前記メッセージ・キューへの保管を省略する、
ことを特徴とする請求項1に記載の情報処理システム。
【請求項5】
プロセス内におけるモジュール間の処理順序依存性を取得する処理順序依存性取得手段と、
プロセス内のあるモジュールから他の複数のモジュール宛ての同期マルチキャスト通信を行なう際に、前記処理順序依存性に基づく順序に従って各送信先モジュールに対してメッセージ送信を行なう同期マルチキャスト通信手段と、
をさらに備えることを特徴とする請求項1に記載の情報処理システム。
【請求項6】
前記処理順序依存性取得手段は、同期マルチキャスト通信の送信先となるモジュール間におけるメッセージ送受信関係に基づいて、前記処理順序依存関係を取得する、
ことを特徴とする請求項5に記載の情報処理システム。
【請求項7】
前記処理順序依存性取得手段は、同期マルチキャスト通信の送信先となるモジュール間におけるメッセージ送受信関係においてメッセージ・パッシングの送信先にしかならないルート・モジュールからメッセージ・パッシングで繋がる順に基づいて前記処理順序依存関係を取得する、
ことを特徴とする請求項5に記載の情報処理システム。
【請求項8】
各モジュールは、送信メッセージの一覧を取得する関数及び受信メッセージの一覧を取得する関数を含み、
モジュール毎の前記の送信メッセージの一覧を取得する関数及び受信メッセージの一覧を基に各メッセージの送信モジュール及び受信モジュールに関するメッセージ送受信情報を収集する手段と、
各プロセスを実行するコンピュータ名と、プロセス内に配置されるモジュール並びに各モジュールのメッセージ処理タイミングを記述するとともに、処理順序依存性のあるメッセージを指定した構成ファイルをさらに備え、
前記処理順序依存性取得手段は、前記構成ファイル及び前記メッセージ送受信情報を用いて、前記処理順序依存関係を取得する、
ことを特徴とする請求項5に記載の情報処理システム。
【請求項9】
前記メッセージ・ブローカは、各モジュール内の前記送信メッセージの一覧を取得する関数及び受信メッセージの一覧を取得する関数を用いて、メッセージを扱う、
ことを特徴とする請求項8に記載の情報処理システム。
【請求項10】
少なくとも一部のモジュールは、他のモジュールから受信したメッセージを一時的に保管するメッセージ・キューを装備し、
前記メッセージ・ブローカは、前記構成ファイルに記述されている受信モジュールのメッセージ処理タイミングに応じて、メッセージを該受信モジュールのメッセージ・キューに保管するか否かを決定する、
ことを特徴とする請求項8に記載の情報処理システム。
【請求項11】
2以上のコンピュータを用いて構築され、
前記並列処理手段により非同期で実行されるモジュールのうちとりわけ並列性が要求されるモジュールの組み合わせに関しては、異なるコンピュータ上で実行されるプロセスに分散して配置する、
ことを特徴とする請求項1に記載の情報処理システム。
【請求項12】
リアルタイムの同期処理が要求されるモジュール群を、プログラムを実行する単位となる1つのプロセス内で実行する同期処理ステップと、
非同期であることが許容されるが並列処理が要求される各モジュールをそれぞれ個別のプロセスに配置して並列して実行する並列処理ステップと、
前記モジュール間でのデータの受け渡しをメッセージ・パッシングにより行なうモジュール間通信ステップと、
を具備することを特徴とする情報処理方法。
【請求項13】
関節動作に基づく運動を通じて外界に対するインタラクションを行なうロボットの制御システムであって、
リアルタイムの同期処理が要求される、運動制御を処理するためのモジュール群を、プログラムを実行する単位となる1つのプロセス内で実行する同期処理手段と、
非同期であることが許容されるが並列処理が要求される、前記運動制御以外の制御を処理するための各モジュールをそれぞれ個別のプロセスに配置して並列して実行する並列処理手段と、
前記モジュール間でのデータの受け渡しをメッセージ・パッシングにより行なうモジュール間通信手段と、
を具備することを特徴とするロボットの制御システム。
【請求項14】
関節動作に基づく運動を通じて外界に対するインタラクションを行なうロボットの制御方法であって、
リアルタイムの同期処理が要求される、運動制御を処理するためのモジュール群を、プログラムを実行する単位となる1つのプロセス内で実行する同期処理ステップと、
非同期であることが許容されるが並列処理が要求される、前記運動制御以外の制御を処理するための各モジュールをそれぞれ個別のプロセスに配置して並列して実行する並列処理ステップと、
前記モジュール間でのデータの受け渡しをメッセージ・パッシングにより行なうモジュール間通信ステップと、
を具備することを特徴とするロボットの制御方法。
【請求項15】
複数のモジュールからなりコンピュータ上で実行するようにコンピュータ可読形式で記述されたコンピュータ・プログラムであって、前記コンピュータを、
リアルタイムの同期処理が要求されるモジュール群を、プログラムを実行する単位となる1つのプロセス内で実行する同期処理手段と、
非同期であることが許容されるが並列処理が要求される各モジュールをそれぞれ個別のプロセスに配置して並列して実行する並列処理手段と、
前記モジュール間でのデータの受け渡しをメッセージ・パッシングにより行なうモジュール間通信手段と、
として機能させるためのコンピュータ・プログラム。
【請求項16】
複数のモジュールからなり、モジュール間の通信をメッセージ・パッシングにより行なうとともに、プロセスを単位としてコンピュータ・プログラムを実行するコンピュータ上で実行するようにコンピュータ可読形式で記述されたコンピュータ・プログラムであって、
リアルタイムの同期処理が要求されるモジュール群を同じプロセス内に配置するとともに、非同期であることが許容されるが並列処理が要求される各モジュールをそれぞれ個別のプロセスに配置し、
モジュール間でのメッセージの交換に介在し、メッセージを初期表現から他の表現へ変換するシリアライズ並びにその逆変換となるデシリアライズを行なう機能を備えるが、受け取ったメッセージの送信元が同一プロセス内であるときはデシリアライズを省略するとともに、受け取ったメッセージの送信先が同一プロセス内のときにはシリアライズを省略するメッセージ・ブローカを各プロセスに配置する、
ことを特徴とするコンピュータ・プログラム。
【請求項17】
複数のモジュールからなり、モジュール間の通信をメッセージ・パッシングにより行なうとともに、プロセスを単位としてコンピュータ・プログラムを実行するコンピュータ上で実行するようにコンピュータ可読形式で記述されたコンピュータ・プログラムであって、
リアルタイムの同期処理が要求されるモジュール群を同じプロセス内に配置するとともに、非同期であることが許容されるが並列処理が要求される各モジュールをそれぞれ個別のプロセスに配置し、
各モジュールは、他のモジュールから受信したメッセージを一時的に保管するメッセージ・キューを装備し、メッセージの送信先となる場合において、送信元となるモジュールが同じプロセス内にないときには受信したメッセージを前記メッセージ・キューに一時保管するが、送信元となるモジュールが同じプロセス内にあるときには受信したメッセージの前記メッセージ・キューへの保管を省略するように記述されている、
ことを特徴とするコンピュータ・プログラム。
【請求項18】
複数のモジュールからなり、モジュール間の通信をメッセージ・パッシングにより行なうとともに、プロセスを単位としてコンピュータ・プログラムを実行するコンピュータ上で実行するようにコンピュータ可読形式で記述されたコンピュータ・プログラムであって、
リアルタイムの同期処理が要求されるモジュール群を同じプロセス内に配置するとともに、非同期であることが許容されるが並列処理が要求される各モジュールをそれぞれ個別のプロセスに配置し、
少なくとも一部のプロセスでは、あるモジュールからの同期マルチキャスト通信の宛先となるモジュール間におけるメッセージ送受信関係に基づいて特定される処理順序関係に従って、該同期マルチキャスト通信の送信順序が決定されている、
ことを特徴とするコンピュータ・プログラム。
【請求項1】
リアルタイムの同期処理が要求されるモジュール群を、プログラムを実行する単位となる1つのプロセス内で実行する同期処理手段と、
非同期であることが許容されるが並列処理が要求される各モジュールをそれぞれ個別のプロセスに配置して並列して実行する並列処理手段と、
前記モジュール間でのデータの受け渡しをメッセージ・パッシングにより行なうモジュール間通信手段と、
を具備することを特徴とする情報処理システム。
【請求項2】
前記モジュール間通信手段は、プロセス毎に配置され、モジュール間でのメッセージの交換に介在するメッセージ・ブローカを備える、
ことを特徴とする請求項1に記載の情報処理システム。
【請求項3】
前記メッセージ・ブローカは、メッセージを初期表現から他の表現へ変換するシリアライズ並びにその逆変換となるデシリアライズを行なう機能を備えるが、受け取ったメッセージの送信元が同一プロセス内であるときはデシリアライズを省略するとともに、受け取ったメッセージの送信先が同一プロセス内のときにはシリアライズを省略する、
ことを特徴とする請求項2に記載の情報処理システム。
【請求項4】
各モジュールは、他のモジュールから受信したメッセージを一時的に保管するメッセージ・キューを装備し、メッセージの送信先となる場合において、送信元となるモジュールが同じプロセス内にないときには受信したメッセージを前記メッセージ・キューに一時保管するが、送信元となるモジュールが同じプロセス内にあるときには受信したメッセージの前記メッセージ・キューへの保管を省略する、
ことを特徴とする請求項1に記載の情報処理システム。
【請求項5】
プロセス内におけるモジュール間の処理順序依存性を取得する処理順序依存性取得手段と、
プロセス内のあるモジュールから他の複数のモジュール宛ての同期マルチキャスト通信を行なう際に、前記処理順序依存性に基づく順序に従って各送信先モジュールに対してメッセージ送信を行なう同期マルチキャスト通信手段と、
をさらに備えることを特徴とする請求項1に記載の情報処理システム。
【請求項6】
前記処理順序依存性取得手段は、同期マルチキャスト通信の送信先となるモジュール間におけるメッセージ送受信関係に基づいて、前記処理順序依存関係を取得する、
ことを特徴とする請求項5に記載の情報処理システム。
【請求項7】
前記処理順序依存性取得手段は、同期マルチキャスト通信の送信先となるモジュール間におけるメッセージ送受信関係においてメッセージ・パッシングの送信先にしかならないルート・モジュールからメッセージ・パッシングで繋がる順に基づいて前記処理順序依存関係を取得する、
ことを特徴とする請求項5に記載の情報処理システム。
【請求項8】
各モジュールは、送信メッセージの一覧を取得する関数及び受信メッセージの一覧を取得する関数を含み、
モジュール毎の前記の送信メッセージの一覧を取得する関数及び受信メッセージの一覧を基に各メッセージの送信モジュール及び受信モジュールに関するメッセージ送受信情報を収集する手段と、
各プロセスを実行するコンピュータ名と、プロセス内に配置されるモジュール並びに各モジュールのメッセージ処理タイミングを記述するとともに、処理順序依存性のあるメッセージを指定した構成ファイルをさらに備え、
前記処理順序依存性取得手段は、前記構成ファイル及び前記メッセージ送受信情報を用いて、前記処理順序依存関係を取得する、
ことを特徴とする請求項5に記載の情報処理システム。
【請求項9】
前記メッセージ・ブローカは、各モジュール内の前記送信メッセージの一覧を取得する関数及び受信メッセージの一覧を取得する関数を用いて、メッセージを扱う、
ことを特徴とする請求項8に記載の情報処理システム。
【請求項10】
少なくとも一部のモジュールは、他のモジュールから受信したメッセージを一時的に保管するメッセージ・キューを装備し、
前記メッセージ・ブローカは、前記構成ファイルに記述されている受信モジュールのメッセージ処理タイミングに応じて、メッセージを該受信モジュールのメッセージ・キューに保管するか否かを決定する、
ことを特徴とする請求項8に記載の情報処理システム。
【請求項11】
2以上のコンピュータを用いて構築され、
前記並列処理手段により非同期で実行されるモジュールのうちとりわけ並列性が要求されるモジュールの組み合わせに関しては、異なるコンピュータ上で実行されるプロセスに分散して配置する、
ことを特徴とする請求項1に記載の情報処理システム。
【請求項12】
リアルタイムの同期処理が要求されるモジュール群を、プログラムを実行する単位となる1つのプロセス内で実行する同期処理ステップと、
非同期であることが許容されるが並列処理が要求される各モジュールをそれぞれ個別のプロセスに配置して並列して実行する並列処理ステップと、
前記モジュール間でのデータの受け渡しをメッセージ・パッシングにより行なうモジュール間通信ステップと、
を具備することを特徴とする情報処理方法。
【請求項13】
関節動作に基づく運動を通じて外界に対するインタラクションを行なうロボットの制御システムであって、
リアルタイムの同期処理が要求される、運動制御を処理するためのモジュール群を、プログラムを実行する単位となる1つのプロセス内で実行する同期処理手段と、
非同期であることが許容されるが並列処理が要求される、前記運動制御以外の制御を処理するための各モジュールをそれぞれ個別のプロセスに配置して並列して実行する並列処理手段と、
前記モジュール間でのデータの受け渡しをメッセージ・パッシングにより行なうモジュール間通信手段と、
を具備することを特徴とするロボットの制御システム。
【請求項14】
関節動作に基づく運動を通じて外界に対するインタラクションを行なうロボットの制御方法であって、
リアルタイムの同期処理が要求される、運動制御を処理するためのモジュール群を、プログラムを実行する単位となる1つのプロセス内で実行する同期処理ステップと、
非同期であることが許容されるが並列処理が要求される、前記運動制御以外の制御を処理するための各モジュールをそれぞれ個別のプロセスに配置して並列して実行する並列処理ステップと、
前記モジュール間でのデータの受け渡しをメッセージ・パッシングにより行なうモジュール間通信ステップと、
を具備することを特徴とするロボットの制御方法。
【請求項15】
複数のモジュールからなりコンピュータ上で実行するようにコンピュータ可読形式で記述されたコンピュータ・プログラムであって、前記コンピュータを、
リアルタイムの同期処理が要求されるモジュール群を、プログラムを実行する単位となる1つのプロセス内で実行する同期処理手段と、
非同期であることが許容されるが並列処理が要求される各モジュールをそれぞれ個別のプロセスに配置して並列して実行する並列処理手段と、
前記モジュール間でのデータの受け渡しをメッセージ・パッシングにより行なうモジュール間通信手段と、
として機能させるためのコンピュータ・プログラム。
【請求項16】
複数のモジュールからなり、モジュール間の通信をメッセージ・パッシングにより行なうとともに、プロセスを単位としてコンピュータ・プログラムを実行するコンピュータ上で実行するようにコンピュータ可読形式で記述されたコンピュータ・プログラムであって、
リアルタイムの同期処理が要求されるモジュール群を同じプロセス内に配置するとともに、非同期であることが許容されるが並列処理が要求される各モジュールをそれぞれ個別のプロセスに配置し、
モジュール間でのメッセージの交換に介在し、メッセージを初期表現から他の表現へ変換するシリアライズ並びにその逆変換となるデシリアライズを行なう機能を備えるが、受け取ったメッセージの送信元が同一プロセス内であるときはデシリアライズを省略するとともに、受け取ったメッセージの送信先が同一プロセス内のときにはシリアライズを省略するメッセージ・ブローカを各プロセスに配置する、
ことを特徴とするコンピュータ・プログラム。
【請求項17】
複数のモジュールからなり、モジュール間の通信をメッセージ・パッシングにより行なうとともに、プロセスを単位としてコンピュータ・プログラムを実行するコンピュータ上で実行するようにコンピュータ可読形式で記述されたコンピュータ・プログラムであって、
リアルタイムの同期処理が要求されるモジュール群を同じプロセス内に配置するとともに、非同期であることが許容されるが並列処理が要求される各モジュールをそれぞれ個別のプロセスに配置し、
各モジュールは、他のモジュールから受信したメッセージを一時的に保管するメッセージ・キューを装備し、メッセージの送信先となる場合において、送信元となるモジュールが同じプロセス内にないときには受信したメッセージを前記メッセージ・キューに一時保管するが、送信元となるモジュールが同じプロセス内にあるときには受信したメッセージの前記メッセージ・キューへの保管を省略するように記述されている、
ことを特徴とするコンピュータ・プログラム。
【請求項18】
複数のモジュールからなり、モジュール間の通信をメッセージ・パッシングにより行なうとともに、プロセスを単位としてコンピュータ・プログラムを実行するコンピュータ上で実行するようにコンピュータ可読形式で記述されたコンピュータ・プログラムであって、
リアルタイムの同期処理が要求されるモジュール群を同じプロセス内に配置するとともに、非同期であることが許容されるが並列処理が要求される各モジュールをそれぞれ個別のプロセスに配置し、
少なくとも一部のプロセスでは、あるモジュールからの同期マルチキャスト通信の宛先となるモジュール間におけるメッセージ送受信関係に基づいて特定される処理順序関係に従って、該同期マルチキャスト通信の送信順序が決定されている、
ことを特徴とするコンピュータ・プログラム。
【図1】
【図2】
【図3】
【図4A】
【図4B】
【図5】
【図6】
【図7】
【図8】
【図9】
【図10】
【図11】
【図12】
【図13】
【図14】
【図15】
【図16】
【図17】
【図18】
【図19】
【図20】
【図2】
【図3】
【図4A】
【図4B】
【図5】
【図6】
【図7】
【図8】
【図9】
【図10】
【図11】
【図12】
【図13】
【図14】
【図15】
【図16】
【図17】
【図18】
【図19】
【図20】
【公開番号】特開2010−20650(P2010−20650A)
【公開日】平成22年1月28日(2010.1.28)
【国際特許分類】
【出願番号】特願2008−182132(P2008−182132)
【出願日】平成20年7月14日(2008.7.14)
【出願人】(000002185)ソニー株式会社 (34,172)
【Fターム(参考)】
【公開日】平成22年1月28日(2010.1.28)
【国際特許分類】
【出願日】平成20年7月14日(2008.7.14)
【出願人】(000002185)ソニー株式会社 (34,172)
【Fターム(参考)】
[ Back to top ]