(57)【要約】【課題】関節などの物理動作を制御する運動制御と、運動制御以外の制御とからなるロボットの制御を同一プラットフォーム上の分散システムとして構築する。【解決手段】リアルタイム性が要求される複数のモジュールを同一のプロセス内に配置するとともに、モジュール間でメッセージ・パッシングを行なう際に、メッセージ・データのシリアライズ及びデシリアライズが必要か否かを判断するメッセージ・ブローカを各プロセスに配設し、同一プロセス内でのメッセージ・パッシングを高速化し、さらにメッセージ・キューを利用しないメッセージ受信を行なうことでメッセージの同期処理が可能になる。【選択図】  図４Ｂ
2010020650.tif 000002
【特許請求の範囲】
【請求項１】
リアルタイムの同期処理が要求されるモジュール群を、プログラムを実行する単位となる１つのプロセス内で実行する同期処理手段と、
非同期であることが許容されるが並列処理が要求される各モジュールをそれぞれ個別のプロセスに配置して並列して実行する並列処理手段と、
前記モジュール間でのデータの受け渡しをメッセージ・パッシングにより行なうモジュール間通信手段と、
を具備することを特徴とする情報処理システム。
【請求項２】
前記モジュール間通信手段は、プロセス毎に配置され、モジュール間でのメッセージの交換に介在するメッセージ・ブローカを備える、
ことを特徴とする請求項１に記載の情報処理システム。
【請求項３】
前記メッセージ・ブローカは、メッセージを初期表現から他の表現へ変換するシリアライズ並びにその逆変換となるデシリアライズを行なう機能を備えるが、受け取ったメッセージの送信元が同一プロセス内であるときはデシリアライズを省略するとともに、受け取ったメッセージの送信先が同一プロセス内のときにはシリアライズを省略する、
ことを特徴とする請求項２に記載の情報処理システム。
【請求項４】
各モジュールは、他のモジュールから受信したメッセージを一時的に保管するメッセージ・キューを装備し、メッセージの送信先となる場合において、送信元となるモジュールが同じプロセス内にないときには受信したメッセージを前記メッセージ・キューに一時保管するが、送信元となるモジュールが同じプロセス内にあるときには受信したメッセージの前記メッセージ・キューへの保管を省略する、
ことを特徴とする請求項１に記載の情報処理システム。
【請求項５】
プロセス内におけるモジュール間の処理順序依存性を取得する処理順序依存性取得手段と、
プロセス内のあるモジュールから他の複数のモジュール宛ての同期マルチキャスト通信を行なう際に、前記処理順序依存性に基づく順序に従って各送信先モジュールに対してメッセージ送信を行なう同期マルチキャスト通信手段と、
をさらに備えることを特徴とする請求項１に記載の情報処理システム。
【請求項６】
前記処理順序依存性取得手段は、同期マルチキャスト通信の送信先となるモジュール間におけるメッセージ送受信関係に基づいて、前記処理順序依存関係を取得する、
ことを特徴とする請求項５に記載の情報処理システム。
【請求項７】
前記処理順序依存性取得手段は、同期マルチキャスト通信の送信先となるモジュール間におけるメッセージ送受信関係においてメッセージ・パッシングの送信先にしかならないルート・モジュールからメッセージ・パッシングで繋がる順に基づいて前記処理順序依存関係を取得する、
ことを特徴とする請求項５に記載の情報処理システム。
【請求項８】
各モジュールは、送信メッセージの一覧を取得する関数及び受信メッセージの一覧を取得する関数を含み、
モジュール毎の前記の送信メッセージの一覧を取得する関数及び受信メッセージの一覧を基に各メッセージの送信モジュール及び受信モジュールに関するメッセージ送受信情報を収集する手段と、
各プロセスを実行するコンピュータ名と、プロセス内に配置されるモジュール並びに各モジュールのメッセージ処理タイミングを記述するとともに、処理順序依存性のあるメッセージを指定した構成ファイルをさらに備え、
前記処理順序依存性取得手段は、前記構成ファイル及び前記メッセージ送受信情報を用いて、前記処理順序依存関係を取得する、
ことを特徴とする請求項５に記載の情報処理システム。
【請求項９】
前記メッセージ・ブローカは、各モジュール内の前記送信メッセージの一覧を取得する関数及び受信メッセージの一覧を取得する関数を用いて、メッセージを扱う、
ことを特徴とする請求項８に記載の情報処理システム。
【請求項１０】
少なくとも一部のモジュールは、他のモジュールから受信したメッセージを一時的に保管するメッセージ・キューを装備し、
前記メッセージ・ブローカは、前記構成ファイルに記述されている受信モジュールのメッセージ処理タイミングに応じて、メッセージを該受信モジュールのメッセージ・キューに保管するか否かを決定する、
ことを特徴とする請求項８に記載の情報処理システム。
【請求項１１】
２以上のコンピュータを用いて構築され、
前記並列処理手段により非同期で実行されるモジュールのうちとりわけ並列性が要求されるモジュールの組み合わせに関しては、異なるコンピュータ上で実行されるプロセスに分散して配置する、
ことを特徴とする請求項１に記載の情報処理システム。
【請求項１２】
リアルタイムの同期処理が要求されるモジュール群を、プログラムを実行する単位となる１つのプロセス内で実行する同期処理ステップと、
非同期であることが許容されるが並列処理が要求される各モジュールをそれぞれ個別のプロセスに配置して並列して実行する並列処理ステップと、
前記モジュール間でのデータの受け渡しをメッセージ・パッシングにより行なうモジュール間通信ステップと、
を具備することを特徴とする情報処理方法。
【請求項１３】
関節動作に基づく運動を通じて外界に対するインタラクションを行なうロボットの制御システムであって、
リアルタイムの同期処理が要求される、運動制御を処理するためのモジュール群を、プログラムを実行する単位となる１つのプロセス内で実行する同期処理手段と、
非同期であることが許容されるが並列処理が要求される、前記運動制御以外の制御を処理するための各モジュールをそれぞれ個別のプロセスに配置して並列して実行する並列処理手段と、
前記モジュール間でのデータの受け渡しをメッセージ・パッシングにより行なうモジュール間通信手段と、
を具備することを特徴とするロボットの制御システム。
【請求項１４】
関節動作に基づく運動を通じて外界に対するインタラクションを行なうロボットの制御方法であって、
リアルタイムの同期処理が要求される、運動制御を処理するためのモジュール群を、プログラムを実行する単位となる１つのプロセス内で実行する同期処理ステップと、
非同期であることが許容されるが並列処理が要求される、前記運動制御以外の制御を処理するための各モジュールをそれぞれ個別のプロセスに配置して並列して実行する並列処理ステップと、
前記モジュール間でのデータの受け渡しをメッセージ・パッシングにより行なうモジュール間通信ステップと、
を具備することを特徴とするロボットの制御方法。
【請求項１５】
複数のモジュールからなりコンピュータ上で実行するようにコンピュータ可読形式で記述されたコンピュータ・プログラムであって、前記コンピュータを、
リアルタイムの同期処理が要求されるモジュール群を、プログラムを実行する単位となる１つのプロセス内で実行する同期処理手段と、
非同期であることが許容されるが並列処理が要求される各モジュールをそれぞれ個別のプロセスに配置して並列して実行する並列処理手段と、
前記モジュール間でのデータの受け渡しをメッセージ・パッシングにより行なうモジュール間通信手段と、
として機能させるためのコンピュータ・プログラム。
【請求項１６】
複数のモジュールからなり、モジュール間の通信をメッセージ・パッシングにより行なうとともに、プロセスを単位としてコンピュータ・プログラムを実行するコンピュータ上で実行するようにコンピュータ可読形式で記述されたコンピュータ・プログラムであって、
リアルタイムの同期処理が要求されるモジュール群を同じプロセス内に配置するとともに、非同期であることが許容されるが並列処理が要求される各モジュールをそれぞれ個別のプロセスに配置し、
モジュール間でのメッセージの交換に介在し、メッセージを初期表現から他の表現へ変換するシリアライズ並びにその逆変換となるデシリアライズを行なう機能を備えるが、受け取ったメッセージの送信元が同一プロセス内であるときはデシリアライズを省略するとともに、受け取ったメッセージの送信先が同一プロセス内のときにはシリアライズを省略するメッセージ・ブローカを各プロセスに配置する、
ことを特徴とするコンピュータ・プログラム。
【請求項１７】
複数のモジュールからなり、モジュール間の通信をメッセージ・パッシングにより行なうとともに、プロセスを単位としてコンピュータ・プログラムを実行するコンピュータ上で実行するようにコンピュータ可読形式で記述されたコンピュータ・プログラムであって、
リアルタイムの同期処理が要求されるモジュール群を同じプロセス内に配置するとともに、非同期であることが許容されるが並列処理が要求される各モジュールをそれぞれ個別のプロセスに配置し、
各モジュールは、他のモジュールから受信したメッセージを一時的に保管するメッセージ・キューを装備し、メッセージの送信先となる場合において、送信元となるモジュールが同じプロセス内にないときには受信したメッセージを前記メッセージ・キューに一時保管するが、送信元となるモジュールが同じプロセス内にあるときには受信したメッセージの前記メッセージ・キューへの保管を省略するように記述されている、
ことを特徴とするコンピュータ・プログラム。
【請求項１８】
複数のモジュールからなり、モジュール間の通信をメッセージ・パッシングにより行なうとともに、プロセスを単位としてコンピュータ・プログラムを実行するコンピュータ上で実行するようにコンピュータ可読形式で記述されたコンピュータ・プログラムであって、
リアルタイムの同期処理が要求されるモジュール群を同じプロセス内に配置するとともに、非同期であることが許容されるが並列処理が要求される各モジュールをそれぞれ個別のプロセスに配置し、
少なくとも一部のプロセスでは、あるモジュールからの同期マルチキャスト通信の宛先となるモジュール間におけるメッセージ送受信関係に基づいて特定される処理順序関係に従って、該同期マルチキャスト通信の送信順序が決定されている、
ことを特徴とするコンピュータ・プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、モジュール化、並列化、再利用性の観点から分散処理を行なうように構築された情報処理システム及び情報処理方法、ロボットの制御システム及び制御方法、並びコンピュータ・プログラムに係り、例えば人や環境に対してインタラクションを行なうロボットの制御に適用される情報処理システム及び情報処理方法、ロボットの制御システム及び制御方法、並びコンピュータ・プログラムに関する。
【０００２】
さらに詳しくは、本発明は、関節などの物理動作を制御する運動制御と、運動制御以外の制御をともに行なうロボットの制御に適用することができる情報処理システム及び情報処理方法、ロボットの制御システム及び制御方法、並びコンピュータ・プログラムに係り、特に、運動制御において要求される同期リアルタイム性と非同期が許容される運動制御以外の制御において要求される処理の並列性を両立させた、情報処理システム及び情報処理方法、ロボットの制御システム及び制御方法、並びコンピュータ・プログラムに関する。
【背景技術】
【０００３】
ロボットは人的作業の代替手段など、さまざまな目的・用途で研究開発が行なわれてきた。最近では、人や環境に対して多用な物理的インタラクションを実現し、メンタル・アシストを行なうことへの要求も高まってきている。例えば、視覚や聴覚などの外部環境の認識結果や本能や感情などの内部状態などの状況を統合的に判断して行動を選択するロボットについて提案がなされている（例えば、特許文献１を参照のこと）。
【０００４】
本発明者らは、ロボットの制御体系として分散システムが適していると思料するが、これには幾つかの理由がある。
【０００５】
理由の１つとして、ロボットではさまざまなセンサ・デバイスを利用することが挙げられる。各センサ・デバイスが情報取得を行なう周期は区々であり、各々のタイミングで制御ソフトウェアへの割り込みを発生させる。割り込みが発生する度に制御が中断されると、制御性能に悪い影響を及ぼす事が懸念される。このような割り込みを効率よく処理するには、センサ・デバイス毎に処理ルーチンを組み、各処理ルーチンは非同期に実行することが望ましい。すなわち、非同期で動作する分散システムが適していると思料される。
【０００６】
また、他の大きな理由として、処理をモジュール化し、これに伴って処理の並列化や再利用性の向上を実現することが挙げられる。ロボットの制御を、運動制御、視覚認識、音声認識、行動計画など、独立性の高い複数の処理に分割することが可能であり、各処理のモジュール化を行ない易い。そして、処理内容によっては高負荷な演算コストを必要する場合もあることから、各モジュールを並列実行する要求が高い。例えば、それぞれ異なるタスクを実行する複数の行動モジュールで構成され、各行動モジュールは並列実行が可能であるとともに、優先度に応じて実行権をスイッチし且つタスク再開が可能となるロボットの行動制御システムについて提案がなされている（例えば、特許文献１を参照のこと）。
【０００７】
さらに、ソフトウェア全般に言えることではあるが、一度実装した処理のモジュールを他のロボットでも利用したいという再利用の要求もある。
【０００８】
このように、モジュール化、並列化、再利用性の観点から、ロボットの制御には分散システムが積極的に利用される。
【０００９】
また、ロボットの制御体系を、関節などの物理動作を制御する運動制御と、運動制御以外の制御に分類することもできる。
【００１０】
前者の運動制御では、時々刻々と変化する外部環境に対し適応的に動作する必要がある。このため、視覚・触覚・姿勢・関節角度など各種センサ情報をできる限り早く制御へフィードバックし、それらの情報を考慮した新たな制御値を与えなければならない。また、近年、位置制御だけでなく力制御、あるいは、位置制御と力制御のハイブリッド制御やインピーダンス制御など運動のための制御手法が多様化・高度化してきているが、これらの複雑な制御を安定に運用するためにはミリ秒オーダーの制御周期が要求される。万一、何らかの理由で制御周期が守れないと、ロボットは意図した運動ができなくなり、転倒や環境に危害を加えるといった致命的なダメージが生じる。つまり、ロボットの運動制御は、同期リアルタイム性が要求される制御システムであることが望ましい。
【００１１】
さらに付言するならば、運動制御の内容も複雑化の一途を辿っていることからも、分散システムであることが望ましい。さまざまな状況で動作を完遂させるためには、物体把持制御、歩行制御、転倒制御、外力適応制御といった複数の制御方法を用意し、状況を判断しながら自在に制御内容を切り替えたり組み合わせたりする必要がある。このような複雑な制御内容を記述するためには、制御内容毎に独立したモジュールとして実装する方法が有効である。つまり、運動制御の内部も分散システムとして構築することが望ましい。勿論、運動制御はミリ秒オーダー制御周期で動作する必要があり、リアルタイム・システムの要求を満たした分散システムでなければならない。
【００１２】
他方、運動制御以外の制御全般においては、視覚情報を用いた物体認識や行動認識、触覚情報を用いた環境物体の動作推定、音声認識、又はこれらの認識結果を用いた機械知能のための演算など、さまざまな処理が必要である。この種の処理には、一度に数１００ミリ秒から数秒程度の計算時間を要する場合があるが、通常は運動制御に要求されるようなリアルタイム性は不必要であることから、別のコンピュータ（若しくはプロセッサ）を利用して並列処理することが可能である。また、視覚・触覚・音声などの各認識処理は相互依存性が低く、それぞれが非同期に実行することが可能であることが多い。つまり、運動制御以外の制御は、非同期且つ並列の分散システムに適した処理であると言える。
【００１３】
要言すれば、ロボットの制御システムは分散システムが適しているが、運動制御のように同期リアルタイム性を満たした分散システムと、運動制御以外の制御において、非同期が許容されつつ並列実行することが要求される分散システムという２通りのシステム要求がある。
【００１４】
ここで、当業界で一般に知られている分散システム、並びにリアルタイム・システムについて幾つかを紹介しておく。
【００１５】
複数のプロセッサからなる分散システムのアーキテクチャを密結合型と疎結合型に大別することができる。前者の密結合型アーキテクチャでは共有メモリを用いたプロセス間通信が可能であるのに対し、後者の疎結合型アーキテクチャではメッセージ交換型すなわちメッセージ・パッシングが主に利用される。共有メモリを用いた密結合型アーキテクチャはプログラミングが容易であるのに対し、疎結合型アーキテクチャは、ハードウェアの実現の容易さとスケーラビリティの観点から有利である。ＭＰＩ（Ｍｅｓｓａｇｅ−Ｐａｓｓｉｎｇ  Ｉｎｔｅｒｆａｃｅ）は、メッセージ・パッシングのための代表的なライブラリであり、さまざまな要求に応えるため、多くの関数（インターフェース）が用意されている。ＭＰＩは、分散メモリ型の並列コンピュータ（若しくはプロセッサ）を前提とし、並列に接続されたコンピュータ間をメッセージ・パッシングによって通信するための規格である（言い換えれば、直接的な関数呼び出しを行なうものではない）。コンピュータ間でメッセージ・パッシングするためには各コンピュータにメッセージ・キューを装備することが不可欠である。このメッセージ・キューを使うことで、コンピュータ間の通信が非同期になることは免れない。言い換えれば、ＭＰＩでは、コンピュータ間の通信が非同期になるため、ミリ秒オーダーのリアルタイム・システムを要求するアプリケーションには適用が困難である。
【００１６】
また、分散オブジェクト技術を実現するアーキテクチャとして代表的なものに、ＣＯＲＢＡ（Ｃｏｍｍｏｎ  Ｏｂｊｅｃｔ  Ｒｅｑｕｅｓｔ  Ｂｒｏｋｅｒ  Ａｒｃｈｉｔｅｃｔｕｒｅ）が挙げられ、ネットワーク接続された複数のコンピュータを一度に動かすために利用することができる。ＣＯＲＢＡによるオブジェクト機能呼び出しは、通常は同期的に処理されるが、アーキテクチャ構造上、オブジェクト機能を呼び出す毎にシリアライゼーションとネットワーク通信が発生し、通常一度の呼び出しで数ミリ秒以上の時間コストが必要となる（ネットワーク接続されたコンピュータ間で言語を超えた通信を行なう際、送信元では、送信先に適合するよう、データを冗長化したシリアライゼーションを行なう）。このため、ＣＯＲＢＡは、ミリ秒オーダーのリアルタイム・システムを要求するアプリケーションには適用が困難である。また、非同期処理を利用した場合には、指定時間内にシステムに課せられた処理を終えることが保障されないため、リアルタイム・システムの要求を満たさないことは明白である。（初期表現から他の何らかの表現への変換をシリアライゼーションと呼び、その後の初期表現への逆変換のことをデシリアライゼーションと呼ぶ。シリアライズは、具体的には、オブジェクトの状態を表す変数（フィールド）、さらにはオブジェクトの種類（クラス）を表す何らかの識別子を、ファイル化できるようなバイト列やＸＭＬフォーマットの形に書き出す直列化に相当し、デシリアライズは、その逆の直列化復元に相当する。）
【００１７】
また、リアルタイム・システムの機能要求を満たす機構として、ＶｘＷｏｒｋｓやＯＮＸに代表されるようなＲＴＯＳ（Ｒｅａｌ  Ｔｉｍｅ  Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍ）が挙げられる。ＲＴＯＳを用いると、ミリ秒オーダーのリアルタイム・システムを要求するアプリケーションの実現が可能である。しかし、ＲＴＯＳでは、リアルタイム性を要求する処理と、数１００ミリ秒から数秒オーダーの処理時間を要求する非同期処理とを並列実行するための仕組みを持たない。並列処理を実現するには、複数のコンピュータによる並列実行が必要となる。これに対し、ＲＴＯＳでは、リアルタイム・システムに特化した機構になっており、通常は１つのコンピュータ内での処理だけ想定して設計されている。ＲＴＯＳでコンピュータ間の通信による並列実行を実現するには、コンピュータ間の通信規約を定める、あるいは利用する必要があると思料される。このようなことから、リアルタイム処理と別のコンピュータを利用した非同期処理とを同時に実現するには、実装に多くの負担が生じる。
【００１８】
既に述べたように、ロボットの制御全体を考慮すると、分散システムで構築することが好ましい。また、分散システムの技術自体は、情報処理の分野において古くから研究開発がなされている。
【００１９】
例えば、ロボット・アームの制御に適用した分散処理システムについて提案がなされている（例えば、特許文献２を参照のこと）。
【００２０】
ところが、視覚認識や音声認識などのようにリアルタイム性を問わず複数のコンピュータ（プロセッサ）を利用して非同期であっても並列処理を行ないたいという要求と、運動制御のように同期しながらリアルタイムに処理を行ないたい要求の双方を両立させた単一のシステムとして構築した分散システムは皆無に等しい。
【００２１】
【特許文献１】特許第３５５８２２２号公報
【特許文献２】特開２００２−３４２３００号公報
【発明の開示】
【発明が解決しようとする課題】
【００２２】
本発明の目的は、例えば人や環境に対してインタラクションを行なうロボットの制御に好適に適用することができる、優れた情報処理システム及び情報処理方法、ロボットの制御システム及び制御方法、並びコンピュータ・プログラムを提供することにある。
【００２３】
本発明のさらなる目的は、関節などの物理動作を制御する運動制御と、運動制御以外の制御をともに行なうロボットの制御に好適に適用することができる、優れた情報処理システム及び情報処理方法、ロボットの制御システム及び制御方法、並びコンピュータ・プログラムを提供することにある。
【００２４】
本発明のさらなる目的は、運動制御において要求される同期リアルタイム性と非同期が許容される運動制御以外の制御において要求される処理の並列性を両立させることができる、優れた情報処理システム及び情報処理方法、ロボットの制御システム及び制御方法、並びコンピュータ・プログラムを提供することにある。
【課題を解決するための手段】
【００２５】
本発明は、上記課題を参酌してなされたものであり、その第１の側面は、
リアルタイムの同期処理が要求されるモジュール群を、プログラムを実行する単位となる１つのプロセス内で実行する同期処理手段と、
非同期であることが許容されるが並列処理が要求される各モジュールをそれぞれ個別のプロセスに配置して並列して実行する並列処理手段と、
前記モジュール間でのデータの受け渡しをメッセージ・パッシングにより行なうモジュール間通信手段と、
を具備することを特徴とする情報処理システムである。
【００２６】
但し、ここで言う「システム」とは、複数の装置（又は特定の機能を実現する機能モジュール）が論理的に集合した物のことを言い、各装置や機能モジュールが単一の筐体内にあるか否かは特に問わない。
【００２７】
例えばロボットの制御全体を考慮すると、モジュール化、並列化、再利用性の観点から分散システムで構築することが好ましい。ロボットの制御は、各モジュールが同期しながらリアルタイム処理を行なうことが要求される運動制御と、視覚認識や音声認識のように非同期であることが許容されつつも各モジュールを並列処理することが要求される運動制御以外の制御に分けることができるが、同期リアルタイム処理と非同期・並列処理の双方を両立させた単一のシステムとして構築した分散システムは皆無に等しい。
【００２８】
コンピュータにおけるプログラムの実行単位を「プロセス」と呼ぶと、並列処理されるプロセス間でのメッセージ・パッシングは、メッセージ・データのシリアライズ及びデシリアライズの処理が介在することから、非同期となってしまう（前述）。各プロセスが同一のコンピュータ、あるいは異なるコンピュータで実行される場合も同様である。他方、同一プロセス内でのメッセージ・パッシングは、シリアライズ及びデシリアライズが不要であることから、リアルタイム性を失うことはない。
【００２９】
ロボットの制御システムは、メッセージ・パッシングによるモジュール間通信を用いた分散システムとして構築することが好ましい。本発明では、リアルタイム性が要求される複数のモジュールを同一のプロセス内に配置するとともに、モジュール間でのメッセージ交換に介在するメッセージ・ブローカをプロセス毎に配設している。
【００３０】
このメッセージ・ブローカは、モジュール間でメッセージ・パッシングを行なう際に、メッセージ・データのシリアライズ及びデシリアライズが必要か否か、並びにメッセージをメッセージ・キューに一時保管する必要があるか否かを判断する。これによって、同一プロセス内でのメッセージ・パッシングは、シリアライズ及びデシリアライズ処理は介在しなくなることから高速化する。プロセスをまたいだメッセージ・パッシングは分散メモリ型の並列処理として扱われるが、プロセス内のメッセージ・パッシングは共有メモリ型並列処理として扱われることから、メッセージ・データのシリアライズ及びデシリアライズを省略することが可能である。
【００３１】
また、個々のモジュールは、他のモジュールから受信したメッセージを一時的に保管するメッセージ・キューを装備しているが、メッセージの送信元モジュールがどのプロセスに存在するかに応じて、受信したメッセージをメッセージ・キューに保管すべきかどうかを適応的に決定するようにしている。具体的には、モジュールは、自身がメッセージの送信先となる場合において、送信元となるモジュールが同じプロセス内にないときには、受信したメッセージをメッセージ・キューに一時保管することで、送信元モジュールと送信先モジュールの実行を切り離すことができ、非同期分散処理が可能になる。これに対し、メッセージ送信先のモジュールが同じプロセス内にあるときには、モジュールは受信したメッセージ・キューを利用しないようにする。この結果、関数呼び出しと同等の処理負荷でのメッセージ・パッシングが可能となり、同一プロセス内のモジュール間においてメッセージの同期処理が可能になる。
【００３２】
各モジュールは、送信メッセージの一覧を取得する関数及び受信メッセージの一覧を取得する関数を含むものとし、モジュール毎の前記の送信メッセージの一覧を取得する関数及び受信メッセージの一覧を基に各メッセージの送信モジュール及び受信モジュールに関するメッセージ送受信情報を収集することができる。また、システム内では、各プロセスを実行するコンピュータ名と、プロセス内に配置されるモジュール並びに各モジュールのメッセージ処理タイミングを記述するとともに、処理順序依存性のあるメッセージを指定した構成ファイルが管理されている。そして、構成ファイル及びメッセージ送受信情報を用いて、処理順序依存関係を取得することができる。また、メッセージ・ブローカは、各モジュール内の送信メッセージの一覧を取得する関数及び受信メッセージの一覧を取得する関数を用いて、メッセージを適切に扱うことができる。また、受信モジュール側でモジュールを受信する際には、構成ファイルに記述されている受信モジュールのメッセージ処理タイミングに応じて、メッセージを該受信モジュールのメッセージ・キューに保管するか否かを決定することができる。
【００３３】
本発明の第１の側面に係る情報処理システムは、２以上のコンピュータ（若しくはプロセッサ）を用いて構築することができる。異なるコンピュータ（若しくはプロセッサ）間では処理の並列性を充分確保することができる（周知）。したがって、並列処理手段により非同期で実行されるモジュールのうちとりわけ並列性が要求されるモジュールの組み合わせに関しては、異なるコンピュータ上で実行されるプロセスに分散して配置することで、確実に並列処理を実現することができる。
【００３４】
したがって、本発明によれば、非同期・並列処理と同期リアルタイム処理の要求を満たした分散システムを同一のプラットフォーム上で構築することができる。
【００３５】
ロボットの運動制御のように周期的に処理が行なわれる場合、通常、割り込み処理が利用される（例えば、ロボットの各部位に配設されたセンサ・デバイスは、情報取得を行なうと、制御ソフトウェアへの割り込みを発生させる）。運動制御プログラムが、一連の周期的な処理を複数のモジュールに分割して実装され、各モジュールが協調して動作する構造になっている場合、各モジュールに割り込みを発生させれば良いが、このとき、モジュール間で処理の順序依存性の問題が発生する。例えば、運動制御プログラム内で、手の関節角度制御と手を用いた物体把持制御がそれぞれ独立した制御モジュールとして実装されている場合、先に関節角度制御モジュールに割り込みが発生して関節角度指令を発すると、物体把持制御のための関節角度指令がその制御周期では反映されなくなる。
【００３６】
これに対し、本発明に係るロボット制御システムは、メッセージ・パッシングによるモジュール間通信を用いた分散システムとして構築されるが（前述）、モジュール間における処理順序依存性を、モジュール間で発生するメッセージの送受信関係に基づいて判断するようにしている。
【００３７】
例えば、関節角度制御と物体把持制御が別々のモジュールに実装され、同じプロセス内に配置することで、両モジュール間でメッセージの同期処理が可能となる。また、物体把持制御のための関節角度指令はメッセージ・パッシングによって関節角度制御モジュールへ通知される。つまり、関節角度制御モジュールと物体把持制御モジュールの間での処理の順序性依存は、これらのモジュール間で発生するメッセージの送受信関係から判断することが可能である。具体的には、同期マルチキャスト通信の送信先となるモジュール間におけるメッセージ送受信関係においてメッセージ・パッシングの送信先にしかならないルート・モジュールをまず抽出し、各ルート・モジュールからメッセージ・パッシングで繋がる順に従って処理の順序依存性を把握することができる。
【００３８】
したがって、本発明に係るロボット制御システムでは、処理順序の依存性が問題となるモジュール群に対しては、メッセージの送受信関係に基づいて割り込み順序を決定するというアルゴリズムを提供することによって、（人間（例えば、オペレータ）が判断する必要なく）自動的に適切な順序で各モジュールに割り込みを発生させることができる。
【００３９】
また、本発明の第２の側面は、複数のモジュールからなりコンピュータ上で実行するようにコンピュータ可読形式で記述されたコンピュータ・プログラムであって、前記コンピュータを、
リアルタイムの同期処理が要求されるモジュール群を、プログラムを実行する単位となる１つのプロセス内で実行する同期処理手段と、
非同期であることが許容されるが並列処理が要求される各モジュールをそれぞれ個別のプロセスに配置して並列して実行する並列処理手段と、
前記モジュール間でのデータの受け渡しをメッセージ・パッシングにより行なうモジュール間通信手段と、
として機能させるためのコンピュータ・プログラムである。
【００４０】
本発明の第２の側面に係るコンピュータ・プログラムは、コンピュータ上で所定の処理を実現するようにコンピュータ可読形式で記述されたコンピュータ・プログラムを定義したものである。換言すれば、本発明の第２の側面に係るコンピュータ・プログラムをコンピュータにインストールすることによって、コンピュータ上では協働的作用が発揮され、本発明の第１の側面に係る情報処理システムと同様の作用効果を得ることができる。
【発明の効果】
【００４１】
本発明によれば、例えば人や環境に対してインタラクションを行なうロボットの制御に好適に適用することができる、優れた情報処理システム及び情報処理方法、ロボットの制御システム及び制御方法、並びコンピュータ・プログラムを提供することができる。
【００４２】
また、本発明によれば、関節などの物理動作を制御する運動制御と、運動制御以外の制御をともに行なうロボットの制御に好適に適用することができる、優れた情報処理システム及び情報処理方法、ロボットの制御システム及び制御方法、並びコンピュータ・プログラムを提供することができる。
【００４３】
また、本発明によれば、運動制御において要求される同期リアルタイム性と非同期が許容される運動制御以外の制御において要求される処理の並列性を両立させることができる、優れた情報処理システム及び情報処理方法、ロボットの制御システム及び制御方法、並びコンピュータ・プログラムを提供することができる。
【００４４】
本発明によれば、リアルタイム・システムが要求される運動制御のような機能であってもその内部をモジュール化することが可能で、且つ、物体認識や知能機械といった機能をモジュール化して並列分散処理が可能になる。その結果、すべてのモジュールがシームレスに接続でき、アプリケーション全体で一貫性のあるシステム構成が実現できるようになる。人や環境に対してインタラクションを行なうロボットなどでは複雑な機能構成を持つが、本発明を適用することで上記の効果を得ることができる。
【００４５】
また、本発明によれば、同期マルチキャスト・メッセージ通信において、自動的に処理順序依存性の問題を解決することができる。運動制御を複数のモジュールに分割して構成すると、モジュール間で処理の順序依存性を持つことがあるが、処理順序依存性を解決することで、制御システムは破綻することなく稼動することができる。
【００４６】
本発明のさらに他の目的、特徴や利点は、後述する本発明の実施形態や添付する図面に基づくより詳細な説明によって明らかになるであろう。
【発明を実施するための最良の形態】
【００４７】
以下、図面を参照しながら本発明の実施形態について詳解する。
【００４８】
Ａ．ロボット装置並びにその制御体系
図１には、本発明に係る分散処理システムを適用して制御を実現することができるロボット装置の構成例を示している。図示のロボット装置１は、全体の動作の統括的制御やその他のデータ処理を行なう制御ユニット２０と、入出力部４０と、駆動部５０と、電源部６０で構成される。
【００４９】
入出力部４０は、入力部としてロボット装置１の目に相当するＣＣＤカメラ１５や、耳に相当するマイクロフォン１６、頭部や背中などの部位に配設されてユーザの接触を感知するタッチ・センサ１８、あるいは五感に相当するその他の各種のセンサを含む。また、出力部として、口に相当するスピーカ１７、あるいは点滅の組み合わせや点灯のタイミングにより顔の表情を形成するＬＥＤインジケータ（目ランプ）１９などを装備している。これら出力部は、音声やランプの点滅など、脚などによる機械運動パターン以外の形式でもロボット装置１からのユーザ・フィードバックを表現することができる。
【００５０】
駆動部５０は、制御部２０が指令する所定の運動パターンに従ってロボット装置１の機体動作を実現する機能ブロックであり、行動制御による制御対象である。駆動部５０は、それぞれの関節におけるロール、ピッチ、ヨーなど軸毎に設けられた複数の駆動ユニットで構成され、ロボット装置１の各関節における自由度を実現する。各駆動ユニットは、所定軸回りの回転動作を行なうモータ５１と、モータ５１の回転位置を検出するエンコーダ５２と、エンコーダ５２の出力に基づいてモータ５１の回転位置や回転速度を適応的に制御するドライバ５３の組み合わせで構成される。駆動ユニットの組み合わせ方によって、ロボット装置１を例えば２足歩行又は４足歩行などの脚式移動ロボットとして構成することができる。
【００５１】
電源部６０は、ロボット装置１内の各電気回路などに対して給電を行なう。ロボット装置１は、バッテリを用いた自律駆動式であり、電源部６０は、充電バッテリ６１と、充電バッテリ６１の充放電状態を管理する充放電制御部６２とで構成される。
【００５２】
制御ユニット２０は、「頭脳」に相当し、例えばロボット装置１の機体頭部あるいは胴体部に搭載されている。
【００５３】
図２には、制御ユニット２０の構成をさらに詳細に図解している。同図に示すように、制御ユニット２０は、メイン・コントローラとしてのＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）２１が、メモリやその他の各回路コンポーネントや周辺機器とバス接続された構成である。
【００５４】
ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）２２は、ＤＲＡＭ（Ｄｙｎａｍｉｃ  ＲＡＭ）などの揮発性メモリで構成された書き込み可能メモリであり、ＣＰＵ２１が実行するプログラム・コードをロードしたり、実行プログラムによる作業データの一時的な保存したりために使用される。また、ＲＯＭ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）２３は、制御プログラムやデータを恒久的に格納する読み出し専用メモリである。ここで、ロボット装置１の制御プログラムには、カメラ１５やマイクロフォン１６などのセンサ入力を処理してシンボルとして認識する「センサ入力・認識処理プログラム」や、短期記憶や長期記憶などの記憶動作（後述）を司りながらセンサ入力と所定の行動制御モデルとに基づいてロボット装置１の行動を制御する「行動制御プログラム」、行動制御モデルに従って各関節モータの駆動やスピーカ１７の音声出力などを制御する「駆動制御プログラム」などが含まれる。
【００５５】
不揮発性メモリ２４は、例えばＥＥＰＲＯＭ（Ｅｌｅｃｔｒｉｃａｌｌｙ  Ｅｒａｓａｂｌｅ  ａｎｄ  Ｐｒｏｇｒａｍｍａｂｌｅ  ＲＯＭ）のように電気的に消去再書き込みが可能なメモリ素子で構成され、逐次更新すべきデータを不揮発的に保持するために使用される。逐次更新すべきデータには、暗号鍵やその他のセキュリティ情報、出荷後にインストールすべき装置制御プログラムなどが挙げられる。
【００５６】
インターフェース２５は、制御ユニット２０外の機器と相互接続し、データ交換を可能にするための装置である。インターフェース２５は、例えば、カメラ１５やマイクロフォン１６、スピーカ１７との間でデータ入出力を行なう。また、インターフェース２５は、駆動部５０内の各ドライバ５３−１…との間でデータやコマンドの入出力を行なう。
【００５７】
また、インターフェース２５は、ＲＳ−２３２Ｃなどのシリアル・インターフェース、ＩＥＥＥ１２８４などのパラレル・インターフェース、ＵＳＢインターフェース、ｉ−Ｌｉｎｋ（ＩＥＥＥ１３９４）インターフェース、ＳＣＳＩインターフェース、ＰＣカードやメモリ・スティックを受容するメモリ・カード・インターフェース（カード・スロット）などのような、コンピュータの周辺機器接続用の汎用インターフェースを備え、ローカル接続された外部機器との間でプログラムやデータの移動を行なうようにしてもよい。また、インターフェース２５の他の例として、赤外線通信（ＩｒＤＡ）インターフェースを備え、外部機器と無線通信を行なうようにしてもよい。
【００５８】
さらに、制御ユニット２０は、無線通信インターフェース２６やネットワーク・インターフェース・カード（ＮＩＣ）２７などを含み、Ｂｌｕｅｔｏｏｔｈ（登録商標）通信のような近接無線データ通信や、ＩＥＥＥ８０２．１１のような無線ＬＡＮ、さらにはインターネットなどの広域ネットワークを経由して、外部のさまざまなホスト・コンピュータとデータ通信を行なうことができる。
ロボット装置１とホスト・コンピュータ間におけるデータ通信により、遠隔のコンピュータ資源を用いて、ロボット装置１の複雑な動作制御を演算したり、リモート・コントロールしたりすることができる。
【００５９】
ロボット装置１の行動制御システムは、いわゆるオブジェクト指向（Ｏｂｊｅｃｔ Ｏｒｉｅｎｔｅｄ）技術を採り入れて実装される。オブジェクト指向によれば、ソフトウェアの開発と保守が効率化する。オブジェクト指向に基づくソフトウェアは、基本的に、データとそのデータに対する処理手続きとを一体化させた「オブジェクト」というモジュール単位で扱われる。また、必要に応じて複数のオブジェクトを作成し、これら組み合わせることで１つのソフトウェアが完成する。
【００６０】
なお、オブジェクト指向パラダイムは、「カプセル化」、「クラス／インスタンス」、「クラス継承（インヘリタンス）」、及び、「メッセージ・パッシング」という主要な基本技術によって実現される。カプセル化は、データと手続き（メソッド）を一体化させることを指す。クラスは、複数のオブジェクトを共通化して定義することを指す。インスタンスはクラスに属するオブジェクトの実体を表す（同一クラスに属するオブジェクトすなわちインスタンスは基本的に同一のメソッドを有するので、個々にメソッドを定義する必要がない）。インヘリタンスとは、あるクラスで定義したことを別の（例えば下位の）クラスが継承することを意味する（新たにクラスを定義するときには、定義済みのクラスとの差分のみを追加変更するだけでよい）。メッセージ・パッシングとは、オブジェクトにメッセージを送って所定の動作を指示することを言う。各オブジェクトは自身のデータを隠蔽しているので、通常、メッセージ・パッシング以外の方法でオブジェクトにアクセスすることはできない。
【００６１】
また、後述するが、ロボット１の行動制御システムは、オブジェクト指向（前述）により実装された複数のモジュールで構成される。オブジェクト指向技術により実装されたモジュールのことを「スキーマ（ｓｃｈｅｍａ）」とも呼び、多数のスキーマをツリー状に階層化することで行動制御システムが構築される。
【００６２】
Ｂ．分散システムの構築
［背景技術］の欄でも述べたように、ロボットの制御は、各モジュールが同期しながらリアルタイム処理を行なうことが要求される運動制御と、視覚認識や音声認識のように非同期であることが許容されつつも各モジュールを並列処理することが要求される運動制御以外の制御に分けることができる。本実施形態に係る行動制御システムは、モジュール化、並列化、再利用性の観点から分散システムで構築されるが、同期リアルタイム処理と非同期・並列処理の双方を両立させた単一のシステムである点に主な特徴がある。かかる分散システムにおいては、リアルタイムの同期処理が要求されるモジュール間のメッセージ・パッシングと、割り込み処理が発生した際などプロセス内で同期マルチキャスト通信を行なう場合のモジュール間での処理の順序依存性が問題となる。以下では、これらの点について詳解する。
【００６３】
Ｂ−１．メッセージ・パッシングによるモジュール間通信
メッセージ・パッシングによるモジュール間通信の仕組みについて、図３を参照しながら説明する。
【００６４】
同図において、モジュールはオブジェクト指向（前述）により実装されたソフトウェア・オブジェクトであり、インスタンスの生成単位である（インスタンスはクラスに属するオブジェクトの実体を表す）。
【００６５】
プロセスは、コンピュータがプログラムを実行する単位である。本実施形態では、１つのプロセス内に複数のモジュールを配置することが許容されている。また、図示のように、プロセス内、プロセス間、さらにはコンピュータ間にまたがってモジュールを配置することができる。
【００６６】
プロセス内、プロセス間、コンピュータ間のいずれにおいてもモジュール間通信は可能であるが、各モジュールへはメッセージ・パッシングによる方法によってのみアクセスが可能である。メッセージ・パッシングとは、オブジェクトにメッセージを送って所定の動作を指示することに相当する。
【００６７】
メッセージ・パッシングには、１対１のモジュール間で通信するユニキャストや、１対複数のモジュール間で通信するマルチキャストがある。図３中の曲線は、メッセージ・パッシングの経路（モジュール間のメッセージ送受信関係）を示している。
【００６８】
プロセスをまたいだメッセージ・パッシングは、分散メモリ型の並列処理として扱われ、プロセス境界においてメッセージ・データのシリアライズ及びデシリアライズが行なわれる。他方、プロセス内のメッセージ・パッシングは、いわゆる共有メモリ型並列処理として扱われ、メッセージ・データのシリアライズ及びデシリアライズは省略される。
【００６９】
また、各モジュールは、他のモジュールから受信したメッセージを一時的に保管するメッセージ・キューを装備している。通常、メッセージ・キューに保管されたメッセージは、何らかのタイミングでメッセージ・キューから取り出され、モジュールによる処理が行なわれる。ここで言う何らかのタイミングとして、プロセッサのスケジューリングによってモジュールに実行権が与えられたときや、周期的な割り込みイベントが発生したときなどが挙げられる。モジュールは、受信したメッセージを、メッセージに一度も保管することなく、直接処理することも可能である。
【００７０】
分散システムが２以上のコンピュータ（若しくはプロセッサ）を用いて構築される場合、異なるコンピュータ（若しくはプロセッサ）間では処理の並列性を充分確保することができる（周知）。非同期処理が許容されるモジュールの組み合わせのうちとりわけ並列実行が要求されるものに関しては、各モジュールを異なるコンピュータ（若しくはプロセッサ）に分散して配置することで、確実に並列処理を実現することができる。
【００７１】
Ｂ−２．メッセージ・ブローカを介したメッセージ・パッシングの高速化
本実施形態に係る分散システムでは、同一のプロセス内のモジュール間でメッセージ・パッシングを行なう際に、シリアライズ及びデシリアライズという処理時間を要する処理を省略することで、高速通信を実現する。
【００７２】
Ｂ−２−１．メッセージ・ブローカ
メッセージ・パッシングを行なう際にメッセージ・データのシリアライズ及びデシリアライズが必要か否かを判断するメッセージ・ブローカを各プロセス内に配置している。
【００７３】
例えば、図４Ａに示したようなモジュール構成からなる分散システムの各プロセス内にメッセージ・ブローカを配置すると、図４Ｂのようになる。図示のように、プロセス内及びプロセス間で行なわれるモジュール間通信は、必ずメッセージ・ブローカが介在したメッセージ・パッシングにより行なわれる。
【００７４】
Ｂ−２−２．メッセージ・ブローカによるシリアライズ及びデシリアライズ
シリアライズは、具体的には、オブジェクトの状態を表す変数（フィールド）、さらにはオブジェクトの種類（クラス）を表す何らかの識別子を、ファイル化できるようなバイト列やＸＭＬフォーマットの形に書き出す直列化に相当し、デシリアライズは、その逆の直列化復元に相当する。プロセス内のメッセージ・パッシングは共有メモリ型並列処理として扱われることから、メッセージ・データのシリアライズ及びデシリアライズを省略することが可能である。
【００７５】
既に説明したように、すべてのメッセージはメッセージ・ブローカを介してパッシングされる。メッセージ・ブローカは、プロセス内外のいずれから受け取ったメッセージ・データであるのか、あるいはプロセス内外のいずれに送り出すメッセージ・データであるのかに応じて、シリアライズ又はデシリアライズを行なう必要があるかどうかを判断する。かかる判断を行なうためには、メッセージ・ブローカが該当メッセージの送受信関係（送信モジュールと受信モジュールの関係）を把握する必要がある。
【００７６】
送受信関係を把握する方法としては、メッセージ自体にメッセージの送信元及び送信先のモジュールに関する情報を埋め込む方法や、システム開始時にメッセージの送受信関係をメッセージ・ブローカがあらかじめ取得しておく方法など、幾つか考えられる。本発明の要旨は特定の方法に限定されないので、ここでは送受信関係を把握する具体的な方法についての詳細な説明を省略する。
【００７７】
図５には、メッセージが送られてきたときにメッセージ・ブローカが実行する処理手順をフローチャートの形式で示している。
【００７８】
メッセージ・ブローカは、メッセージを受け取ると、その送信元がプロセス内のモジュールか否かをチェックする（ステップＳ１）。ここで、送信元モジュールがプロセス外である場合には（ステップＳ１のＮｏ）、当該メッセージ・データは送信元モジュールが配置されたプロセスのメッセージ・ブローカによってシリアライズされていることになるので、当該メッセージ・ブローカは、メッセージ・データのデシリアライズを実行する（ステップＳ２）。
【００７９】
次いで、メッセージ・ブローカは、受け取ったメッセージの送信先があるか否かをチェックする（ステップＳ３）。送信先がない場合（指定されているすべての送信先へのパッシングが終了したとき）には（ステップＳ３のＮｏ）、当該処理ルーチンを終了する。
【００８０】
一方、メッセージの送信先がある場合には（ステップＳ３のＹｅｓ）、メッセージ・ブローカは、続いて当該送信先モジュールがプロセス内か否かをチェックする（ステップＳ４）。
【００８１】
ここで、送信先モジュールがプロセス外のときには（ステップＳ４のＮｏ）、メッセージ・ブローカは、メッセージ・データのシリアライズを行なってから（ステップＳ５）、送信先モジュールの存在するプロセスへメッセージ・データを送信する（ステップＳ７）。
【００８２】
また、送信先モジュールがプロセス内のときには（ステップＳ４のＹｅｓ）、メッセージ・ブローカは、メッセージ・データのシリアライズを省略して、当該メッセージをそのまま送信先モジュールへ届ける（ステップＳ６）。
【００８３】
このようにして、メッセージ・データの送信を終えると、メッセージ・ブローカは、次の送信先メッセージを取り出して（ステップＳ８）、ステップＳ３に戻り、上記と同様の処理を繰り返し実行する。  
【００８４】
Ｂ−３．メッセージ・キューを利用しないメッセージ受信によるメッセージ・パッシングの高速化
各モジュールは、他のモジュールから届いたメッセージを一時的に保管するためのメッセージ・キューを備えている。本実施形態に係る分散システムでは、メッセージ・パッシングを高速化するためのその他の方法として、メッセージ・キューを利用しないメッセージ受信を行なうようにしている。
【００８５】
すなわち、メッセージ・パッシングの際に、メッセージ・キューの利用の有無を選択する仕組みを導入する。メッセージ・キューを利用しない場合には、送信元モジュールから発行されたメッセージが送信先モジュールで即時処理される。送信元と送信先のモジュールが同一プロセス内にあるときには、メッセージ・キューを利用しないことで、関数呼び出しと同等の処理負荷でのメッセージ・パッシングが可能となり、同一プロセス内のモジュール間においてメッセージの同期処理が可能になる。
【００８６】
Ｂ−３−１．メッセージ・キューを利用したメッセージ・パッシング
まず、メッセージ・キューを利用したメッセージ・パッシングについて説明する。送信先モジュールが受信したメッセージはメッセージ・キューに一時保存される。メッセージ・キューに一時保存することで、送信元モジュールと送信先モジュールの実行を切り離すことができ、非同期分散処理が可能になる。
【００８７】
図６には、メッセージ・キューを利用した場合のメッセージ・パッシングの処理手順をフローチャートの形式で示している。
【００８８】
まず、送信元モジュールがメッセージを送信する（ステップＳ１１）。
【００８９】
メッセージ・ブローカは、送信メッセージに対する処理を実施する（ステップＳ１２）。例えば、送信元モジュールのあるプロセス内に配置されたメッセージ・ブローカはメッセージ・データのシリアライズを行ない、また、送信先モジュールのあるプロセス内に配置されたメッセージ・ブローカは、メッセージ・データのデシリアライズを行なう（前述）。そして、送信先モジュールのあるプロセス内に配置されたメッセージ・ブローカは、送信先モジュールが持つメッセージ・キューに、メッセージ・データを一時保存する（ステップＳ１３）。
【００９０】
送信先モジュールでの処理は、送信元モジュールとは非同期分散処理となる。すなわち、送信先モジュールは、メッセージ・キューに保管されたメッセージを、何らかのタイミングで取り出して（ステップＳ１４）、その処理を実行する（ステップＳ１５）。
【００９１】
Ｂ−３−２．メッセージ・キューを利用ないメッセージ・パッシング
続いて、メッセージ・キューを利用ないたメッセージ・パッシングについて説明する。送信先モジュールが受信したメッセージは即時処理される。このメッセージ・パッシング方法は、送信元と送信先のモジュールが同一プロセス内にあるときに実施される。
【００９２】
図７には、メッセージ・キューを利用しない場合のメッセージ・パッシングの処理手順をフローチャートの形式で示している。
【００９３】
まず、送信元モジュールがメッセージを送信する（ステップＳ２１）。
【００９４】
メッセージ・ブローカは、送信メッセージに対する処理を実施する（ステップＳ２２）。そして、送信先モジュールは、メッセージの処理を即時に実行する（ステップＳ２３）。
【００９５】
送信元と送信先のモジュールが同一プロセス内にある場合は、メッセージ・キューを利用しないことで、（送信元及び送信先モジュールの実行処理が切り離せないため）非同期分散処理ができなくなるが、関数呼び出しと同等の処理負荷でのメッセージ・パッシングが可能となる。
【００９６】
Ｂ−４．同期型マルチキャスト通信における処理順序依存性の解決
割り込み処理が発生した際には、プロセス内ではあるモジュールから他の複数のモジュール宛ての同期マルチキャスト通信を行なうことがあるが、送信先となる各モジュール間において処理の順序依存性が問題になる。
【００９７】
例えば、ロボットの運動制御プログラム内で、手の関節角度制御と手を用いた物体把持制御がそれぞれ独立した制御モジュールとして実装されている場合、先に関節角度制御モジュールに割り込みが発生して関節角度指令を発すると、物体把持制御のための関節角度指令がその制御周期では反映されなくなる。
【００９８】
このような、並列処理におけるモジュール間の処理順序依存性の問題を解決するためには、メッセージ・パッシングを使う方法や、シグナルを使う方法、同期バリアを使う方法などさまざまな方法が挙げられ、状況に応じて使い分ければ良い。しかし、これらの方法はいずれも各モジュールが非同期に実行されている場合を前提にした解決方法であり、リアルタイム性の同期処理の要求を満足することはできない。
【００９９】
上述したように、本実施形態に係る分散システムでは、メッセージ・キューを利用しないメッセージ・パッシングが利用でき、同一プロセス内でのモジュール間のメッセージ・パッシングは同期通信となる。このようなメッセージ・パッシング方法では、非同期の並列処理を前提にした従来の解決方法を適用することはできない。
【０１００】
以下では、従来の解決方法を適用できない同期型マルチキャスト通信における処理順序依存性を解決するための方法について説明する。
【０１０１】
Ｂ−４−１．メッセージ・ブローカによる処理依存性の解決
図８には、分散システムのあるプロセス内で複数のモジュールに対する同期型マルチキャスト通信が実行される様子を示している。
【０１０２】
同図では、モジュールＡがモジュールＢ、Ｃ、Ｄに対してメッセージを送信している。このときモジュールＢ、Ｃ、Ｄのうち、どのモジュールから順にメッセージを受信するかは不定である。
【０１０３】
本実施形態に係る分散システムでは、プロセス毎にメッセージ・ブローカが配設され、プロセス内及びプロセス間で行なわれるモジュール間通信は、必ずメッセージ・ブローカが介在したメッセージ・パッシングにより行なわれる（前述）。メッセージ・ブローカの介在によりプロセス内で行なわれる同期型マルチキャスト通信は、図９に示す通りとなる。したがって、メッセージ・ブローカがメッセージ送信先であるモジュールＢ、Ｃ、Ｄ間の処理依存関係を保持し、それを基にメッセージを配信する順序を並べ替えることで、処理順序依存性の問題を解決することができる。
【０１０４】
Ｂ−４−２．メッセージ送受信を基にした処理順序関係の自動解決
メッセージ・ブローカが処理順序関係を元にメッセージ配信を行なうためには、モジュール間の処理依存関係を調査し、その結果をメッセージ・ブローカに登録しておかなければならない。
【０１０５】
本実施形態に係る分散システムでは、モジュール間通信はメッセージ・パッシングによって実行される。言い換えれば、モジュール間の関係は、メッセージ・パッシングによって決定する。
【０１０６】
例えば、モジュールＢがモジュールＣにメッセージを送信する場合、モジュールＢの情報に沿ってモジュールＣが処理を行なうのであるから、「モジュールＣはモジュールＢに依存している」と言うことができる。図１０に示す例では、モジュールＣはモジュールＢとモジュールＤに依存し、モジュールＤはモジュールＢに依存していることが判る。
【０１０７】
図８に示した例で考えると、モジュールＡは、モジュールＢ、Ｃ、Ｄ宛てに同期マルチキャスト通信を行なうときには、モジュールＢ、Ｄ、Ｃの順にメッセージ配信を行なうように送信先モジュールの並べ替えを行なうことで、処理順序依存性の問題を解決することができる。
【０１０８】
以下では、プロセス内のモジュール間におけるメッセージ送受信関係を基にモジュール間の処理順序依存関係を自動的に導き出すためのアルゴリズム例について説明する。
【０１０９】
ここでは、図１１に示すような複数のモジュールからなるプロセス内において、矢印に示すように送信元モジュールαから複数のモジュールＡ〜Ｊ宛ての同期マルチキャスト通信を行なう場合を例にとる。また、図１１に示したプロセス内では、同期マルチキャスト通信の送信先モジュールＡ〜Ｊの間では、図１２中で矢印に示すようなメッセージ送受信関係が存在するものとする。そして、同期マルチキャスト通信のメッセージを受け取るモジュール間では処理順序依存性があり、これを解決しなければいけないとする。
【０１１０】
図１３には、プロセス内のモジュール間におけるメッセージ送受信関係を基にモジュール間の処理順序依存関係を自動的に導き出すための処理手順をフローチャートの形式で示している。
【０１１１】
まず、プロセス内の同期マルチキャスト通信において、メッセージを受け取るモジュール（送信先モジュール）を抽出する（ステップＳ３１）。図１１に例示するような、モジュールαを送信元とする同期マルチキャスト通信の場合には、１０個のモジュールＡ〜Ｊが送信先モジュールとして抽出される。
【０１１２】
次いで、同期マルチキャスト通信の送信先として抽出されたモジュール同士の間で通信されるメッセージ・パッシングすなわちメッセージ送受信関係を抽出する（ステップＳ３２）。図１２に示す例では、１０個の送信先モジュールＡ〜Ｊでは、Ａ→Ｂ、Ａ→Ｃ、Ｃ→Ｂ、Ｃ→Ｆ、…の１１個のメッセージ・パッシングｍ１〜ｍ１１が抽出される。
【０１１３】
次いで、同期マルチキャスト通信の送信先モジュールの中で、他のいずれの送信先モジュールからもメッセージを受け取らないモジュールを抽出する（ステップＳ３３）。このようなモジュールは、ステップＳ３２で抽出されたメッセージ送受信関係においてメッセージ・パッシングの送信先にしかならないことから、ここでは「ルート・モジュール」と呼ぶことにする。図１２に示す例では、モジュールＡ、Ｅ、Ｊの３個のモジュールがルート・モジュールとして抽出される。
【０１１４】
そして、抽出されたルート・モジュール毎に、メッセージ・パッシングで繋がっているモジュールを順に探索しながら昇り順の処理番号をモジュールに登録する処理を繰り返していく。その際、ルート・モジュールの処理番号を１とし、モジュールを辿る毎に処理番号を１ずつ増分していく。また、これより以前の他のルート・モジュールを起点としたメッセージ・パッシング探索により処理番号が既に登録されているモジュールについては、大きい方の処理番号に置き換えられる。
【０１１５】
図１３に示したフローチャートに沿って説明する。ルート・モジュールの数だけ繰り返すループＲ１内では、処理番号を１に初期化した後（ステップＳ３４）、現在の処理対象であるモジュールに関し、既に処理番号が登録されているときには（ステップＳ３５のＹｅｓ）、新しい処理番号の方が大きければ（ステップＳ３６のＹｅｓ）その処理番号を登録するが（ステップＳ３８）、そうでなければ（ステップＳ３６のＮｏ）既に登録されている値へ処理番号を更新する（ステップＳ３７）。また、まだ処理番号が登録されていないモジュールであれば（ステップＳ３５のＮｏ）、新しい処理番号を登録する（ステップＳ３８）。このようにして当該モジュールに関して処理番号の登録作業を終えると、処理番号を１だけ増分するとともに（ステップＳ３９）、メッセージ・パッシングで次に繋がっている送信先モジュールを抽出する（ステップＳ４０）。そして、送信先モジュールの数だか繰り返すループＲ２により、このような処理番号の登録処理を繰り返し実行する。
【０１１６】
ここで、図１２に示した具体例に沿って説明しておく。例えば、ルート・モジュールＡを開始モジュールとしたとき、ループＲ１内では、以下のような処理が行なわれる。
【０１１７】
（１）ルート・モジュールＡに処理番号１を登録するとともに、処理番号を１だけ増分する。
（２）モジュールＡからメッセージ・パッシングで繋がっているモジュールＢ、Ｃに処理番号２を登録するとともに、処理番号を１だけ増分する。
（３）モジュールＣからメッセージ・パッシングで繋がっているモジュールＢには、既に処理番号２が登録されているが、新しい処理番号３の方が大きいので、処理番号３に更新する。また、モジュールＣからメッセージ・パッシングで繋がっているモジュールＦに対しても、処理番号３を登録する。そして、処理番号を１だけ増分する。
（４）モジュールＦからメッセージ・パッシングで繋がっているモジュールＧに対して、処理番号４を登録する。
【０１１８】
上記（１）〜（４）の結果として、ルート・モジュールＡに関する処理が終了した時点で、下表に示すような処理番号の割り振りとなる。
【０１１９】
【表１】
2010020650.tif 000003
【０１２０】
同様の手順で、ルート・モジュールＥに関する処理が終了した時点で、下表に示すような処理番号の割り振りとなる。
【０１２１】
【表２】
2010020650.tif 000004
【０１２２】
さらに同様の手順で、ルート・モジュールＪに関する処理が終了した時点で、最終的には下表に示すような処理番号の割り振りとなる。
【０１２３】
【表３】
2010020650.tif 000005
【０１２４】
このようにして各送信先モジュールに割り振られた処理番号は、同期型マルチキャスト通信における処理順序依存性を表す値となる。そこで、処理番号にしたがって送信先モジュールの並べ替えを行なう（ステップＳ４１）。
【０１２５】
図１２に示す例では、送信先モジュールＡ〜Ｊは、Ａ、Ｅ、Ｊ、Ｃ、Ｄ、Ｈ、Ｂ、Ｉ、Ｆ、Ｇの順に並べ替えられることになる。そして、モジュールαから同期マルチキャスト通信を行なう際には、並べ替えられた順にメッセージを送信すれば、処理順序依存性の問題は発生しなくなる。
【０１２６】
Ｃ．リアルタイム同期処理と非同期・並列処理を両立したロボットの制御システム
本実施形態に係るロボットの行動制御システムは、オブジェクト指向（前述）により実装され、多数のスキーマをツリー状に階層化することで構築される（スキーマは、オブジェクト指向技術を用いて実装されるモジュールのことである）。このような分散システムは、運動制御において要求される同期リアルタイム性と、非同期が許容される運動制御以外の制御において要求される処理の並列性とを両立させる必要がある。
【０１２７】
上記のＢ項で説明した分散システムは、モジュール間通信はメッセージ・パッシングにより行なわれる。コンピュータにおけるプログラムの実行単位であるプロセス毎にメッセージ・ブローカが配設されており、このメッセージ・ブローカはプロセス内でメッセージ・パッシングが発生した際にはシリアライズ及びでシリアライズの省略とメッセージ・キューへの保管を省略することにより、メッセージ・パッシングの高速化を実現している。
【０１２８】
したがって、リアルタイムの同期処理が要求される運動制御系の各処理を同じプロセス内のモジュールとして実装する一方、運動制御以外の制御系の各処理を個別のプロセス内のモジュールとして実装することにより処理の並列性を確保することができ、相反する要求を両立させた分散システムを構築することが可能となる。
【０１２９】
以下では、Ｂ項で説明した分散システムを利用したロボットの制御システムの具体的な運用方法について説明する。
【０１３０】
図１４には、ロボットの行動制御システムのうち、視線制御に関連するサブシステムを抽出して示している。図示の視線制御サブシステムは、同期リアルタイム処理が要求されるモジュールと非同期並列処理が要求されるモジュールが混在した分散システムであり、カメラ１５に代表される視覚センサの情報から注意すべき内容を判断し、視線制御のための運動指令を与える機能を持つものである。
【０１３１】
また、図示の視線制御サブシステムは、２台のコンピュータ１〜２を用いて構築され、合計３つのプロセスＡ〜Ｃが実行され、その中で合計６つのモジュールが動作している。なお、同図において、「コンピュータ」を「プロセッサ」と読み替えることもできる。
【０１３２】
コンピュータ１上では、プロセスＡ及びＢが実行される。プロセスＡ内には、Ｖｉｓｉｏｎ  Ｄａｔａ  Ａｃｑｕｉｓｉｔｉｏｎ（視覚データ入力処理）、Ｖｉｓｕａｌ  Ｐｅｒｃｅｐｔｉｏｎ（視覚認識処理）という２つのモジュールが配置され、プロセスＢ内には、Ｃｏｎｔｒｏｌ  Ｔｒｉｇｇｅｒ（制御トリガ）、Ｖｉｓｕａｌ  Ｃｏｎｔｒｏｌｌｅｒ（視線制御）、Ｃａｒｔｅｓｉａｎ  Ｃｏｎｔｒｏｌｌｅｒ（位置姿勢制御）という３つのモジュールが配置される。また、コンピュータ２上では、Ｖｉｓｕａｌ  Ａｔｔｅｎｔｉｏｎ（視覚注意）というモジュールが配置されたプロセスＣが実行される。各モジュールの役割を下表に示す。なお、メッセージ処理タイミングに応じて、受信時のメッセージの取り扱い（メッセージ・キューに保管すべきか否か）が決定される。
【０１３３】
【表４】
2010020650.tif 000006
【０１３４】
１つのプロセスはコンピュータがプログラムを実行する単位となる。リアルタイムの同期処理が要求されるモジュール群をプロセス内に配置すれば、同期処理を実行することができる。図１４並びに表４に示す例では、Ｖｉｓｕａｌ  Ｃｏｎｔｒｏｌｌｅｒ及びＣａｒｔｅｓｉａｎ  Ｃｏｎｔｒｏｌｌｅｒといった運動制御系のモジュールは、プロセスＢ内に配置され、同期リアルタイムに処理される。
【０１３５】
一方、非同期であることが許容されるが並列処理が要求される各モジュールを、個別のプロセスあるいは別のコンピュータに配置すれば、並列して実行することができる。例えば、Ｖｉｓｕａｌ  Ｐｅｒｃｅｐｔｉｏｎなどの認識用モジュールとＶｉｓｕａｌ  Ａｔｔｅｎｓｉｏｎなどの思考用モジュールは異なるプロセスに配置され、非同期で処理される。また、これらの２モジュールは、異なるコンピュータ１及び２に分散して配置されるので、並列実行性も担保される。
【０１３６】
また、メッセージ・ブローカをプロセス毎に配置しており、モジュール間でのデータの受け渡しは、メッセージ・ブローカが介在するメッセージ・パッシングにより行なわれる。図１４に示す視線制御サブシステムでは、プロセスＡ内で、Ｖｉｓｕａｌ  Ｄａｔａ  ＡｃｑｕｉｓｉｔｉｏｎからＶｉｓｕａｌ  Ｐｅｒｃｅｐｔｉｏｎへ、メッセージＭｓｇ＿ａが送信される。プロセスＡとＣ間では、Ｖｉｓｕａｌ  ＰｅｒｃｅｐｔｉｏｎからＶｉｓｕａｌ  Ａｔｔｅｎｔｉｏｎへ、メッセージＭｓｇ＿ｂが送信される。プロセスＣとＢ間では、Ｖｉｓｕａｌ  ＡｔｔｅｎｔｉｏｎからＶｉｓｕａｌ  Ｃｏｎｔｒｏｌｌｅｒへ、メッセージＭｓｇ＿ｃが送信される。プロセスＢ内では、Ｃｏｎｔｒｏｌ  ＴｒｉｇｇｅｒからＶｉｓｕａｌ  Ｃｏｎｔｒｏｌｌｅｒ及びＣａｒｔｅｓｉａｎ  ＣｏｎｔｒｏｌｌｅｒへメッセージＭｓｇ＿ｅがそれぞれ送信されるとともに、Ｖｉｓｕａｌ  ＣｏｎｔｒｏｌｌｅｒからＣａｒｔｅｓｉａｎ  ＣｏｎｔｒｏｌｌｅｒへメッセージＭｓｇ＿ｄが送信される。
【０１３７】
図１５には、分散システムの起動処理手順をフローチャートの形式で示している。この起動処理はプロセス単位で行なわれ、図１４に示したシステム構成であれば合計３回行なわれることになる。
【０１３８】
コンピュータ名とプロセス名によって実行するモジュールが決まることから、まず、これらを確認する（ステップＳ５１）。
【０１３９】
次いで、起動処理を行なうために必要となるシステム構成ファイルを読み込む（ステップＳ５２）。読み込んだシステム構成ファイルの内容に従って、必要なモジュールがインスタンス化され、実行される。
【０１４０】
図１６には、図１４及び表４に示した分散システム構成例に相当するシステム構成ファイルの構成をテキスト表記したものを示している。図示のように、システム構成ファイルでは、プログラムを実行する単位であるプロセス毎の構成情報が、｛コンピュータ名，プロセス名，モジュール一覧，モジュール名及びそのメッセージ処理タイミング｝という形式で記述されるとともに、（メッセージ処理タイミングは、当該処理が割り込み（Ｉｎｔｅｒｒｕｐｔ）、同期（Ｓｙｎｃｈｒｏｎｐｕｓ）、又は非同期（Ａｓｙｎｃｈｒｏｎｏｕｓ）のいずれであるかを示すものとする）、処理順序依存性のあるメッセージ（Ｏｒｄｅｒｅｄ  Ｍｅｓｓａｇｅ）が指定されている。例えば、先行ステップＳ５１で、コンピュータ名：Ｃｏｍｐｕｔｅｒ１、プロセス名：ＰｒｏｃｅｓｓＡが確認されている場合には、モジュールＶｉｓｕａｌ  Ｄａｔａ  Ａｃｑｕｉｓｉｔｉｏｎ及びＶｉｓｕａｌ  Ｐｅｒｃｅｐｔｉｏｎが対象であることが判る。また、システム構成ファイルには、モジュールが受信したメッセージを処理するタイミングも記述されているので、その内容に応じたモジュールのインスタンス化が行なわれる。
【０１４１】
次いで、インスタンス化するモジュール間のメッセージ送受信に関する情報を取得する（ステップＳ５３）。
【０１４２】
本実施形態では、分散システムの構成要素となる各モジュール内に、メッセージ送受信情報を取得するための手段を備えている。図１７には、モジュールの擬似コードを例示している。図中の送信メッセージの一覧を取得する関数“ＭｅｓｓａｇｅＬｉｓｔＧｅｔＰｏｓｔＭｅｓｓａｇｅＬｉｓｔ（）”、及び、受信メッセージの一覧を取得する関数“ＭｅｓｓａｇｅＬｉｓｔＧｅｔＲｅｃｅｉｖｅＭｅｓｓａｇｅＬｉｓｔ（）”がこれに相当し、インスタンスかされるモジュールからはメッセージ送受信情報を取得することができる。そして、収集されたメッセージ送受信情報は、起動処理の中の「プロセス間メッセージ情報の交換」で利用される他、メッセージ・ブローカがメッセージを適切に扱うために利用される。
【０１４３】
図１４に示した分散システムの場合、コンピュータ１上で実行される各プロセスＡ、Ｂ、並びに、コンピュータ２上で実行されるプロセスＣにおいて、下表５〜７に示すような、各メッセージの送信モジュール及び受信モジュールに関するメッセージ送受信情報を収集することができる。但し、各表から明らかなように、起動処理の段階では、プロセス間のメッセージ情報を取得することはできない。
【０１４４】
【表５】
2010020650.tif 000007
【０１４５】
【表６】
2010020650.tif 000008
【０１４６】
【表７】
2010020650.tif 000009
【０１４７】
次いで、ステップＳ５２で読み込んだシステム構成ファイルと、ステップＳ５３で収集したメッセージ送受信情報を用いて、Ｂ−４項で説明した処理に従って、同期型マルチキャスト通信における処理順序依存性の解決メッセージ処理依存性の解決を行なう（ステップＳ５４）。
【０１４８】
図１４に示した分散システムの場合、図１６に示すシステム構成ファイル内で、メッセージＭｓｇ＿ｅが処理順序依存性のあるメッセージとして指定されているので、当該メッセージが処理対象となることが判る。また、表６に示したメッセージ送受信情報から、コンピュータ１上で実行されるプロセスＢが処理対象のプロセスであることが判る。そこで、コンピュータ１上で実行されるプロセスＢに対して、Ｂ−４項で説明した処理に従って、同期型マルチキャスト通信における処理順序依存性の解決メッセージ処理依存性の解決を行なう。
【０１４９】
次いで、ステップＳ５３で収集したメッセージ送受信情報ではプロセス間のメッセージ送受信情報が欠落している場合には（ステップＳ５５のＹｅｓ）、当該欠落部分の情報を補うべく、他プロセスとの接続を試みる（ステップＳ５６）。
【０１５０】
上記の表５〜表７に示した例では、送信モジュール又は受信モジュールが同一プロセス内に存在しない欄がブランクになっている。例えば、コンピュータ１上で実行するプロセスＡの起動処理では、コンピュータ１上で実行する他のプロセスＢとの接続を試みる。
【０１５１】
そして、他プロセスとの接続に成功すると（ステップＳ５６のＹｅｓ）、メッセージ送受信情報の欠落していたプロセス間でメッセージ情報の交換を行なう（ステップＳ５７）。
【０１５２】
図１４に示した分散システムにおいて、すべてのプロセスが接続されると、以下の表８〜表１０のようなメッセージ送受信情報を取得することができる。
【０１５３】
【表８】
2010020650.tif 000010
【０１５４】
【表９】
2010020650.tif 000011
【０１５５】
【表１０】
2010020650.tif 000012
【０１５６】
メッセージ・ブローカは、上記のメッセージ送受信情報を利用して、Ｂ項で説明したメッセージ・パッシングの高速化を実現することができる。
【０１５７】
続いて、図１４に示した分散システム中で、幾つかのメッセージ・パッシングを例にとって、そのシーケンスについて考察してみる。
【０１５８】
図１８には、図１４中のメッセージＭｓｇ＿ａのメッセージ・パッシングを行なうシーケンスを示している。
【０１５９】
同メッセージ・パッシングは、コンピュータ１上で実行されるプロセスＡ内における、モジュールＶｉｓｉｏｎ  Ｄａｔａ  ＡｃｑｕｉｓｉｔｉｏｎからモジュールＶｉｓｕａｌ  Ｐｅｒｃｅｐｔｉｏｎへのメッセージ・パッシングであり、同プロセス内のメッセージ・ブローカの介在により行なわれる。
【０１６０】
送受信モジュールがともに同一プロセス内に存在することから、メッセージ・ブローカは、シリアライズ／でシリアライズ処理を行なわない。
【０１６１】
また、受信モジュールであるＶｉｓｕａｌ  Ｐｅｒｃｅｐｔｉｏｎは、表４に示したように非同期にメッセージを処理するので、受信メッセージＭｓｇ＿ａは一端メッセージ・キューに保存され、その後、モジュールＶｉｓｕａｌ  Ｐｅｒｃｅｐｔｉｏｎはメッセージ・キューから同メッセージを取り出してその処理を行なう。
【０１６２】
図１９には、図１４中のメッセージＭｓｇ＿ｂのメッセージ・パッシングを行なうシーケンスを示している。
【０１６３】
同メッセージ・パッシングは、コンピュータ１上で実行されるプロセスＡ内のモジュールＶｉｓｕａｌ  Ｐｅｒｃｅｐｔｉｏｎから、別のコンピュータ２上で実行される他のロセスＣ内のモジュールＶｉｓｕａｌ  Ａｔｔｅｎｔｉｏｎへのメッセージ・パッシングであり、各プロセス内のメッセージ・ブローカの介在により行なわれる。
【０１６４】
プロセス間のメッセージ・パッシングであることから、送信側のメッセージ・ブローカは、送信モジュールＶｉｓｕａｌ  ＰｅｒｃｅｐｔｉｏｎからのメッセージＭｓｇ＿ｂをシリアライズして他のプロセスＣへ転送する。そして、受信側のメッセージ・ブローカは、転送されてきたメッセージを、デシリアライズしてから、受信モジュールＶｉｓｏｎ  Ａｔｔｅｎｔｉｏｎへ送る。
【０１６５】
図２０には、図１４中のメッセージＭｓｇ＿ｅのメッセージ・パッシングを行なうシーケンスを示している。
【０１６６】
同メッセージ・パッシングは、コンピュータ１上で実行されるプロセスＢ内における、モジュールＣｏｎｔｒｏｌ  Ｔｒｉｇｇｅｒから複数のモジュールＶｉｓｉｏｎ  Ｃｏｎｔｒｏｌｌｅｒ及びＣａｒｔｅｓｉａｎ  Ｃｏｎｔｒｏｌｌｅｒへの同期マルチキャスト通信であり、同プロセス内のメッセージ・ブローカの介在により行なわれる。
【０１６７】
また、図１６に示したシステム構成ファイルで、メッセージＭｓｇ＿ｅは処理順序依存性のあるメッセージであることが示されている。したがって、メッセージ・ブローカは、システム起動時に並べ替えられた順序で、各モジュールへメッセージＭｓｇ＿ｅを配信する。
【０１６８】
表４に示したように受信モジュールであるＶｉｓｉｏｎ  Ｃｏｎｔｒｏｌｌｅｒ及びＣａｒｔｅｓｉａｎ  Ｃｏｎｔｒｏｌｌｅｒはともにメッセージを同期処理する設定となっていることから、メッセージ・キューにメッセージを保存せず即時に処理される。
【０１６９】
図２０からわかるように、メッセージＭｓｇ＿ｅのメッセージ・パッシングは、すべての受信モジュールで同期処理され、且つ、関数呼び出しのみで実装を実現できる内容であることから、リアルタイム・システムの要求を満たすモジュール間通信が可能である。
【産業上の利用可能性】
【０１７０】
以上、特定の実施形態を参照しながら、本発明について詳解してきた。しかしながら、本発明の要旨を逸脱しない範囲で当業者が該実施形態の修正や代用を成し得ることは自明である。
【０１７１】
本明細書では、本発明に係る分散システムを人や環境に対してインタラクションを行なうロボットの制御に適用した場合の実施形態を中心に説明してきたが、本発明の要旨は必ずしもこのような用途に限定されるものではない。同期リアルタイム性の要求と、非同期を許容しつつ処理の並列性の要求とを両立しなければならないさまざまなタイプの分散システムに対して、本発明を同様に適用することができる。
【０１７２】
また、本発明の要旨は、必ずしも「ロボット」と称される製品には限定されない。すなわち、電気的若しくは磁気的な作用を用いて人間の動作に似せた運動を行なう機械装置であるならば、例えば玩具等のような他の産業分野に属する製品であっても、同様に本発明を適用することができる。
【０１７３】
要するに、例示という形態で本発明を開示してきたのであり、本明細書の記載内容を限定的に解釈するべきではない。本発明の要旨を判断するためには、特許請求の範囲を参酌すべきである。
【図面の簡単な説明】
【０１７４】
【図１】図１は、本発明の実施に供されるロボット装置１の機能構成を模式的に示した図である。
【図２】図２は、図１中の制御ユニット２０の構成をさらに詳細に示した図である。
【図３】図３は、分散システムにおいてメッセージ・パッシングによるモジュール間通信を行なう仕組みを説明するための図である。
【図４Ａ】図４Ａは、分散システムの構成例を示した図である。
【図４Ｂ】図４Ｂは、図４Ａに示した分散システムのプロセス毎にメッセージ・ブローカを配置した様子を示した図である。
【図５】図５は、メッセージが送られてきたときにメッセージ・ブローカが実行する処理手順を示したフローチャートである。
【図６】図６は、メッセージ・キューを利用した場合のメッセージ・パッシングの処理手順を示したフローチャートである。
【図７】図７は、メッセージ・キューを利用しない場合のメッセージ・パッシングの処理手順を示したフローチャートである。
【図８】図８は、分散システムのあるプロセス内で複数のモジュールに対する同期型マルチキャスト通信が実行される様子を示した図である。
【図９】図９は、メッセージ・ブローカの介在によりプロセス内で行なわれる同期型マルチキャスト通信の様子を示した図である。
【図１０】図１０は、モジュール間の関係がメッセージ・パッシングにより決定されることを説明するための図である。
【図１１】図１１は、プロセス内のモジュール間におけるメッセージ送受信関係を基にモジュール間の処理順序依存関係を自動的に導き出すためのアルゴリズム例を説明するための図であり、具体的には、プロセス内のメッセージ送受信関係を例示した図である。
【図１２】図１２は、プロセス内のモジュール間におけるメッセージ送受信関係を基にモジュール間の処理順序依存関係を自動的に導き出すためのアルゴリズム例を説明するための図であり、具体的には、プロセス内のモジュール間におけるメッセージ送受信関係を例示した図である。
【図１３】図１３は、プロセス内のモジュール間におけるメッセージ送受信関係を基にモジュール間の処理順序依存関係を自動的に導き出すための処理手順を示したフローチャートである。
【図１４】図１４は、ロボットの行動制御システムのうち、視線制御に関連するサブシステムを示した図である。
【図１５】図１５は、分散システムの起動処理手順を示したフローチャートである。
【図１６】図１６は、図１４及び表４に示した分散システム構成例に相当するシステム構成ファイルの構成をテキスト表記した図である。
【図１７】図１７は、本発明の実施形態に係る分散システムの構成要素となるモジュールの擬似コードを示した図である。
【図１８】図１８は、コンピュータ１上で実行されるプロセスＡ内において、同プロセス内のメッセージ・ブローカの介在により、モジュールＶｉｓｉｏｎ  Ｄａｔａ  ＡｃｑｕｉｓｉｔｉｏｎからモジュールＶｉｓｕａｌ  Ｐｅｒｃｅｐｔｉｏｎへのメッセージ・パッシングを行なうシーケンスを示した図である。
【図１９】図１９は、コンピュータ１上で実行されるプロセスＡ内のモジュールＶｉｓｕａｌ  Ｐｅｒｃｅｐｔｉｏｎから、別のコンピュータ２上で実行されるプロセスＣ内のモジュールＶｉｓｕａｌ  Ａｔｔｅｎｔｉｏｎへ、各プロセス内のメッセージ・ブローカの介在によりプロセス間メッセージ・パッシングを行なうシーケンスを示した図である。
【図２０】図２０は、コンピュータ１上で実行されるプロセスＢ内において、同プロセス内のメッセージ・ブローカの介在により、モジュールＣｏｎｔｒｏｌ  Ｔｒｉｇｇｅｒから複数のモジュールＶｉｓｉｏｎ  Ｃｏｎｔｒｏｌｌｅｒ及びＣａｒｔｅｓｉａｎ  Ｃｏｎｔｒｏｌｌｅｒへのメッセージ・パッシング（同期マルチキャスト通信）を行なうシーケンスを示した図である。
【符号の説明】
【０１７５】
１…ロボット装置
１５…ＣＣＤカメラ
１６…マイクロフォン
１７…スピーカ
１８…タッチ・センサ
１９…ＬＥＤインジケータ
２０…制御部
２１…ＣＰＵ
２２…ＲＡＭ
２３…ＲＯＭ
２４…不揮発メモリ
２５…インターフェース
２６…無線通信インターフェース
２７…ネットワーク・インターフェース・カード
２８…バス
２９…キーボード
４０…入出力部
５０…駆動部
５１…モータ
５２…エンコーダ
５３…ドライバ
【図１】
2010020650.tif 000013
【図２】
2010020650.tif 000014
【図３】
2010020650.tif 000015
【図４Ａ】
2010020650.tif 000016
【図４Ｂ】
2010020650.tif 000017
【図５】
2010020650.tif 000018
【図６】
2010020650.tif 000019
【図７】
2010020650.tif 000020
【図８】
2010020650.tif 000021
【図９】
2010020650.tif 000022
【図１０】
2010020650.tif 000023
【図１１】
2010020650.tif 000024
【図１２】
2010020650.tif 000025
【図１３】
2010020650.tif 000026
【図１４】
2010020650.tif 000027
【図１５】
2010020650.tif 000028
【図１６】
2010020650.tif 000029
【図１７】
2010020650.tif 000030
【図１８】
2010020650.tif 000031
【図１９】
2010020650.tif 000032
【図２０】
2010020650.tif 000033