(57)【要約】【課題】コンポーネントのポート種類に応じてコンポーネントを実行するスレッドの構成を変更することで、システムリソースの無駄使いを防止し、システムの効率を向上させることができるロボット用ソフトウェアコンポーネントのスレッド処理システム及び方法を提供する。【解決手段】本発明のロボット用ソフトウェアコンポーネントのスレッド処理装置は、入力データをバッファに格納した後、該当コンポーネントの周期に応じて実行スレッドを用いて周期的実行方式で前記入力データを処理するか、前記入力データに対して生成される専用スレッドを用いて専用実行方式で前記入力データを処理するデータポート部と、入力イベントを受動実行方式で処理するイベントポート部と、入力メソッドの要請に対応するユーザ定義メソッドを呼び出して前記受動実行方式で入力メソッドの要請を処理するメソッドポート部とを含む。【選択図】図２
2010108504.tif 000002
【特許請求の範囲】
【請求項１】
入力データをバッファに格納した後、該当コンポーネントの周期に応じて実行スレッドを用いて周期的実行方式で前記入力データを処理するか、前記入力データに対して生成される専用スレッドを用いて専用実行方式で前記入力データを処理するデータポート部と、
入力イベントを受動実行方式で処理するイベントポート部と、
入力メソッドの要請に対応するユーザ定義メソッドを呼び出して前記受動実行方式で入力メソッドの要請を処理するメソッドポート部と
を含むロボット用ソフトウェアコンポーネントのスレッド処理装置。
【請求項２】
前記周期的実行方式のために、前記該当コンポーネントの前記周期と優先順位がコンポーネント設定情報に設定されることを特徴とする請求項１に記載のロボット用ソフトウェアコンポーネントのスレッド処理装置。
【請求項３】
前記周期的実行方式において、同じ周期及び同じ優先順位を有するコンポーネントは１つのスレッドで処理されることを特徴とする請求項２に記載のロボット用ソフトウェアコンポーネントのスレッド処理装置。
【請求項４】
前記周期的実行方式において、同じ周期を有するものの、優先順位の異なるコンポーネントは１つのスレッドを用いて前記優先順位に従って順次処理されることを特徴とする請求項２に記載のロボット用ソフトウェアコンポーネントのスレッド処理装置。
【請求項５】
前記専用実行方式において、前記専用スレッドは一度実行された後に待機し、再開始メソッドが呼び出されると、再実行されることを特徴とする請求項１に記載のロボット用ソフトウェアコンポーネントのスレッド処理装置。
【請求項６】
前記受動実行方式において、前記イベントは有限状態機械を用いて処理されることを特徴とする請求項１に記載のロボット用ソフトウェアコンポーネントのスレッド処理装置。
【請求項７】
前記受動実行方式において、前記イベントのための新たなスレッドが生成され、前記新たなスレッドを用いて前記イベントが処理されることを特徴とする請求項６に記載のロボット用ソフトウェアコンポーネントのスレッド処理装置。
【請求項８】
前記受動実行方式において、前記メソッド要請のための新たなスレッドが生成され、前記新たなスレッドを用いて前記メソッド要請が処理されることを特徴とする請求項１に記載のロボット用ソフトウェアコンポーネントのスレッド処理装置。
【請求項９】
データポート、イベントポート及びメソッドポートを介して外部コンポーネントとの通信を行う段階と、
前記データポートを介して受信されたデータを周期的実行方式又は専用実行方式で処理する段階と、
前記イベントポートを介して受信されたイベントを受動実行方式で処理する段階と、
前記メソッドポートを介して受信されたメソッド要請を前記受動実行方式で処理する段階と
を含むロボット用ソフトウェアコンポーネントのスレッド処理方法。
【請求項１０】
前記データを周期的実行方式で処理する段階では、前記データは該当コンポーネントの周期に応じて実行スレッドを用いて処理されることを特徴とする請求項９に記載のロボット用ソフトウェアコンポーネントのスレッド処理方法。
【請求項１１】
前記周期的実行方式のために、前記該当コンポーネントの前記周期と優先順位がコンポーネント設定情報に設定されることを特徴とする請求項１０に記載のロボット用ソフトウェアコンポーネントのスレッド処理方法。
【請求項１２】
前記データを周期的実行方式で処理する段階では、同じ周期及び同じ優先順位を有するコンポーネントは１つのスレッドで処理されることを特徴とする請求項１１に記載のロボット用ソフトウェアコンポーネントのスレッド処理方法。
【請求項１３】
前記データを周期的実行方式で処理する段階では、同じ周期を有するコンポーネントは優先順位に従って整列され、１つのスレッドを用いて前記優先順位に従って順次処理されることを特徴とする請求項１１に記載のロボット用ソフトウェアコンポーネントのスレッド処理方法。
【請求項１４】
前記データを周期的実行方式で処理する段階では、前記実行スレッドが前記対応するコンポーネントの周期に応じて前記データを処理するのに失敗する場合にエラーを報告することを特徴とする請求項１３に記載のロボット用ソフトウェアコンポーネントのスレッド処理方法。
【請求項１５】
前記データを専用実行方式で処理する段階では、前記入力データに対して生成される専用スレッドを用いて専用実行方式で前記入力データが処理され、前記専用スレッドは一度実行された後に待機し、再開始メソッドが呼び出されると、再実行されることを特徴とする請求項９に記載のロボット用ソフトウェアコンポーネントのスレッド処理方法。
【請求項１６】
前記データを専用実行方式で処理する段階では、前記専用スレッドはミューテックス（Ｍｕｔｅｘ、ｍｕｔｕａｌ ｅｘｃｌｕｓｉｏｎ ｏｂｊｅｃｔ）を用いて再開始メソッド要請を待機することを特徴とする請求項１５に記載のロボット用ソフトウェアコンポーネントのスレッド処理方法。
【請求項１７】
前記イベントを受動実行方式で処理する段階では、前記イベントは有限状態機械を用いて処理されることを特徴とする請求項９に記載のロボット用ソフトウェアコンポーネントのスレッド処理方法。
【請求項１８】
前記イベントを受動実行方式で処理する段階では、前記イベントのための新たなスレッドが生成され、前記新たなスレッドを用いて前記イベントが処理されることを特徴とする請求項１７に記載のロボット用ソフトウェアコンポーネントのスレッド処理方法。
【請求項１９】
前記メソッド要請を受動実行方式で処理する段階では、前記メソッド要請に対応するユーザ定義メソッドが呼び出されて前記メソッド要請を処理することを特徴とする請求項９に記載のロボット用ソフトウェアコンポーネントのスレッド処理方法。
【請求項２０】
前記メソッド要請を受動実行方式で処理する段階では、前記メソッド要請のための新たなスレッドが生成され、前記新たなスレッドを用いて前記メソッド要請が処理されることを特徴とする請求項１９に記載のロボット用ソフトウェアコンポーネントのスレッド処理方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明はロボット用ソフトウェアコンポーネントのスレッド処理に関し、更に詳しくは、ロボット用ソフトウェアコンポーネントを駆動させるコンポーネント実行エンジンを通じたロボット用ソフトウェアコンポーネントのスレッド処理システム及び方法に関する。
【背景技術】
【０００２】
周知のように、ロボットの役割が産業用ロボットから家庭用知能型ロボットに変わることにより、ロボットシステムが複雑になっている。特定の作業のみを行うのに十分な程度のハードウェア、ソフトウェア構造を有する産業用ロボットとは異なり、家庭用知能型ロボットは多様な作業を行うためのセンサ、モータアクチュエータなどを含んでいるのはもちろん、これらを制御し、外部との通信を行う例えば、マイクロ・プロセッサ、コントローラ、ＤＳＰ（Ｄｉｇｉｔａｌ Ｓｉｇｎａｌ Ｐｒｏｃｅｓｓｏｒ）、ＳｏＣ（Ｓｙｓｔｅｍ ｏｎ Ｃｈｉｐ）などのネットワークで連結された分散構造を有する複数のプロセシングユニットを含む。
【０００３】
ロボットソフトウェアモジュールは、このようなプロセシングユニット上で行われ、互いに緊密に通信を行ってデータとコントロールをやりとりする。複雑に絡み合っている分散構造を有するロボットを効率的に制御するためには、ロボット内部の制限されたリソースを効率的に利用しながら、複数のノードで同時に起こる多様なことを統合的、且つ、調和がとれるように処理できる効率的な制御ソフトウェア構造が必要である。
【０００４】
ロボット用ソフトウェアコンポーネントは、再使用及び交換が可能であり、コンポーネントが提供するインターフェースを介して接近するソフトウェアモジュールであって、ロボットソフトウェアモジュールの機能を行う。コンポーネントユーザの立場からはコンポーネントが提供するインターフェースのみを用い、該当インターフェースに対する詳細な実装は分からなくなる。即ち、コンポーネントは外部に公開されたインターフェース以外には分からないブラックボックスとなり、このようにすることで、外部インターフェースが変更しない限り、内部実装を自由に変更できるようになる。
【０００５】
産業用ロボットにおいて、ロボット制御パターンは大きくクライアント／サーバパターンと、制御ループパターンの２種類に区分することができる。クライアント／サーバパターンでは、コンポーネントで提供するメソッドを呼び出して特定の動作を行うか、コンポーネント内部の属性を読み込んだり変更する。クライアント／サーバパターンの例としては、ＣＯＲＢＡ（Ｃｏｍｍｏｎ Ｏｂｊｅｃｔ Ｒｅｑｕｅｓｔ Ｂｒｏｋｅｒ Ａｒｃｈｉｔｅｃｔｕｒｅ）、ＲＭＩ（Ｒｅｍｏｔｅ Ｍｅｔｈｏｄ Ｉｎｖｏｃａｔｉｏｎ）及びＲＰＣ（Ｒｅｍｏｔｅ Ｐｒｏｃｅｄｕｒｅ Ｃａｌｌ）などが挙げられる。
【０００６】
制御ループパターンは、典型的な制御ループでのように、コンポーネント間でデータやイベントを周期的にやりとりしながら、コンポーネントが自身の状態に応じてセンサデータを処理した後、アクチュエータを駆動することで作業を行う。制御ループパターンの例としては、無人自動車に搭載され、コンポーネント同士で予め定められたデータフォーマットを特定の周期毎に伝送して制御ループを構成するＪＡＵＳ（Ｊｏｉｎｔ Ａｒｃｈｉｔｅｃｔｕｒｅ ｆｏｒ Ｕｎｍａｎｎｅｄ Ｓｙｓｔｅｍ）が挙げられる。
【０００７】
一方、家庭用知能型ロボットは、産業用ロボットよりは構造が遥かに複雑であり、多様な機能を行わなければならないので、前述した２種類のパターンを混用して更に柔軟なロボット制御を行うことが効率的である。
【０００８】
従って、ロボット用ソフトウェアコンポーネントは、有限状態の機械を有して能動的に動作しなければならず、コンポーネント相互間のデータ交換及びメソッド呼び出しを通じて制御が行われなければならない。このように能動的に動作するコンポーネントを用いる最近提案されたロボットプログラミング方式としては、ＯＲＯＣＯＳ（Ｏｐｅｎ Ｒｏｂｏｔ Ｃｏｎｔｒｏｌ Ｓｙｓｔｅｍ）、ＲＴＣ（Ｒｏｂｏｔ Ｔｅｃｈｎｏｌｏｇｙ Ｃｏｍｐｏｎｅｎｔ）などが挙げられる。
【０００９】
ロボットの応用はコンポーネントの組み合わせであり、コンポーネント間の結合度を下げるために、ポートを介したコンポーネントの使用が進められている。ポートはコンポーネントを連結し、コンポーネント相互間の通信を可能にする。
【００１０】
しかしながら、ポートを用いるとしても、独立して行われる多数のコンポーネントを処理するために、数多くのスレッドが用いられると、システムリソースが無駄使いされる上に、スレッド間の情報伝達が遅くなり、システムの効率を低下させてしまうという問題がある。
【先行技術文献】
【特許文献】
【００１１】
【特許文献１】米国特許出願公開第２００８/０１４１２２０号明細書
【発明の概要】
【発明が解決しようとする課題】
【００１２】
本発明は上記事情に鑑みてなされたものであって、その目的は、コンポーネントのポート種類に応じてコンポーネントを実行するスレッドの構成を変更することで、システムリソースの無駄使いを防止し、システムの効率を向上させることができるロボット用ソフトウェアコンポーネントのスレッド処理システム及び方法を提供することにある。
【課題を解決するための手段】
【００１３】
前記目的を達成するために、本発明の一観点によるロボット用ソフトウェアコンポーネントのスレッド処理装置は、入力データをバッファに格納した後、該当コンポーネントの周期に応じて実行スレッドを用いて周期的実行方式で前記入力データを処理するか、前記入力データに対して生成される専用スレッドを用いて専用実行方式で前記入力データを処理するデータポート部と、入力イベントを受動実行方式で処理するイベントポート部と、入力メソッドの要請に対応するユーザ定義メソッドを呼び出して前記受動実行方式で入力メソッドの要請を処理するメソッドポート部とを含む。
【００１４】
好ましくは、前記周期的実行方式のために、前記対応するコンポーネントの前記周期と優先順位がコンポーネント設定情報に設定される。
【００１５】
また、前記周期的実行方式において、同じ周期及び同じ優先順位を有するコンポーネントは１つのスレッドで処理されることが好ましい。
【００１６】
更に、前記周期的実行方式において、同じ周期を有するものの、優先順位の異なるコンポーネントは１つのスレッドを用いて前記優先順位に従って順次処理される。
【００１７】
また、前記専用実行方式において、前記専用スレッドは一度実行された後に待機し、再開始メソッドが呼び出されると、再実行される。
【００１８】
更に、前記受動実行方式において、前記イベントは有限状態機械を用いて処理される。
【００１９】
また、前記受動実行方式において、前記イベントのための新たなスレッドが生成され、前記新たなスレッドを用いて前記イベントが処理される。
【００２０】
更に、前記受動実行方式において、前記メソッド要請のための新たなスレッドが生成され、前記新たなスレッドを用いて前記メソッド要請が処理される。
【００２１】
本発明の他の観点によるロボット用ソフトウェアコンポーネントのスレッド処理方法は、データポート、イベントポート及びメソッドポートを介して外部コンポーネントとの通信を行う段階と、前記データポートを介して受信されたデータを周期的実行方式又は専用実行方式で処理する段階と、前記イベントポートを介して受信されたイベントを受動実行方式で処理する段階と、前記メソッドポートを介して受信されたメソッド要請を前記受動実行方式で処理する段階とを含む。
【００２２】
好ましくは、前記データを周期的実行方式で処理する段階では、前記データは該当コンポーネントの周期に応じて実行スレッドを用いて処理される。
【００２３】
また、前記周期的実行方式のために、前記対応するコンポーネントの前記周期と優先順位がコンポーネント設定情報に設定されることが好ましい。
【００２４】
更に、前記データを周期的実行方式で処理する段階では、同じ周期及び同じ優先順位を有するコンポーネントは１つのスレッドで処理される。
【００２５】
また、前記データを周期的実行方式で処理する段階では、同じ周期を有するコンポーネントは優先順位に従って整列され、１つのスレッドを用いて前記優先順位に従って順次処理される。
【００２６】
更に、前記データを周期的実行方式で処理する段階では、前記実行スレッドが前記対応するコンポーネントの周期に応じて前記データを処理するのに失敗する場合にエラーを報告する。
【００２７】
また、前記データを専用実行方式で処理する段階では、前記入力データに対して生成される専用スレッドを用いて専用実行方式で前記入力データが処理され、前記専用スレッドは一度実行された後に待機し、再開始メソッドが呼び出されると、再実行される。
【００２８】
更に、前記データを専用実行方式で処理する段階では、前記専用スレッドはミューテックス（Ｍｕｔｅｘ、ｍｕｔｕａｌ ｅｘｃｌｕｓｉｏｎ ｏｂｊｅｃｔ）を用いて再開始メソッド要請を待機する。
【００２９】
また、前記イベントを受動実行方式で処理する段階では、前記イベントは有限状態機械を用いて処理される。
【００３０】
更に、前記イベントを受動実行方式で処理する段階では、前記イベントのための新たなスレッドが生成され、前記新たなスレッドを用いて前記イベントが処理される。
【００３１】
また、前記メソッド要請を受動実行方式で処理する段階では、前記メソッド要請に対応するユーザ定義メソッドが呼び出されて前記メソッド要請を処理する。
【００３２】
更に、前記メソッド要請を受動実行方式で処理する段階では、前記メソッド要請のための新たなスレッドが生成され、前記新たなスレッドを用いて前記メソッド要請が処理される。
【発明の効果】
【００３３】
本発明によれば、分散環境で弱結合された形態を取っているロボット用ソフトウェアコンポーネントを駆動させるコンポーネント実行エンジンが、コンポーネントのポート種類に応じてコンポーネントを実行するスレッドの構成を異にすることで、独立して行われる多数のコンポーネントを処理するために数多くのスレッドが用いられるという問題が解決される。従って、システムリソースの無駄使いとスレッド間の情報伝達の遅延が防止されることができ、更にシステムの効率低下も防止され得るという効果を奏する。
【図面の簡単な説明】
【００３４】
【図１】それぞれコンポーネント実行エンジン部及び多数のコンポーネント部を含む２つのノードで構成されたロボットシステムの構成図である。
【図２】本発明によるポート別にスレッドを処理するコンポーネント部の構成図である。
【図３】コンポーネント部の実行方式によって分類されたコンポーネントクラスダイヤグラムを示す図である。
【図４】周期的実行コンポーネントのコンポーネント設定情報例を示す図である。
【図５】周期的実行方式においてデータに対するスレッド処理過程を示すフローチャートである。
【図６】専用実行方式においてデータに対するスレッド処理過程を示すフローチャートである。
【図７】実行メソッドを実行した後、コンポーネントの次の開始を待機するコードを例示する図である。
【図８】受動実行方式においてイベントに対するスレッド処理過程を示すフローチャートである。
【図９】受動実行方式においてメソッドに対するスレッド処理過程を示すフローチャートである。
【発明を実施するための形態】
【００３５】
以下、添付の図面を参照して本発明の実施形態について詳細に説明する。
【００３６】
図１は、それぞれコンポーネント実行エンジン部及び多数のコンポーネント部を含む２つのノードで構成されたロボットシステムの構成図である。ノード１００Ａは、コンポーネント部１０２ａ、１０２ｂ、１０２ｃ、コンポーネント実行エンジン部１０４ａ、通信ミドルウェア１０６ａ及びオペレーティングシステム（ＯＳ）１０８ａを含む。ノード１００Ｂは、コンポーネント部１０２ｄ、１０２ｅ、１０２ｆ、１０２ｇ、コンポーネント実行エンジン部１０４ｂ、通信ミドルウェア１０６ｂ及びオペレーティングシステム（ＲＴＯＳ）１０８ｂを含む。
【００３７】
ロボット用ソフトウェアコンポーネントに対応し、互いに連結されてロボット用ソフトウェアシステムを構成するコンポーネント部１０２ａ、１０２ｂ、１０２ｃ、１０２ｄ、１０２ｅ、１０２ｆ、１０２ｇのそれぞれは、自ら動作するのではなく、コンポーネント実行エンジン部１０４ａ、１０４ｂにより駆動される。コンポーネント実行エンジン部１０４ａ、１０４ｂはオペレーティングシステム１０８ａ、１０８ｂと、例えば、ＣＯＲＢＡなどのような通信ミドルウェア１０６ａ、１０６ｂ上で動作する。コンピュータノード１００Ａ、１００Ｂはそれぞれコンポーネント実行エンジン部１０４ａ、１０４ｂを備え、コンポーネント実行エンジン部１０４ａはノードＡ内のコンポーネント部１０２ａ、１０２ｂ、１０２ｃを駆動させ、コンポーネント実行エンジン部１０４ｂはノードＢ内のコンポーネント部１０２ｄ、１０２ｅ、１０２ｆ、１０２ｇを駆動させる。
【００３８】
以下、前述したような構成を有するロボットシステムにおいてデータ、イベント及びメソッドをスレッド処理するスレッド処理システムについて図２〜図４を参照して説明する。
【００３９】
図２は、本発明によるポート別にスレッドを処理するコンポーネント部２００の構成図である。
【００４０】
コンポーネント部２００は、該当コンポーネントのメソッドを呼び出すためのメソッドポート部２０２、他のコンポーネント部とのデータ交換のためのデータポート部２０４、イベントの発生をコンポーネント部に知らせるイベントポート部２０６などを含む。即ち、コンポーネント部２００は、メソッドポート部２０２、データポート部２０４及びイベントポート部２０６を通じて他のコンポーネント部と通信する。
【００４１】
コンポーネント部２００の実行方式は、周期的実行方式、専用実行方式及び受動実行方式に分類される。データポート部２０４は周期的実行方式又は専用実行方式で動作し、メソッドポート部２０２及びイベントポート部２０６は受動実行方式で動作する。これらについての詳細な説明は後述する。
【００４２】
周期的実行方式において、データポート部２０４はコンポーネント実行エンジン部からデータが入力されると、入力されたデータをバッファ（図２においてＱで示す）に一時格納した後に、周期的実行のための実行メソッド（例えば、ｏｎＥｘｅｃｕｔｅ（）など）が既に設定された周期に従って呼び出されると、データポート部２０４の処理部２０５では呼び出された実行メソッドを用いてバッファに一時格納されたデータを処理する。
【００４３】
専用実行方式において、該当コンポーネントが最初に始める場合、コンポーネントの状態はレディー（ＲＥＡＤＹ）状態からランニング（ＲＵＮＮＩＮＧ）状態に変更され、専用スレッドにより実行メソッド（例えば、ｏｎＥｘｅｃｕｔｅ（））が１回実行される。その後、コンポーネントの状態はミューテックス（ｍｕｔｅｘ）を用いて次の順番の開始を待機するサスペンデッド（ＳＵＳＰＥＮＤＥＤ）状態に変更される。サスペンデッド状態でメソッドポート部２０２を通じて再び開始メソッド（例えば、ｒｅｓｕｍｅ（））の呼び出しが要請されると、コンポーネントの状態はサスペンデッド（ＳＵＳＰＥＮＤＥＤ）状態からランニング（ＲＵＮＮＩＮＧ）状態に変更される。その後、処理部２０５はミューテックスを通じて専用スレッドを呼び出して実行メソッド（例えば、ｏｎＥｘｅｃｕｔｅ（））を再び呼び出した後、呼び出された実行メソッドを通じてデータを処理する。
【００４４】
受動実行方式において、コンポーネント実行エンジン部からメソッドポート部２０２にメソッド要請が提供されると、メソッドポート部２０２の処理部２０３はユーザ定義メソッド（例えば、ｕｓｅｒＤｅｆｉｎｅｄＭｅｔｈｏｄ（））を呼び出し、このようなユーザ定義メソッドを用いて要請されたメソッドを受動で（別途のスレッドを割り当てずに）処理する。
【００４５】
受動実行方式において、コンポーネント実行エンジン部からイベントポート部２０６にイベントが提供されると、イベントポート部２０６の処理部２０７は処理部２０７内の有限状態機械（ＦＳＭ）を用いてイベントを直ぐに（バッファリングせずに）処理する。
【００４６】
以上のように、メソッドポート部２０２、データポート部２０４及びイベントポート部２０６はそれぞれ処理部２０３、処理部２０５及び処理部２０７を含む。しかしながら、メソッドポート部２０２、データポート部２０４及びイベントポート部２０６はそれぞれの処理部２０３、２０５、２０７の代わりに共通の処理部を有し得るのはもちろんである。また、各コンポーネント部は必要に応じて多数のメソッドポート部２０２、データポート部２０４、イベントポート部２０６を含むことができる。
【００４７】
図３は、コンポーネント部の実行方式（即ち、コンポーネントの実行方式）によって分類されたコンポーネントクラスダイヤグラムを示す図である。ロボット用ソフトウェアコンポーネントはコンポーネントの実行方式によって、多数のメソッドを有するＩＣｏｍｐｏｎｅｎｔ３００の下位クラスである周期的（ｐｅｒｉｏｄｉｃ）実行コンポーネント３０２、専用（ｄｅｄｉｃａｔｅｄ）実行コンポーネント３０４、受動（ｐａｓｓｉｖｅ）実行コンポーネント３０６などに分類され、これに対する指定はコンポーネントの生成時にＸＭＬ（Ｅｘｔｅｎｓｉｂｌｅ Ｍａｒｋ-ｕｐ Ｌａｎｇｕａｇｅ）ファイルに記述し得る。
【００４８】
ロボットソフトウェアコンポーネントは、以下のように生成される。まず、コンポーネントの実行方式によって周期的実行コンポーネント３０２、専用実行コンポーネント３０４、受動実行コンポーネント３０６の中から親クラスが選択され、選択された親クラスから継承されたテンプレートコードが生成される。その後、生成されたテンプレートコードにユーザのコードを追加し、コンパイル過程を行ってコンポーネントを生成する。生成されたコンポーネントは、コンポーネント部でハードウェア実装されることができ、コンポーネント実行エンジン部でハードウェア実装されたコンポーネント実行エンジンにより指定された実行方式によって実行されることができる。
【００４９】
周期的実行方式は、典型的な制御ループのように、周期的にデータを処理することや、アルゴリズムを行うために用いられる。このような制御ループは下位レベルのデバイス制御のために使用され得る。周期的なデータの処理のために、コンポーネント実行エンジンはコンポーネントの特定の実行メソッド（例えば、ｏｎＥｘｅｃｕｔｅ（））を周期的に呼び出して、データポート部２０４でハードウェア実装されたデータポートを通じて受信したデータを順次処理できる。
【００５０】
周期的実行方式で処理しなければならないコンポーネントは、ＸＭＬなどで記述されるコンポーネント設定情報にその実行周期及び優先順位が設定されなければならない。優先順位は、多数のコンポーネントが同時に実行される場合、優先順位に従ってコンポーネントを実行するためのものである。即ち、コンポーネント実行エンジンは優先順位が最も高いコンポーネントにスレッドを割り当てて処理した後に、次に高い優先順位を有するコンポーネントにスレッドを割り当てる。図４は、周期的実行コンポーネントのコンポーネント設定情報例を示す図である。図４に示すように、コンポーネント設定情報に、コンポーネントの実行周期と優先順位を、ＸＭＬを用いて設定できる。
【００５１】
以下、データに対するスレッド処理過程を図５〜図７を参照して説明する。
【００５２】
図５は、周期的実行方式においてデータに対するスレッド処理過程を示すフローチャートである。
【００５３】
まず、ロボット用ソフトウェアコンポーネントは待機モードに設定される（段階Ｓ５０２）。待機モード中にコンポーネント実行エンジン内の外部からのデータの受信を担当するスレッド（以下、「受信スレッド」という）は、外部からデータが入力されるかをチェックする（段階Ｓ５０４）。
【００５４】
前記段階Ｓ５０４のチェックの結果、外部からデータが入力された場合、受信スレッドはコンポーネントのデータポートを通じて入力されたデータをバッファに一時格納する（段階Ｓ５０６）。
【００５５】
その後、コンポーネント実行エンジン内の周期的実行を担当するスレッド（以下、「周期的実行スレッド」という）は、既に設定された周期となるかをチェックする（段階Ｓ５０８）。
【００５６】
前記段階Ｓ５０８のチェックの結果、既に設定された周期となる場合、周期的実行スレッドは周期的実行モードのための実行メソッド（例えば、ｏｎＥｘｅｃｕｔｅ（））を呼び出し、コンポーネントの処理部を通じてバッファに格納されている受信データを処理する（段階Ｓ５１０）。
【００５７】
ここで、コンポーネント実行エンジンは、同一の周期で処理されるコンポーネントを１つのスレッドを通じて優先順位に従って順次実行する。従って、システムリソースの無駄使いを防止でき、複数のスレッドで処理する場合に発生するスレッドコンテキストスイッチング（ｔｈｒｅａｄ ｃｏｎｔｅｘｔ ｓｗｉｔｃｈｉｎｇ）時間を短縮でき、ロボット用システムの性能を向上させることができる。
【００５８】
ロボット用システムの性能の向上を最大化するためには、周期的に呼び出される実行メソッドは、最大限に速くリターンされなければならず、ブロックされる関数を呼び出してはならない。仮に、周期的に呼び出される実行メソッドがコンポーネントの実行周期通り呼び出されない場合にはコンポーネント実行エンジンはエラーをレポートできる。
【００５９】
一方、同一のスレッドを通じて実行されるコンポーネントのうち、いずれか１つのコンポーネントが、実行時間が非常に長くかかったり、或いはブロックされた関数を呼び出す場合には、該当スレッドを用いて処理すべき他のコンポーネントは実行が遅れたり、最初から実行されないこともある。従って、実行時間が長くかかったり、その時間を予測できないコンポーネントに対しては周期的実行方式の代りに、専用実行方式が利用され得る。
【００６０】
図６は、専用実行方式においてデータに対するスレッド処理過程を示すフローチャートである。
【００６１】
まず、ロボット用ソフトウェアコンポーネントは待機モードに設定される（段階Ｓ６０２）。待機モード中にコンポーネントの処理部専用のスレッド（以下、「専用スレッド」という）は、コンポーネントが初めて開始（例えば、ｓｔａｒｔ（）メソッドを通じて）するかをチェックする（段階Ｓ６０４）。
【００６２】
前記段階Ｓ６０４のチェックの結果、コンポーネントが最初に開始する場合、専用スレッドは該当コンポーネントの状態をレディー（ＲＥＡＤＹ）状態からランニング（ＲＵＮＮＩＮＧ）状態に変更する（段階Ｓ６０６）。そして、専用スレッドはコンポーネントの処理部を通じて実行メソッド（例えば、ｏｎＥｘｅｃｕｔｅ（））を１回実行する（段階Ｓ６０８）。
【００６３】
その後、専用スレッドはコンポーネントの状態をサスペンデッド（ＳＵＳＰＥＮＤＥＤ）状態に変更する（段階Ｓ６１０）。また、専用スレッドはミューテックスを用いて次の順番の開始を待機する（段階Ｓ６１２）。図７は、実行メソッドを実行した後、コンポーネントの次の開始を待機するコードを例示する図である。
【００６４】
その後、コンポーネント実行エンジンの受信スレッドは外部からレジュームメソッド（例えば、ｒｅｓｕｍｅ（））の呼び出しが要請されるかをチェックする（段階Ｓ６１４）。
【００６５】
前記段階Ｓ６１４のチェックの結果、レジュームメソッドの呼び出しが要請されると、このような呼び出し要請はメソッドポートを通じてコンポーネントの処理部に伝達され、これにより、処理部ではコンポーネントの状態をサスペンデッド（ＳＵＳＰＥＮＤＥＤ）状態からランニング（ＲＵＮＮＩＮＧ）状態に変更する（段階Ｓ６１６）。
【００６６】
その後、処理部はミューテックスを通じて専用スレッドを起動して実行メソッドを再び呼び出す（段階Ｓ６１８）。専用スレッドは呼び出された実行メソッドを通じてデータを処理する（段階Ｓ６２０）。
【００６７】
一方、外部から停止メソッド（例えば、ｓｔｏｐ（））呼び出しが要請された場合、コンポーネント実行エンジンの受信スレッドはこのような呼び出し要請を、メソッドポート部を介してコンポーネントの処理部に伝達する。その後、処理部はコンポーネントの状態をストップド（ＳＴＯＰＰＥＤ）に変更した後、ミューテックス（ｍｕｔｅｘ）を通じて専用スレッドを呼び出す。専用スレッドは、例えば、ｗｈｉｌｅ文を通じてコンポーネントの状態をチェックする。チェックの結果、ランニング（ＲＵＮＮＩＮＧ）状態でない場合、専用スレッドは終了し、該当コンポーネントは破棄（ｄｅｓｔｒｏｙ）され得る。
【００６８】
なお、データの処理はこのように周期的実行方式や専用実行方式で処理する一方、メソッドとイベントに対する処理は受動実行方式で処理される。受動実行方式では、メソッドやイベントがコンポーネント実行エンジンの周期的実行スレッド又はコンポーネントの専用スレッドにより処理されるのではなく、外部からメソッド呼び出し要請やイベントを受信した受信スレッドにより処理される。
【００６９】
即ち、受動実行方式では、コンポーネントを能動的に動作させるための別途のスレッドが割り当てられず、コンポーネント実行エンジンの受信スレッドを通じてメソッドやイベントが処理される。
【００７０】
図８は、受動実行方式においてイベントに対するスレッド処理過程を示すフローチャートである。
【００７１】
まず、ロボット用ソフトウェアコンポーネントは待機モードに設定される（段階Ｓ８０２）。待機モード中にコンポーネント実行エンジンの受信スレッドは外部からイベントが受信されるかをチェックする（段階Ｓ８０４）。
【００７２】
前記段階Ｓ８０４のチェックの結果、イベントが受信される場合、受信されたイベントはイベントポート部を通じてコンポーネントの処理部に伝達され、受信スレッドにより処理部内の有限状態機械（ＦＳＭ）を用いて処理される（段階Ｓ８０６）。即ち、受信されたイベントは処理される前にバッファリングされない。
【００７３】
図９は、受動実行方式においてメソッドに対するスレッド処理過程を示すフローチャートである。
【００７４】
まず、ロボット用ソフトウェアコンポーネントは待機モードに設定される（段階Ｓ９０２）。待機モード中にコンポーネント実行エンジンの受信スレッドは外部からメソッドが要請されるかをチェックする（段階Ｓ９０４）。
【００７５】
前記段階Ｓ９０４のチェックの結果、メソッドが要請された場合、メソッド要請はメソッドポート部を通じてコンポーネントの処理部に伝達され、受信スレッドはユーザ定義メソッド（例えば、ｕｓｅｒＤｅｆｉｎｅｄＭｅｔｈｏｄ（））を呼び出す（段階Ｓ９０６）。
【００７６】
次に、受信スレッドは呼び出されたユーザ定義メソッドを用いて要請されたメソッドを処理する（段階Ｓ９０８）。
【００７７】
受動実行方式では、コンポーネント実行エンジンの受信スレッドがコンポーネントを直接実行させる間にメソッド又はイベントを受信できなくなる。このような問題を解決するために、受信スレッドが既に受信されたメソッド又はイベントを処理するための新たなスレッドを要請及び呼び出すこともできる。このような場合、受信スレッドは続けてメソッド又はイベントを受信するために利用されることができ、前記新たに要請又は呼び出されるスレッドはメソッドやイベントの処理が終わった後にシステムに返還され得る。
【００７８】
なお、本発明の詳細な説明では具体的な実施形態について説明したが、本発明の範囲から逸脱しない範囲内で様々な変形が可能であるのはもちろんである。従って、本発明の範囲は説明された実施形態に限定されず、後述する特許請求の範囲だけでなく、この特許請求の範囲と均等なものにより定まるべきである。
【図１】
2010108504.tif 000003
【図２】
2010108504.tif 000004
【図３】
2010108504.tif 000005
【図４】
2010108504.tif 000006
【図５】
2010108504.tif 000007
【図６】
2010108504.tif 000008
【図７】
2010108504.tif 000009
【図８】
2010108504.tif 000010
【図９】
2010108504.tif 000011