(57)【要約】【課題】ソフトウェアの実行環境に存在する複数の制御対象を大局的に制御する。【解決手段】オブジェクトの木構造は、複数の制御対象それぞれを表すオブジェクトを含み、第１オブジェクトは、複数の制御対象のうち第１制御対象を表す。コンピュータは、第１制御対象において発生したイベントが、第１オブジェクトによる制御の条件を満たさない場合、第１オブジェクトの親ノードに対応する第２オブジェクトに、イベントに対する処理を依頼する。コンピュータは、第２オブジェクトを介して、複数の制御対象のうち第２制御対象を制御する。【選択図】図６
2020190838.tif 000002
【特許請求の範囲】
【請求項１】
複数の制御対象のうち第１制御対象において発生したイベントが、前記複数の制御対象それぞれを表すオブジェクトを含む、オブジェクトの木構造において、前記第１制御対象を表す第１オブジェクトによる制御の条件を満たさない場合、前記第１オブジェクトの親ノードに対応する第２オブジェクトに、前記イベントに対する処理を依頼し、
前記第２オブジェクトを介して、前記複数の制御対象のうち第２制御対象を制御する、
処理をコンピュータに実行させるためのプログラム。
【請求項２】
前記プログラムは、前記イベントが前記第１制御対象に対する制御条件を満たすか否かを判定する第１プログラム部品を、前記第１オブジェクトに対して付加し、前記イベントが前記第２制御対象に対する制御条件を満たすか否かを判定する第２プログラム部品を、前記第２オブジェクトに対して付加する処理を、前記コンピュータにさらに実行させ、
前記コンピュータは、前記第１プログラム部品を用いて、前記イベントが前記第１制御対象に対する制御条件を満たすか否かを判定し、前記イベントが前記第１制御対象に対する制御条件を満たさない場合、前記第２オブジェクトに前記イベントに対する処理を依頼し、前記第２プログラム部品を用いて、前記イベントが前記第２制御対象に対する制御条件を満たすか否かを判定し、前記イベントが前記第２制御対象に対する制御条件を満たす場合、前記第２制御対象を制御することを特徴とする請求項１記載のプログラム。
【請求項３】
前記プログラムは、前記オブジェクトの木構造の根ノードに対応する第３オブジェクトに対して、第３プログラム部品を付加し、前記オブジェクトの木構造が表す環境内に前記第１制御対象及び前記第２制御対象が出現したとき、前記第３プログラム部品を用いて、前記第１オブジェクト及び前記第２オブジェクトを生成する処理を、前記コンピュータにさらに実行させることを特徴とする請求項２記載のプログラム。
【請求項４】
前記プログラムは、前記オブジェクトの木構造が表す環境から前記第１制御対象及び前記第２制御対象が消滅したとき、前記第３プログラム部品を用いて、前記第１オブジェクト及び前記第２オブジェクトを削除する処理を、前記コンピュータにさらに実行させることを特徴とする請求項３記載のプログラム。
【請求項５】
前記プログラムは、前記第１オブジェクト及び前記第２オブジェクトが生成されたとき、前記第１オブジェクトに対して第４プログラム部品を付加し、前記第２オブジェクトに対して第５プログラム部品を付加し、前記イベントが発生したとき、前記第４プログラム部品を用いて前記第１プログラム部品を生成し、前記第２オブジェクトに前記イベントに対する処理が依頼されたとき、前記第５プログラム部品を用いて前記第２プログラム部品を生成する処理を、前記コンピュータにさらに実行させることを特徴とする請求項３又は４記載のプログラム。
【請求項６】
前記プログラムは、前記イベントが消滅したとき、前記第４プログラム部品を用いて前記第１プログラム部品を削除し、前記第５プログラム部品を用いて前記第２プログラム部品を削除する処理を、前記コンピュータにさらに実行させることを特徴とする請求項５記載のプログラム。
【請求項７】
複数の制御対象それぞれを表すオブジェクトを含む、オブジェクトの木構造を表すオブジェクト情報を記憶する記憶部と、
前記複数の制御対象のうち第１制御対象において発生したイベントが、前記オブジェクトの木構造において、前記第１制御対象を表す第１オブジェクトによる制御の条件を満たさない場合、前記第１オブジェクトの親ノードに対応する第２オブジェクトに、前記イベントに対する処理を依頼し、前記第２オブジェクトを介して、前記複数の制御対象のうち第２制御対象を制御する制御部と、
を備えることを特徴とする情報処理装置。
【請求項８】
コンピュータによって実行される情報処理方法であって、
前記コンピュータが、
複数の制御対象のうち第１制御対象において発生したイベントが、前記複数の制御対象それぞれを表すオブジェクトを含む、オブジェクトの木構造において、前記第１制御対象を表す第１オブジェクトによる制御の条件を満たさない場合、前記第１オブジェクトの親ノードに対応する第２オブジェクトに、前記イベントに対する処理を依頼し、
前記第２オブジェクトを介して、前記複数の制御対象のうち第２制御対象を制御する、
ことを特徴とする情報処理方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プログラム、情報処理装置、及び情報処理方法に関する。
【背景技術】
【０００２】
ソフトウェアとソフトウェアが実行される環境との間には、様々な不確実性が存在する。従来は、ソフトウェアの不確実性に対処するために、実行フェーズにおいて問題が発生すると、開発フェーズにおいてソフトウェアが修正される。
【０００３】
図１は、従来のソフトウェアの修正手順の例を示している。図１（ａ）は、問題が発生したときに、ソフトウェアの実行を中止して開発フェーズに戻る修正手順の例を示している。時刻ｔ１においてソフトウェアの開発が開始され、時刻ｔ２においてソフトウェアの実行が開始される。そして、時刻ｔ３において問題が発生した場合、ソフトウェアの実行が中止され、開発フェーズにおいてソフトウェアが修正される。
【０００４】
その後、時刻ｔ４において修正が終了すると、ソフトウェアの実行が再開され、時刻ｔ５において実行が終了する。この場合、時刻ｔ３から時刻ｔ４までの期間において、ソフトウェアの実行が中断してしまう。
【０００５】
図１（ｂ）は、問題が発生したときに、ソフトウェアの実行を継続する修正手順の例を示している。時刻ｔ１１においてソフトウェアの開発が開始され、時刻ｔ１２においてソフトウェアの実行が開始される。そして、時刻ｔ１３において問題が発生した場合、ソフトウェアの実行を中止することなく、開発フェーズにおいてソフトウェアが修正される。
【０００６】
その後、時刻ｔ１４において修正が終了すると、ソフトウェアの入れ替えが行われ、修正後のソフトウェアの実行が開始されて、時刻ｔ１５において実行が終了する。この場合、ソフトウェアの実行が中断することはないが、時刻ｔ１３から時刻ｔ１４までの期間において、問題を抱えたままでソフトウェアが実行されることになる。
【０００７】
近年のデジタル化に伴うＩｏＴ（Internet of Things）等の新しいアプリケーション領域では、ソフトウェアの実行環境が絶えず変化する。図１（ａ）の修正手順では、ソフトウェアの実行が長時間に渡って中断されるため、実行環境の変化に迅速に対処することが難しい。また、図１（ｂ）の修正手順では、問題を抱えたままでソフトウェアが長時間に渡って実行されるため、不適切な実行結果が得られる可能性がある。
【０００８】
このようなソフトウェアの不確実性に動的に対処するための技術として、自己適応ソフトウェアシステムが提案されている（例えば、非特許文献１を参照）。テキストフィールドを表示する画面部品と、テキストフィールドに入力されるテキストを数値のみに限定する機能部品とを関連付けて、表示画面の処理機能を実現する技術も知られている（例えば、特許文献１及び非特許文献２を参照）。アレイ状に設けられた複数の動的再構成可能ユニットを含む自己適応型チップも知られている（例えば、特許文献２を参照）。
【先行技術文献】
【特許文献】
【０００９】
【特許文献１】特開２００８−１７１１５１号公報
【特許文献２】特表２０１８−５３００４０号公報
【非特許文献】
【００１０】
【非特許文献１】D. Weyns et al., “On Patterns for Decentralized Control in Self-Adaptive Systems”, LNCS 7475, pages 76-107, 2012
【非特許文献２】松塚貴英,“業務アプリケーションに適用するAjaxフレームワーク”, 情報処理学会論文誌, Vol.49, No.7, pages 2360-2371, 2008
【発明の概要】
【発明が解決しようとする課題】
【００１１】
上述した自己適応ソフトウェアシステムを用いて物体等の動作を制御する場合、制御対象の物体に例外イベントが発生した場合、その物体に行わせる適応動作を自律的に決定することは困難である。また、例外イベントが発生した物体による局所的な適応動作のみでは、問題が解決されないこともある。
【００１２】
なお、かかる問題は、自己適応ソフトウェアシステムを用いて物体の動作を制御する場合に限らず、ソフトウェアの実行環境に存在する様々な制御対象を制御する場合において生ずるものである。
【００１３】
１つの側面において、本発明は、ソフトウェアの実行環境に存在する複数の制御対象を大局的に制御することを目的とする。
【課題を解決するための手段】
【００１４】
１つの案では、オブジェクトの木構造は、複数の制御対象それぞれを表すオブジェクトを含み、第１オブジェクトは、複数の制御対象のうち第１制御対象を表す。プログラムは、以下の処理をコンピュータに実行させる。
（１）コンピュータは、第１制御対象において発生したイベントが、第１オブジェクトによる制御の条件を満たさない場合、第１オブジェクトの親ノードに対応する第２オブジェクトに、イベントに対する処理を依頼する。
（２）コンピュータは、第２オブジェクトを介して、複数の制御対象のうち第２制御対象を制御する。
【発明の効果】
【００１５】
１つの側面によれば、ソフトウェアの実行環境に存在する複数の制御対象を大局的に制御することができる。
【図面の簡単な説明】
【００１６】
【図１】従来のソフトウェアの修正手順を示す図である。
【図２】情報処理装置の機能的構成図である。
【図３】制御処理のフローチャートである。
【図４】Ｗｅｂ画面を制御する情報処理装置の機能的構成図である。
【図５】Ｗｅｂ画面を制御する情報処理装置のオブジェクト情報を示す図である。
【図６】ＡＧＶを制御する情報処理装置の機能的構成図である。
【図７】ＡＧＶを制御する情報処理装置のオブジェクト情報を示す図である。
【図８】倉庫に進入してきたＡＧＶを示す図である。
【図９】Ｆａｃｔｏｒｙによって生成されるオブジェクトを示す図である。
【図１０】ＡＧＶの動作を制御する適応部品を示す図である。
【図１１】Ｂａｌａｎｃｅｒ＿ｃ１及びＢａｌａｎｃｅｒ＿ｃ２の生成ルールを示す図である。
【図１２】荷台オブジェクトのＦａｃｔｏｒｙにより選択される適応部品を示す図である。
【図１３】Ｂａｌａｎｃｅｒ＿ｃ１及びＢａｌａｎｃｅｒ＿ｃ２が行う処理を示す図である。
【図１４】車体オブジェクトに付加される適応部品を示す図である。
【図１５】床オブジェクトに付加される適応部品を示す図である。
【図１６】オブジェクト生成処理のフローチャートである。
【図１７】適応部品生成処理のフローチャートである。
【図１８】Ｂａｌａｎｃｅｒ＿ｃ２に記述されている制御処理のフローチャートである。
【図１９】Ｂａｌａｎｃｅｒ＿ｖに記述されている制御処理のフローチャートである。
【図２０】Ｂａｌａｎｃｅｒ＿ｆに記述されている制御処理のフローチャートである。
【図２１】情報処理装置のハードウェア構成図である。
【発明を実施するための形態】
【００１７】
以下、図面を参照しながら、実施形態を詳細に説明する。
図２は、実施形態の情報処理装置（コンピュータ）の機能的構成例を示している。図２の情報処理装置２０１は、記憶部２１１及び制御部２１２を含む。記憶部２１１は、オブジェクトの木構造を表すオブジェクト情報２２１を記憶する。オブジェクトの木構造は、複数の制御対象それぞれを表すオブジェクトを含み、第１オブジェクトは、複数の制御対象のうち第１制御対象を表す。制御部２１２は、記憶部２１１が記憶するオブジェクト情報２２１を用いて、制御処理を行う。
【００１８】
図３は、図２の情報処理装置２０１が行う制御処理の例を示すフローチャートである。制御部２１２は、第１制御対象において発生したイベントが、第１オブジェクトによる制御の条件を満たさない場合、第１オブジェクトの親ノードに対応する第２オブジェクトに、イベントに対する処理を依頼する（ステップ３０１）。次に、制御部２１２は、第２オブジェクトを介して、複数の制御対象のうち第２制御対象を制御する（ステップ３０２）。
【００１９】
図２の情報処理装置２０１によれば、ソフトウェアの実行環境に存在する複数の制御対象を大局的に制御することができる。
【００２０】
情報処理装置２０１の具体例では、プログラムの実行環境がオブジェクトの木構造で構造化され、イベント発生時に自律的に動作するプログラム部品が、オブジェクトに対して動的に付加（アタッチ）される。例えば、オブジェクトの木構造は、デジタルツインと同様の方法で生成され、少なくとも一部のノードに対応するオブジェクトは、現実世界に存在する制御対象の事物を表している。
【００２１】
制御対象の事物を表すオブジェクトは、非特許文献１の自己適応ソフトウェアシステムにおける“Managed Subsystem”であってもよく、オブジェクトに付加されるプログラム部品は、“Managing Subsystem”であってもよい。
【００２２】
各オブジェクトが表す事物に発生する問題を、プログラム部品によって自律的に解決することで、自己適応が実現される。問題が発生した事物に対応するノードで対処が難しい場合、その親ノードに対応するオブジェクトに処理を依頼することで、別のプログラム部品によって、大局的に問題を解決することが可能になる。以下では、オブジェクトに付加されるプログラム部品を指して、適応部品と記載することがある。
【００２３】
例えば、制御対象の事物としては、Ｗｅｂブラウザの画面（Ｗｅｂ画面）に表示されるテキストボックス、ボタン等のコンテンツ、倉庫内で荷物を搬送する自動搬送車（Automated Guided Vehicle，ＡＧＶ）等が挙げられる。
【００２４】
プログラムの実行環境に存在する制御対象を制御する場合、プログラムの初期化時に、それらの制御対象を表すオブジェクトの木構造が生成される。各オブジェクトは、オブジェクト指向言語により記述されてもよく、単なる構造体であってもよい。オブジェクトの木構造は、制御対象の包含関係を表し、大構造の制御対象を表すオブジェクトは、根ノードにより近いノードに配置され、大構造に包含される小構造の制御対象を表すオブジェクトは、葉ノードにより近いノードに配置される。
【００２５】
図４は、Ｗｅｂ画面を制御する情報処理装置の機能的構成例を示している。図４の情報処理装置４０１は、記憶部４１１、制御部４１２、及び表示部４１３を含み、記憶部４１１は、Ｗｅｂ画面に表示されるウィジェットを表すオブジェクト情報４２１を記憶する。記憶部４１１、制御部４１２、及びオブジェクト情報４２１は、図２の記憶部２１１、制御部２１２、及びオブジェクト情報２２１にそれぞれ対応する。
【００２６】
この場合、オブジェクト情報４２１としては、ＤＯＭ（Document Object Model）に基づくコンテンツの木構造を用いることができる。ＨＴＭＬ（HyperText Markup Language）で記述されたハイパーテキストがＷｅｂブラウザにロードされると、ＤＯＭが生成される。表示部４１３は、オブジェクト情報４２１が表すウィジェット等を、Ｗｅｂ画面上に表示する。
【００２７】
図５は、オブジェクト情報４２１の例を示している。図５のオブジェクト情報４２１は、オブジェクト５０１〜オブジェクト５０７を含む。オブジェクト５０１は、木構造の根ノードに対応し、オブジェクト５０４〜オブジェクト５０７は、葉ノードに対応する。
【００２８】
オブジェクト５０１は、Ｂｏｄｙ要素を表し、オブジェクト５０２及びオブジェクト５０３は、Ｄｉｖ要素を表し、オブジェクト５０４〜オブジェクト５０７は、ウィジェットを表す。オブジェクト５０４は、ＴｅｘｔＢｏｘ要素により記述されるテキストボックスを表し、オブジェクト５０５は、ＣｈｅｃｋＢｏｘ要素により記述されるチェックボックスを表す。オブジェクト５０６は、Ｂｕｔｔｏｎ要素により記述されるボタンを表し、オブジェクト５０７は、ＴｅｘｔＦｉｅｌｄ要素により記述されるテキスト領域を表す。
【００２９】
制御部４１２は、オブジェクト情報４２１の生成時に、各オブジェクトに対して適応部品を付加することができる。図５の例では、オブジェクト５０４に対して適応部品５１１が付加され、オブジェクト５０３に対して適応部品５１２が付加され、オブジェクト５０６に対して適応部品５１３が付加され、オブジェクト５０７に対して適応部品５１４が付加されている。
【００３０】
ウィジェットを表すオブジェクトに付加された適応部品は、Ｗｅｂ画面におけるキー入力、クリック操作等のイベントが発生した際に、発生したイベントがそのウィジェットに対する制御条件を満たすか否かを判定する。
【００３１】
例えば、適応部品５１１は、ＮｕｍｂｅｒＬｉｍｉｔｅｒであり、オブジェクト５０４が表すテキストボックスに入力されるテキストを、数値に限定する。入力されたテキストが数値である場合、テキストボックスに対する制御条件が満たされ、そのキー入力が有効化される。一方、入力されたテキストが数値以外の場合、テキストボックスに対する制御条件が満たされず、そのキー入力が抑制される。これにより、テキストボックスに対して数値のみを入力することができる。
【００３２】
例えば、ユーザとしてはテキスト領域にカーソルを合わせてテキストを入力したつもりであっても、実際にはボタン上にカーソルが位置していた場合、ボタンにテキストを入力する機能はないので、テキストが入力されることはない。
【００３３】
適応部品５１３は、ボタンに有効な入力操作（クリック操作等）が行われているか否かを監視している。そこで、制御部４１２は、適応部品５１３を用いて、ボタンに対する操作が有効か否かを判定し、テキスト入力等の無効な操作が行われた場合、オブジェクト５０６の親ノードに対応するオブジェクト５０３に、発生した操作に対する処理を依頼する。
【００３４】
次に、制御部４１２は、オブジェクト５０３に付加された適応部品５１２を用いて、オブジェクト５０３の子ノードに対応するオブジェクト５０７を特定し、オブジェクト５０７に付加された適応部品５１４を用いて、オブジェクト５０７が表すテキスト領域に対する制御を行う。
【００３５】
これにより、ボタン上にカーソルが位置した状態でテキストが入力された場合であっても、そのボタンに最も近接しているテキスト領域に、そのテキストを入力することができる。
【００３６】
制御部４１２は、ウィジェットを表すオブジェクトに対して、ＡｕｔｏＣｏｍｐｌｅｔｅｒ、ＥｎａｂｌｅＣｈａｒＴｙｐｅＬｉｍｉｔｅｒ等の他の適応部品を付加することもできる。ＡｕｔｏＣｏｍｐｌｅｔｅｒは、テキストボックスに入力される文字に応じて、選択可能な文字列リストを動的に表示する。ＥｎａｂｌｅＣｈａｒＴｙｐｅＬｉｍｉｔｅｒは、テキストボックスに入力される文字の種類を、特定の種類に限定する。
【００３７】
図６は、倉庫内を走行するＡＧＶを制御する情報処理装置の機能的構成例を示している。図６の情報処理装置６０１は、記憶部６１１、制御部６１２、及び通信部６１３を含み、記憶部６１１は、倉庫内に存在する物体を表すオブジェクト情報６２１を記憶する。記憶部６１１、制御部６１２、及びオブジェクト情報６２１は、図２の記憶部２１１、制御部２１２、及びオブジェクト情報２２１にそれぞれ対応する。
【００３８】
倉庫内には、荷物を収納する可動式のラック６０３が設置されている。ＡＧＶ６０４は、車体６３１、車輪６３２、車輪６３３、及び荷台６３４を含み、ラック６０３内の棚に収納されている荷物６４１を荷台６３４に搭載して、別の地点まで搬送する。ＡＧＶ６０４は、フォークリフトであってもよい。
【００３９】
通信部６１３は、ラック６０３及びＡＧＶ６０４と通信することができる。制御部６１２は、通信部６１３を介して、ラック６０３及びＡＧＶ６０４に対して制御信号を送信することで、ラック６０３及びＡＧＶ６０４の動作を制御する。
【００４０】
図７は、オブジェクト情報６２１の例を示している。倉庫７０１の床７１１上には、ラック７１２−１〜ラック７１２−３が設置され、各ラック７１２−ｉ（ｉ＝１〜３）内には、１個又は複数の棚７１３−ｉが設けられている。各ラック７１２−ｉは、図６のラック６０３に対応する。
【００４１】
倉庫７０１の設計図７２１を表す設計情報は、ＸＭＬ（Extensible Markup Language）、ＪＳＯＮ（JavaScript（登録商標） Object Notation）等により記述される。制御部６１２は、あらかじめ生成プログラム７２２を実行することで、設計図７２１からオブジェクト情報６２１を自動的に生成する。開発者は、設計図７２１に基づいて、手作業でオブジェクト情報６２１を生成してもよい。
【００４２】
図７のオブジェクト情報６２１は、床オブジェクト７３１、ラックオブジェクト７３２、ラックオブジェクト７３３、及び棚オブジェクト７３４〜棚オブジェクト７３６を含む。床オブジェクト７３１は、木構造の根ノードに対応し、棚オブジェクト７３４〜棚オブジェクト７３６は、葉ノードに対応する。
【００４３】
ラックオブジェクト７３２は、棚オブジェクト７３４及び棚オブジェクト７３５の親ノードに対応し、ラックオブジェクト７３３は、棚オブジェクト７３６の親ノードに対応する。床オブジェクト７３１は、ラックオブジェクト７３２及びラックオブジェクト７３３の親ノードに対応する。
【００４４】
床オブジェクト７３１は、床７１１を表し、ラックオブジェクト７３２は、ラック７１２−１を表し、ラックオブジェクト７３３は、ラック７１２−２を表す。棚オブジェクト７３４及び棚オブジェクト７３５は、２個の棚７１３−１を表し、棚オブジェクト７３６は、１個の棚７１３−２を表す。
【００４５】
倉庫７０１内の環境は、動的に変化する。例えば、ＡＧＶ６０４は、倉庫７０１の外部から倉庫７０１に進入し、荷物を搭載して倉庫７０１内を移動する。そして、荷物の搬送が終了すると、倉庫７０１から退出する。ＡＧＶ６０４が倉庫７０１に進入することによって、オブジェクト情報６２１が表す環境内にＡＧＶ６０４が出現し、ＡＧＶ６０４が倉庫７０１から退出することによって、オブジェクト情報６２１が表す環境からＡＧＶ６０４が消滅する。
【００４６】
図８は、倉庫７０１に進入してきたＡＧＶ６０４の例を示している。図８のＡＧＶ６０４は、倉庫７０１の外部から、ラック７１２−１とラック７１２−２の間の通路に進入している。
【００４７】
このような環境の変化を検知する適応部品として、Ｆａｃｔｏｒｙが用いられる。Ｆａｃｔｏｒｙは、環境をモニタすることにより、又は制御部６１２から明示的に起動されることにより、そのＦａｃｔｏｒｙが付加されたオブジェクトが表す環境の変化を検知する。そして、環境の変化が検知された場合、Ｆａｃｔｏｒｙは、対応するオブジェクト及び適応部品の生成、移動、又は削除を行う。
【００４８】
図９は、Ｆａｃｔｏｒｙによって生成されるオブジェクトの例を示している。制御部６１２は、オブジェクト情報６２１の生成時に、各オブジェクトに対してＦａｃｔｏｒｙを付加することができる。図９の例では、床オブジェクト７３１に対してＦａｃｔｏｒｙ９１１が付加され、ラックオブジェクト７３２に対してＦａｃｔｏｒｙ９１２が付加され、棚オブジェクト７３４に対してＦａｃｔｏｒｙ９１３が付加されている。
【００４９】
Ｆａｃｔｏｒｙ９１１は、ＡＧＶ６０４が倉庫７０１に進入してきたことを検知すると、車体オブジェクト９０１、車輪オブジェクト９０２、及び荷台オブジェクト９０３を生成する。車体オブジェクト９０１は、車体６３１を表し、車輪オブジェクト９０２は、車輪６３２及び車輪６３３を表し、荷台オブジェクト９０３は、荷台６３４を表す。
【００５０】
次に、Ｆａｃｔｏｒｙ９１１は、車輪オブジェクト９０２及び荷台オブジェクト９０３を車体オブジェクト９０１に接続し、車体オブジェクト９０１を床オブジェクト７３１に接続する。車輪オブジェクト９０２及び荷台オブジェクト９０３は、葉ノードに対応し、車体オブジェクト９０１は、車輪オブジェクト９０２及び荷台オブジェクト９０３の親ノードに対応する。また、床オブジェクト７３１は、車体オブジェクト９０１の親ノードに対応する。
【００５１】
次に、Ｆａｃｔｏｒｙ９１１は、Ｆａｃｔｏｒｙ９２１〜Ｆａｃｔｏｒｙ９２３を生成する。そして、Ｆａｃｔｏｒｙ９１１は、Ｆａｃｔｏｒｙ９２１を車体オブジェクト９０１に付加し、Ｆａｃｔｏｒｙ９２２を車輪オブジェクト９０２に付加し、Ｆａｃｔｏｒｙ９２３を荷台オブジェクト９０３に付加する。
【００５２】
Ｆａｃｔｏｒｙ９１１は、ＡＧＶ６０４の動作を監視し、ＡＧＶ６０４が倉庫７０１から退出したことを検知すると、車体オブジェクト９０１、車輪オブジェクト９０２、及び荷台オブジェクト９０３を削除する。
【００５３】
さらに、制御部６１２は、オブジェクト情報６２１に含まれる各オブジェクトに対して、ＡＧＶ６０４の動作を制御する適応部品を付加することもできる。
【００５４】
図１０は、ＡＧＶ６０４の動作を制御する適応部品の例を示している。この例では、車輪オブジェクト９０２に対して適応部品１００１が付加され、荷台オブジェクト９０３に対して適応部品１００２又は適応部品１００３が付加される。
【００５５】
適応部品１００２及び適応部品１００３は、ＡＧＶ６０４の荷台６３４に対する荷物６４１の積載等のイベントが発生した際に、発生したイベントが荷台６３４に対する制御条件を満たすか否かを判定する。
【００５６】
荷台６３４に荷物６４１が搭載されることで、ＡＧＶ６０４の重心が移動した場合であっても、重心の移動量が許容範囲内であれば、ＡＧＶ６０４は、転倒したり荷物６４１を落としたりすることなく、走行することができる。そこで、荷台６３４に対する制御条件としては、重心の移動量が許容範囲内であるという条件が用いられる。
【００５７】
適応部品１００２は、荷台６３４に対するパッシブ制御を行うＢａｌａｎｃｅｒ＿ｃ１であり、イベントが発生した際に重心の移動量を計算する。重心の移動量が許容範囲内である場合、荷台６３４に対する制御条件が満たされ、重心の移動を補償するための制御は行われない。一方、重心の移動量が許容範囲を超えている場合、荷台６３４に対する制御条件が満たされず、親ノードに対応する車体オブジェクト９０１に対して、重心の移動量が通知される。これにより、子ノードにおいて処理することが難しいイベントの情報が、親ノードに対してエスカレートされる。
【００５８】
一方、適応部品１００３は、荷台６３４に対するアクティブ制御を行うＢａｌａｎｃｅｒ＿ｃ２であり、イベントが発生した際に重心の移動量を計算する。アクティブ制御の場合、荷台６３４自身がアクティブサスペンションを装備しており、重心の移動量が許容範囲を超えている場合、荷台６３４を動かすことで重心の移動を吸収することができる。そこで、荷台６３４に対する制御条件としては、重心の移動量が許容範囲内であるか、又は荷台６３４により重心の移動を補償可能である、という条件が用いられる。
【００５９】
したがって、重心の移動量が許容範囲を超えていても、荷台６３４により重心の移動を補償可能である場合は、荷台６３４に対する制御条件が満たされる。しかし、荷台６３４により重心の移動を補償不可能である場合は、荷台６３４に対する制御条件が満たされず、重心の移動量が、車体オブジェクト９０１を経由して、車体オブジェクト９０１に付加された適応部品１００４に通知される。
【００６０】
重心の移動量が適応部品１００４に通知された場合、適応部品１００４からの指示により、適応部品１００１は、車輪６３２及び車輪６３３に対するアクティブ制御を行う。車輪６３２及び車輪６３３に対するアクティブ制御を行っても、重心の移動を補償不可能である場合は、車輪６３２及び車輪６３３に対する制御条件が満たされず、重心の移動量が、床オブジェクト７３１を経由して、床オブジェクト７３１に付加された適応部品１００５に通知される。これにより、ＡＧＶ６０４の転倒又は荷物６４１の落下を防止するために、周囲のラック６０３を移動させてＡＧＶ６０４を支える等の制御が行われる。
【００６１】
制御部６１２は、荷台オブジェクト９０３に対して、適応部品１００２又は適応部品１００３以外の適応部品を付加することも可能である。例えば、荷物６４１が大きい場合、荷物６４１が周囲の物体にぶつからないように、荷物６４１の大きさ及び位置を監視するＢａｌａｎｃｅｒ＿ｃ３が、適応部品として用いられる。また、荷物６４１が重い場合、荷物６４１の重量を監視するＢａｌａｎｃｅｒ＿ｃ４が、適応部品として用いられる。
【００６２】
オブジェクト情報６２１に含まれるオブジェクトは、あらかじめ用意された生成ルールに従って生成される。例えば、生成ルールは、ＸＭＬスキーマを利用して記述することができる。オブジェクト情報６２１に対してオブジェクトを動的に追加するルールと、オブジェクト情報６２１からオブジェクトを動的に削除するルールも、あらかじめ用意される。
【００６３】
適応部品の生成ルールも、ＸＭＬスキーマを利用して記述することができる。この場合、フレキシブルに適応部品を入れ替えられるようにするため、適応部品はクラス化しておくことが望ましい。
【００６４】
図１１は、荷台オブジェクト９０３に付加されるＢａｌａｎｃｅｒ＿ｃ１及びＢａｌａｎｃｅｒ＿ｃ２の生成ルールの例を示している。この生成ルールでは、Ｂａｌａｎｃｅｒ＿ｃのクラス１１０１は、荷台オブジェクト９０３にアタッチ可能であり、Ｂａｌａｎｃｅｒ＿ｃの子クラスであるＢａｌａｎｃｅｒ＿ｃ１及びＢａｌａｎｃｅｒ＿ｃ２も、荷台オブジェクト９０３にアタッチ可能である。
【００６５】
このとき、「荷台オブジェクト９０３にＢａｌａｎｃｅｒ＿ｃをアタッチ可能」という生成ルールよりも、「Ｂａｌａｎｃｅｒ＿ｃは荷台オブジェクト９０３にアタッチ可能」という生成ルールの方が好ましい。後者の生成ルールのように、荷台オブジェクト９０３にＢａｌａｎｃｅｒ＿ｃの情報を含めないようにすることで、荷台オブジェクト９０３に対して様々な適応部品をアタッチすることが可能になる。
【００６６】
上述したように、倉庫７０１内の環境は動的に変化するため、環境の変化に応じて各オブジェクトに付加される適応部品も変化する。そこで、各オブジェクトに付加されているＦａｃｔｏｒｙが、環境の変化に応じて適応部品を選択する。制御部６１２は、１つのオブジェクトに対して複数の適応部品を付加することもできる。
【００６７】
図１２は、荷台オブジェクト９０３のＦａｃｔｏｒｙ９２３により選択される適応部品の例を示している。Ｆａｃｔｏｒｙ９２３は、荷台６３４がアクティブサスペンションを装備していない場合、Ｂａｌａｎｃｅｒ＿ｃ１を生成して荷台オブジェクト９０３に付加する。一方、荷台６３４がアクティブサスペンションを装備している場合、Ｆａｃｔｏｒｙ９２３は、Ｂａｌａｎｃｅｒ＿ｃ２を生成して荷台オブジェクト９０３に付加する。
【００６８】
図１３は、Ｂａｌａｎｃｅｒ＿ｃ１及びＢａｌａｎｃｅｒ＿ｃ２が行う処理の例を示している。図１３（ａ）は、Ｂａｌａｎｃｅｒ＿ｃ１が行う処理の例を示している。この場合、荷台６３４は、重心センサ１３０１を装備しており、アクティブサスペンションを装備していない。そこで、Ｂａｌａｎｃｅｒ＿ｃ１は、重心センサ１３０１からのセンサ情報を用いて重心の移動量を計算し、移動量が許容範囲を超えている場合、車体オブジェクト９０１に移動量を通知する。
【００６９】
図１３（ｂ）は、Ｂａｌａｎｃｅｒ＿ｃ２が行う処理の例を示している。この場合、荷台６３４は、重心センサ１３０１及びアクティブサスペンション１３０２を装備している。そこで、Ｂａｌａｎｃｅｒ＿ｃ２は、重心センサ１３０１からのセンサ情報を用いて重心の移動量を計算し、移動量が許容範囲を超えている場合、アクティブサスペンション１３０２により荷台６３４を動かすことで、重心の移動を補償する。荷台６３４を動かしても重心の移動を補償不可能である場合、Ｂａｌａｎｃｅｒ＿ｃ２は、車体オブジェクト９０１に移動量を通知する。
【００７０】
図１４は、車体オブジェクト９０１に付加される適応部品の例を示している。この例では、車輪オブジェクト９０２に対して適応部品１００１が付加され、荷台オブジェクト９０３に対してＢａｌａｎｃｅｒ＿ｃ２が付加され、車体オブジェクト９０１に対して適応部品１４０１が付加されている。適応部品１４０１は、図１０の適応部品１００４に対応し、適応部品１００１とともに車輪６３２及び車輪６３３に対するアクティブ制御を行うＢａｌａｎｃｅｒ＿ｖである。Ｂａｌａｎｃｅｒ＿ｖは、Ｂａｌａｎｃｅｒ＿ｃ２から通知される移動量に基づいて、車輪６３２及び車輪６３３により重心の移動を補償可能であるか否かを判定する。
【００７１】
図１５は、床オブジェクト７３１に付加される適応部品の例を示している。この例では、床オブジェクト７３１に対して適応部品１５０１が付加されている。適応部品１５０１は、図１０の適応部品１００５に対応し、ラック６０３に対するアクティブ制御を行うＢａｌａｎｃｅｒ＿ｆである。Ｂａｌａｎｃｅｒ＿ｆは、Ｂａｌａｎｃｅｒ＿ｖから通知される移動量を用いて、ラック６０３により重心の移動を補償可能であるか否かを判定する。
【００７２】
制御部６１２は、荷台６３４に積載される荷物６４１に応じて荷台６３４の機能を選択する適応部品を、荷台オブジェクト９０３に対して付加することもできる。例えば、荷台６３４の機能としては、大きな荷物６４１が周囲の物体にぶつからないように監視するセンサ、丸い形状の荷物６４１が転がらないように荷物６４１を支えるストッパ等が挙げられる。
【００７３】
あらかじめ荷台６４１にその機能が装備されている場合、適応部品により選択された機能を活性化することで、ＡＧＶ６０４は、荷物６４１に応じた適応動作を行うことができる。選択された機能が荷台６３４に装備されていない場合、ＡＧＶ６０４は、所定の荷台置き場まで移動して、その機能が装備された荷台６３４と交換する適応動作を行ってもよい。
【００７４】
図１６は、図９のＦａｃｔｏｒｙ９１１に記述されているオブジェクト生成処理の例を示すフローチャートである。まず、制御部６１２は、ＡＧＶ６０４から受信する情報に基づいて、オブジェクトを生成するか否かを判定する（ステップ１６０１）。例えば、制御部６１２は、オブジェクト情報６２１が表す環境内にＡＧＶ６０４が出現し、ＡＧＶ６０４から最初の応答信号を受信した場合、オブジェクトを生成すると判定する。
【００７５】
オブジェクトを生成する場合（ステップ１６０１，ＹＥＳ）、制御部６１２は、生成するオブジェクトを決定し（ステップ１６０２）、そのオブジェクトを生成して、オブジェクトの木構造に接続する（ステップ１６０３）。
【００７６】
例えば、ＡＧＶ６０４から最初の応答信号を受信した場合、制御部６１２は、車体オブジェクト９０１、車輪オブジェクト９０２、及び荷台オブジェクト９０３を生成する。そして、制御部６１２は、車輪オブジェクト９０２及び荷台オブジェクト９０３を車体オブジェクト９０１に接続し、車体オブジェクト９０１を床オブジェクト７３１に接続する。
【００７７】
次に、制御部６１２は、Ｆａｃｔｏｒｙを生成して、生成されたオブジェクトに付加する（ステップ１６０４）。例えば、制御部６１２は、Ｆａｃｔｏｒｙ９２１〜Ｆａｃｔｏｒｙ９２３を生成する。そして、制御部６１２は、Ｆａｃｔｏｒｙ９２１を車体オブジェクト９０１に付加し、Ｆａｃｔｏｒｙ９２２を車輪オブジェクト９０２に付加し、Ｆａｃｔｏｒｙ９２３を荷台オブジェクト９０３に付加する。
【００７８】
次に、制御部６１２は、生成されたＦａｃｔｏｒｙを呼び出して、そのＦａｃｔｏｒｙに記述されている処理を行う（ステップ１６０５）。
【００７９】
オブジェクトを生成しない場合（ステップ１６０１，ＮＯ）、制御部６１２は、オブジェクトを削除するか否かを判定する（ステップ１６０６）。例えば、制御部６１２は、オブジェクト情報６２１が表す環境からＡＧＶ６０４が消滅し、ＡＧＶ６０４から応答信号を受信しない場合、オブジェクトを削除すると判定する。
【００８０】
オブジェクトを削除する場合（ステップ１６０６，ＹＥＳ）、制御部６１２は、削除するオブジェクトを決定し（ステップ１６０７）、そのオブジェクトの親ノードに対応するオブジェクトに対して、オブジェクトの削除を通知する（ステップ１６０８）。そして、制御部６１２は、決定されたオブジェクトをオブジェクトの木構造から削除する（ステップ１６０９）。このとき、決定されたオブジェクトに付加されている適応部品も、同時に削除される。
【００８１】
例えば、ＡＧＶ６０４から応答信号を受信しない場合、制御部６１２は、車体オブジェクト９０１、車輪オブジェクト９０２、荷台オブジェクト９０３、及びＦａｃｔｏｒｙ９２１〜Ｆａｃｔｏｒｙ９２３を削除する。
【００８２】
オブジェクトを削除しない場合（ステップ１６０６，ＮＯ）、制御部６１２は、適応部品を生成するか否かを判定する（ステップ１６１０）。例えば、制御部６１２は、Ｂａｌａｎｃｅｒ＿ｖから床オブジェクト７３１に対して重心の移動量が通知されて、イベントに対する処理が依頼された場合、適応部品を生成すると判定する。
【００８３】
適応部品を生成する場合（ステップ１６１０，ＹＥＳ）、制御部６１２は、生成する適応部品を決定し（ステップ１６１１）、その適応部品を生成して、オブジェクトに付加する（ステップ１６１２）。例えば、制御部６１２は、Ｂａｌａｎｃｅｒ＿ｖから床オブジェクト７３１に対して重心の移動量が通知された場合、Ｂａｌａｎｃｅｒ＿ｆを生成して、床オブジェクト７３１に付加する。
【００８４】
適応部品を生成しない場合（ステップ１６１０，ＮＯ）、制御部６１２は、適応部品を削除するか否かを判定する（ステップ１６１３）。例えば、制御部６１２は、荷台６３４から荷物６４１が降ろされたことを示す情報を、ＡＧＶ６０４から受信した場合、発生したイベントが消滅したとみなし、適応部品を削除すると判定する。
【００８５】
適応部品を削除する場合（ステップ１６１３，ＹＥＳ）、制御部６１２は、削除する適応部品を決定し（ステップ１６１４）、その適応部品を削除する（ステップ１６１５）。例えば、制御部６１２は、荷物６４１が降ろされたことを示す情報を受信した場合、Ｂａｌａｎｃｅｒ＿ｆを削除する。
【００８６】
適応部品を削除しない場合（ステップ１６１３，ＮＯ）、制御部６１２は、処理を終了する。
【００８７】
図１６のオブジェクト生成処理によれば、オブジェクト情報６２１が表す環境内に制御対象が出現したとき、その制御対象を表すオブジェクトが生成され、制御対象が消滅したとき、その制御対象を表すオブジェクトが削除される。これにより、環境の変化に合わせてオブジェクトの木構造を更新することができる。
【００８８】
また、Ｂａｌａｎｃｅｒ＿ｖからイベントに対する処理が依頼されたとき、そのイベントを処理するＢａｌａｎｃｅｒ＿ｆが生成され、イベントが消滅したとき、Ｂａｌａｎｃｅｒ＿ｆが削除される。これにより、環境の変化に合わせて適応部品を更新することができる。
【００８９】
図１７は、図１６のステップ１６０５で呼び出されたＦａｃｔｏｒｙに記述されている適応部品生成処理の例を示すフローチャートである。まず、制御部６１２は、適応部品を生成するか否かを判定する（ステップ１７０１）。
【００９０】
適応部品を生成する場合（ステップ１７０１，ＹＥＳ）、制御部６１２は、生成する適応部品を決定し（ステップ１７０２）、その適応部品を生成して、オブジェクトに付加する（ステップ１７０３）。
【００９１】
例えば、荷台オブジェクト９０３に付加されたＦａｃｔｏｒｙ９２３が呼び出された場合、制御部６１２は、荷台６３４に荷物６４１が積載されたことを示す情報を、ＡＧＶ６０４から受信したか否かをチェックする。荷物６４１が積載されたことを示す情報を受信した場合、制御部６１２は、適応部品を生成すると判定する。
【００９２】
そして、制御部６１２は、荷台６３４がアクティブサスペンションを装備していない場合、Ｂａｌａｎｃｅｒ＿ｃ１を生成して、荷台オブジェクト９０３に付加する。一方、荷台６３４がアクティブサスペンションを装備している場合、制御部６１２は、Ｂａｌａｎｃｅｒ＿ｃ２を生成して、荷台オブジェクト９０３に付加する。
【００９３】
制御部６１２は、荷物６４１の大きさ及び位置を監視するＢａｌａｎｃｅｒ＿ｃ３を生成して、荷台オブジェクト９０３に付加してもよい。
【００９４】
また、車体オブジェクト９０１に付加されたＦａｃｔｏｒｙ９２１が呼び出された場合、制御部６１２は、Ｂａｌａｎｃｅｒ＿ｃ１又はＢａｌａｎｃｅｒ＿ｃ２から車体オブジェクト９０１に対して、重心の移動量が通知されたか否かをチェックする。重心の移動量が通知されて、イベントに対する処理が依頼された場合、制御部６１２は、適応部品を生成すると判定する。
【００９５】
制御部６１２は、荷物６４１の大きさを示す情報をＡＧＶ６０４から受信し、Ｂａｌａｎｃｅｒ＿ｃ３は、その情報を車体オブジェクト９０１に通知する。そして、制御部６１２は、車体オブジェクト９０１に通知された荷物６４１の大きさが、荷台６３４の大きさを超えている場合、Ｂａｌａｎｃｅｒ＿ｖを生成して、車体オブジェクト９０１に付加する。
【００９６】
適応部品を生成しない場合（ステップ１７０１，ＮＯ）、制御部６１２は、適応部品を削除するか否かを判定する（ステップ１７０４）。例えば、制御部６１２は、荷台６３４から荷物６４１が降ろされたことを示す情報を、ＡＧＶ６０４から受信した場合、適応部品を削除すると判定する。
【００９７】
適応部品を削除する場合（ステップ１７０４，ＹＥＳ）、制御部６１２は、削除する適応部品を決定し（ステップ１７０５）、その適応部品を削除する（ステップ１７０６）。
【００９８】
例えば、Ｆａｃｔｏｒｙ９２３が呼び出され、荷物６４１が降ろされたことを示す情報を受信した場合、制御部６１２は、Ｂａｌａｎｃｅｒ＿ｃ１又はＢａｌａｎｃｅｒ＿ｃ２と、Ｂａｌａｎｃｅｒ＿ｃ３とを削除する。また、Ｆａｃｔｏｒｙ９２１が呼び出され、荷物６４１が降ろされたことを示す情報を受信した場合、制御部６１２は、Ｂａｌａｎｃｅｒ＿ｖを削除する。
【００９９】
適応部品を削除しない場合（ステップ１７０４，ＮＯ）、制御部６１２は、処理を終了する。
【０１００】
図１７の適応部品生成処理によれば、荷台６３４に荷物６４１が積載されたとき、そのイベントを処理するＢａｌａｎｃｅｒ＿ｃ１、Ｂａｌａｎｃｅｒ＿ｃ２、又はＢａｌａｎｃｅｒ＿ｃ３が生成され、イベントが消滅したとき、それらの適応部品が削除される。また、Ｂａｌａｎｃｅｒ＿ｃ１又はＢａｌａｎｃｅｒ＿ｃ２からイベントに対する処理が依頼されたとき、そのイベントを処理するＢａｌａｎｃｅｒ＿ｖが生成され、イベントが消滅したとき、Ｂａｌａｎｃｅｒ＿ｖが削除される。これにより、環境の変化に合わせて適応部品を更新することができる。
【０１０１】
図１８は、図１３のＢａｌａｎｃｅｒ＿ｃ２に記述されている制御処理の例を示すフローチャートである。まず、制御部６１２は、重心センサ１３０１からのセンサ情報を用いて重心の移動量を計算し（ステップ１８０１）、移動量が許容範囲内であるか否かをチェックする（ステップ１８０２）。移動量が許容範囲内である場合（ステップ１８０２，ＹＥＳ）、制御部６１２は、処理を終了する。
【０１０２】
一方、移動量が許容範囲を超えている場合（ステップ１８０２，ＮＯ）、制御部６１２は、アクティブサスペンション１３０２により荷台６３４を動かすことで、重心の移動を補償可能であるか否かをチェックする（ステップ１８０３）。
【０１０３】
重心の移動を補償可能である場合（ステップ１８０３，ＹＥＳ）、制御部６１２は、荷台６３４による補償動作を指示する制御信号を、ＡＧＶ６０４へ送信する（ステップ１８０５）。そして、ＡＧＶ６０４は、アクティブサスペンション１３０２により荷台６３４を動かすことで、重心の移動を補償する。
【０１０４】
一方、荷台６３４を動かしても重心の移動を補償不可能である場合（ステップ１８０３，ＮＯ）、Ｂａｌａｎｃｅｒ＿ｃ２は、車体オブジェクト９０１に移動量を通知して、イベントに対する処理を依頼する（ステップ１８０４）。
【０１０５】
図１９は、図１４のＢａｌａｎｃｅｒ＿ｖに記述されている制御処理の例を示すフローチャートである。まず、制御部６１２は、Ｂａｌａｎｃｅｒ＿ｃ２から車体オブジェクト９０１に通知された移動量を用いて、その移動量を補償するための補正量を計算する（ステップ１９０１）。そして、制御部６１２は、車輪６３２及び車輪６３３の動作を、計算された補正量だけ補正できるか否かをチェックする（ステップ１９０２）。
【０１０６】
車輪６３２及び車輪６３３の動作を補正可能である場合（ステップ１９０２，ＹＥＳ）、制御部６１２は、車輪６３２及び車輪６３３による補償動作を指示する制御信号を、ＡＧＶ６０４へ送信する（ステップ１９０４）。そして、ＡＧＶ６０４は、車輪６３２及び車輪６３３の動作を補正することで、重心の移動を補償する。例えば、ＡＧＶ６０４は、前進したり、後退したり、左又は右へ曲がったり、停止したりすることで、重心の移動を補償することができる。
【０１０７】
一方、車輪６３２及び車輪６３３の動作を補正不可能である場合（ステップ１９０２，ＮＯ）、Ｂａｌａｎｃｅｒ＿ｖは、床オブジェクト７３１に移動量を通知して、イベントに対する処理を依頼する（ステップ１９０３）。
【０１０８】
図２０は、図１５のＢａｌａｎｃｅｒ＿ｆに記述されている制御処理の例を示すフローチャートである。まず、制御部６１２は、Ｂａｌａｎｃｅｒ＿ｖから床オブジェクト７３１に通知された移動量を用いて、その移動量を補償するための補正量を計算する（ステップ２００１）。そして、制御部６１２は、ラック６０３の位置を、計算された補正量だけ補正できるか否かをチェックする（ステップ２００２）。
【０１０９】
ラック６０３の位置を補正可能である場合（ステップ２００２，ＹＥＳ）、制御部６１２は、ラック６０３による補償動作を指示する制御信号を、ラック６０３へ送信する（ステップ２００４）。そして、ラック６０３は、指示された補正量だけ移動する。例えば、ラック６０３がＡＧＶ６０４の近くまで移動することで、転倒しかけたＡＧＶ６０４を支えたり、落下しかけた荷物６４１を受け止めたりすることができる。
【０１１０】
一方、ラック６０３の位置を補正不可能である場合（ステップ２００２，ＮＯ）、制御部６１２は、転倒対策を行う（ステップ２００３）。例えば、転倒対策としては、管理者に対してＡＧＶ６０４の転倒を通知したり、ＡＧＶ６０４が走行している通路を通行止めにしたりする処理が行われる。
【０１１１】
実施形態の情報処理装置は、Ｗｅｂ画面又はＡＧＶの制御に限らず、ソフトウェアの実行環境に存在する様々な制御対象の制御に対して適用することができる。例えば、車両のナビゲーションシステムにおいて事故、渋滞等のイベントが発生した場合に、ドライバに対して提示される推奨経路を変更する制御を行うことも可能である。また、無人車両の場合は、変更後の推奨経路を自動走行させる制御を行うことも可能である。
【０１１２】
以上説明したように、実施形態の情報処理装置によれば、ソフトウェアが遭遇する様々な不確実性に対して、フレキシブルに対処することができる。制御対象において発生した問題に対処する適応部品を、オブジェクトとは別に管理することによって、イベントに応じて適応部品を入れ替えることが可能である。適応部品の入れ替えは、情報処理装置の運用中に動的に行うことができる。
【０１１３】
また、現実世界に存在する事物をオブジェクトの木構造で表すことで、木構造の下位レベルで処理することが難しいイベントを、上位レベルで処理することが可能になる。言い換えれば、局所的な問題は局所的に解決することができ、局所的な問題がソフトウェア全体に対して大きな影響を及ぼすことはない。一方、局所的に解決不可能な問題又は想定外の問題は、広範囲の制御対象を管理する上位レベルのオブジェクトによって、大局的に解決することができる。
【０１１４】
さらに、ＩｏＴ等のシステムにおいて、変化する外部環境に対処するソフトウェアを容易に生成することができる。この場合、現実世界に存在する事物が制御対象に相当し、適応部品によって、外部環境の変化に応じた制御が実現される。適応部品は、制御対象を表すオブジェクトとは独立に進化させることができる。
【０１１５】
図２、図４、及び図６の情報処理装置の構成は一例に過ぎず、情報処理装置の用途又は条件に応じて一部の構成要素を省略又は変更してもよい。
【０１１６】
図３及び図１６〜図２０のフローチャートは一例に過ぎず、情報処理装置の構成又は条件に応じて一部の処理を省略又は変更してもよい。
【０１１７】
図５、図７、図９、及び図１０に示したオブジェクト情報は一例に過ぎず、オブジェクト情報は、制御対象に応じて変化する。図７及び図８に示した倉庫内の物体の配置は一例に過ぎず、配置される物体は、倉庫に応じて変化する。図５及び図９〜図１５に示した適応部品は一例に過ぎず、適応部品は、制御対象及び適応動作に応じて変化する。
【０１１８】
図２１は、図２の情報処理装置２０１、図４の情報処理装置４０１、及び図６の情報処理装置６０１のハードウェア構成例を示している。図２１の情報処理装置は、ＣＰＵ（Central Processing Unit）２１０１、メモリ２１０２、入力装置２１０３、出力装置２１０４、補助記憶装置２１０５、媒体駆動装置２１０６、及びネットワーク接続装置２１０７を含む。これらの構成要素はハードウェアであり、バス２１０８により互いに接続されている。
【０１１９】
メモリ２１０２は、例えば、ＲＯＭ（Read Only Memory）、ＲＡＭ（Random Access Memory）、フラッシュメモリ等の半導体メモリであり、処理に用いられるプログラム及びデータを記憶する。メモリ２１０２は、図２の記憶部２１１、図４の記憶部４１１、又は図６の記憶部６１１として用いることができる。
【０１２０】
ＣＰＵ２１０１（プロセッサ）は、例えば、メモリ２１０２を利用してプログラムを実行することにより、図２の制御部２１２、図４の制御部４１２、又は図６の制御部６１２として動作する。
【０１２１】
入力装置２１０３は、例えば、キーボード、ポインティングデバイス等であり、オペレータ又はユーザからの指示又は情報の入力に用いられる。出力装置２１０４は、例えば、表示装置、プリンタ、スピーカ等であり、オペレータ又はユーザへの問い合わせ又は指示、及び処理結果の出力に用いられる。処理結果は、Ｗｅｂ画面であってもよく、ＡＧＶ６０４の転倒を示す情報であってもよい。出力装置２１０４は、図４の表示部４１３として用いることができる。
【０１２２】
補助記憶装置２１０５は、例えば、磁気ディスク装置、光ディスク装置、光磁気ディスク装置、テープ装置等である。補助記憶装置２１０５は、ハードディスクドライブ又はフラッシュメモリであってもよい。情報処理装置は、補助記憶装置２１０５にプログラム及びデータを格納しておき、それらをメモリ２１０２にロードして使用することができる。補助記憶装置２１０５は、図２の記憶部２１１、図４の記憶部４１１、又は図６の記憶部６１１として用いることができる。
【０１２３】
媒体駆動装置２１０６は、可搬型記録媒体２１０９を駆動し、その記録内容にアクセスする。可搬型記録媒体２１０９は、メモリデバイス、フレキシブルディスク、光ディスク、光磁気ディスク等である。可搬型記録媒体２１０９は、ＣＤ−ＲＯＭ（Compact Disk Read Only Memory）、ＤＶＤ（Digital Versatile Disk）、ＵＳＢ（Universal Serial Bus）メモリ等であってもよい。オペレータ又はユーザは、この可搬型記録媒体２１０９にプログラム及びデータを格納しておき、それらをメモリ２１０２にロードして使用することができる。
【０１２４】
このように、処理に用いられるプログラム及びデータを格納するコンピュータ読み取り可能な記録媒体は、メモリ２１０２、補助記憶装置２１０５、又は可搬型記録媒体２１０９のような、物理的な（非一時的な）記録媒体である。
【０１２５】
ネットワーク接続装置２１０７は、ＬＡＮ（Local Area Network）、ＷＡＮ（Wide Area Network）等の通信ネットワークに接続され、通信に伴うデータ変換を行う通信インタフェース回路である。情報処理装置は、プログラム及びデータを外部の装置からネットワーク接続装置２１０７を介して受信し、それらをメモリ２１０２にロードして使用することができる。ネットワーク接続装置２１０７は、図６の通信部６１３として用いることができる。
【０１２６】
なお、情報処理装置が図２１のすべての構成要素を含む必要はなく、用途又は条件に応じて一部の構成要素を省略することも可能である。例えば、オペレータ又はユーザとのインタフェースが不要な場合は、入力装置２１０３及び出力装置２１０４を省略してもよい。可搬型記録媒体２１０９又は通信ネットワークを使用しない場合は、媒体駆動装置２１０６又はネットワーク接続装置２１０７を省略してもよい。
【０１２７】
開示の実施形態とその利点について詳しく説明したが、当業者は、特許請求の範囲に明確に記載した本発明の範囲から逸脱することなく、様々な変更、追加、省略をすることができるであろう。
【０１２８】
図２乃至図２１を参照しながら説明した実施形態に関し、さらに以下の付記を開示する。
（付記１）
複数の制御対象のうち第１制御対象において発生したイベントが、前記複数の制御対象それぞれを表すオブジェクトを含む、オブジェクトの木構造において、前記第１制御対象を表す第１オブジェクトによる制御の条件を満たさない場合、前記第１オブジェクトの親ノードに対応する第２オブジェクトに、前記イベントに対する処理を依頼し、
前記第２オブジェクトを介して、前記複数の制御対象のうち第２制御対象を制御する、
処理をコンピュータに実行させるためのプログラム。
（付記２）
前記プログラムは、前記イベントが前記第１制御対象に対する制御条件を満たすか否かを判定する第１プログラム部品を、前記第１オブジェクトに対して付加し、前記イベントが前記第２制御対象に対する制御条件を満たすか否かを判定する第２プログラム部品を、前記第２オブジェクトに対して付加する処理を、前記コンピュータにさらに実行させ、
前記コンピュータは、前記第１プログラム部品を用いて、前記イベントが前記第１制御対象に対する制御条件を満たすか否かを判定し、前記イベントが前記第１制御対象に対する制御条件を満たさない場合、前記第２オブジェクトに前記イベントに対する処理を依頼し、前記第２プログラム部品を用いて、前記イベントが前記第２制御対象に対する制御条件を満たすか否かを判定し、前記イベントが前記第２制御対象に対する制御条件を満たす場合、前記第２制御対象を制御することを特徴とする付記１記載のプログラム。
（付記３）
前記プログラムは、前記オブジェクトの木構造の根ノードに対応する第３オブジェクトに対して、第３プログラム部品を付加し、前記オブジェクトの木構造が表す環境内に前記第１制御対象及び前記第２制御対象が出現したとき、前記第３プログラム部品を用いて、前記第１オブジェクト及び前記第２オブジェクトを生成する処理を、前記コンピュータにさらに実行させることを特徴とする付記２記載のプログラム。
（付記４）
前記プログラムは、前記オブジェクトの木構造が表す環境から前記第１制御対象及び前記第２制御対象が消滅したとき、前記第３プログラム部品を用いて、前記第１オブジェクト及び前記第２オブジェクトを削除する処理を、前記コンピュータにさらに実行させることを特徴とする付記３記載のプログラム。
（付記５）
前記プログラムは、前記第１オブジェクト及び前記第２オブジェクトが生成されたとき、前記第１オブジェクトに対して第４プログラム部品を付加し、前記第２オブジェクトに対して第５プログラム部品を付加し、前記イベントが発生したとき、前記第４プログラム部品を用いて前記第１プログラム部品を生成し、前記第２オブジェクトに前記イベントに対する処理が依頼されたとき、前記第５プログラム部品を用いて前記第２プログラム部品を生成する処理を、前記コンピュータにさらに実行させることを特徴とする付記３又は４記載のプログラム。
（付記６）
前記プログラムは、前記イベントが消滅したとき、前記第４プログラム部品を用いて前記第１プログラム部品を削除し、前記第５プログラム部品を用いて前記第２プログラム部品を削除する処理を、前記コンピュータにさらに実行させることを特徴とする付記５記載のプログラム。
（付記７）
複数の制御対象それぞれを表すオブジェクトを含む、オブジェクトの木構造を表すオブジェクト情報を記憶する記憶部と、
前記複数の制御対象のうち第１制御対象において発生したイベントが、前記オブジェクトの木構造において、前記第１制御対象を表す第１オブジェクトによる制御の条件を満たさない場合、前記第１オブジェクトの親ノードに対応する第２オブジェクトに、前記イベントに対する処理を依頼し、前記第２オブジェクトを介して、前記複数の制御対象のうち第２制御対象を制御する制御部と、
を備えることを特徴とする情報処理装置。
（付記８）
前記制御部は、前記イベントが前記第１制御対象に対する制御条件を満たすか否かを判定する第１プログラム部品を、前記第１オブジェクトに対して付加し、前記イベントが前記第２制御対象に対する制御条件を満たすか否かを判定する第２プログラム部品を、前記第２オブジェクトに対して付加し、前記第１プログラム部品を用いて、前記イベントが前記第１制御対象に対する制御条件を満たすか否かを判定し、前記イベントが前記第１制御対象に対する制御条件を満たさない場合、前記第２オブジェクトに前記イベントに対する処理を依頼し、前記第２プログラム部品を用いて、前記イベントが前記第２制御対象に対する制御条件を満たすか否かを判定し、前記イベントが前記第２制御対象に対する制御条件を満たす場合、前記第２制御対象を制御することを特徴とする付記７記載の情報処理装置。
（付記９）
前記制御部は、前記オブジェクトの木構造の根ノードに対応する第３オブジェクトに対して、第３プログラム部品を付加し、前記オブジェクトの木構造が表す環境内に前記第１制御対象及び前記第２制御対象が出現したとき、前記第３プログラム部品を用いて、前記第１オブジェクト及び前記第２オブジェクトを生成することを特徴とする付記８記載の情報処理装置。
（付記１０）
前記制御部は、前記オブジェクトの木構造が表す環境から前記第１制御対象及び前記第２制御対象が消滅したとき、前記第３プログラム部品を用いて、前記第１オブジェクト及び前記第２オブジェクトを削除することを特徴とする付記９記載の情報処理装置。
（付記１１）
コンピュータによって実行される情報処理方法であって、
前記コンピュータが、
複数の制御対象のうち第１制御対象において発生したイベントが、前記複数の制御対象それぞれを表すオブジェクトを含む、オブジェクトの木構造において、前記第１制御対象を表す第１オブジェクトによる制御の条件を満たさない場合、前記第１オブジェクトの親ノードに対応する第２オブジェクトに、前記イベントに対する処理を依頼し、
前記第２オブジェクトを介して、前記複数の制御対象のうち第２制御対象を制御する、
ことを特徴とする情報処理方法。
（付記１２）
前記コンピュータは、前記イベントが前記第１制御対象に対する制御条件を満たすか否かを判定する第１プログラム部品を、前記第１オブジェクトに対して付加し、前記イベントが前記第２制御対象に対する制御条件を満たすか否かを判定する第２プログラム部品を、前記第２オブジェクトに対して付加し、前記第１プログラム部品を用いて、前記イベントが前記第１制御対象に対する制御条件を満たすか否かを判定し、前記イベントが前記第１制御対象に対する制御条件を満たさない場合、前記第２オブジェクトに前記イベントに対する処理を依頼し、前記第２プログラム部品を用いて、前記イベントが前記第２制御対象に対する制御条件を満たすか否かを判定し、前記イベントが前記第２制御対象に対する制御条件を満たす場合、前記第２制御対象を制御することを特徴とする付記１１記載の情報処理方法。
（付記１３）
前記コンピュータは、前記オブジェクトの木構造の根ノードに対応する第３オブジェクトに対して、第３プログラム部品を付加し、前記オブジェクトの木構造が表す環境内に前記第１制御対象及び前記第２制御対象が出現したとき、前記第３プログラム部品を用いて、前記第１オブジェクト及び前記第２オブジェクトを生成することを特徴とする付記１２記載の情報処理方法。
（付記１４）
前記コンピュータは、前記オブジェクトの木構造が表す環境から前記第１制御対象及び前記第２制御対象が消滅したとき、前記第３プログラム部品を用いて、前記第１オブジェクト及び前記第２オブジェクトを削除することを特徴とする付記１３記載の情報処理方法。
【符号の説明】
【０１２９】
２０１、４０１、６０１  情報処理装置
２１１、４１１、６１１  記憶部
２１２、４１２、６１２  制御部
２２１、４２１、６２１  オブジェクト情報
４１３  表示部
５０１〜５０７  オブジェクト
５１１〜５１４、１００１〜１００５、１４０１、１５０１  適応部品
６０３、７１２−１〜７１２−３  ラック
６０４  ＡＧＶ
６１３  通信部
６３１  車体
６３２、６３３  車輪
６３４  荷台
６４１  荷物
７０１  倉庫
７１１  床
７１３−１〜７１３−３  棚
７２１  設計図
７２２  生成プログラム
７３１  床オブジェクト
７３２、７３３  ラックオブジェクト
７３４〜７３６  棚オブジェクト
９０１  車体オブジェクト
９０２  車輪オブジェクト
９０３  荷台オブジェクト
９１１〜９１３、９２１〜９２３  Ｆａｃｔｏｒｙ
１１０１  クラス
１３０１  重心センサ
１３０２  アクティブサスペンション
２１０１  ＣＰＵ
２１０２  メモリ
２１０３  入力装置
２１０４  出力装置
２１０５  補助記憶装置
２１０６  媒体駆動装置
２１０７  ネットワーク接続装置
２１０８  バス
２１０９  可搬型記録媒体
【図１】
2020190838.tif 000003
【図２】
2020190838.tif 000004
【図３】
2020190838.tif 000005
【図４】
2020190838.tif 000006
【図５】
2020190838.tif 000007
【図６】
2020190838.tif 000008
【図７】
2020190838.tif 000009
【図８】
2020190838.tif 000010
【図９】
2020190838.tif 000011
【図１０】
2020190838.tif 000012
【図１１】
2020190838.tif 000013
【図１２】
2020190838.tif 000014
【図１３】
2020190838.tif 000015
【図１４】
2020190838.tif 000016
【図１５】
2020190838.tif 000017
【図１６】
2020190838.tif 000018
【図１７】
2020190838.tif 000019
【図１８】
2020190838.tif 000020
【図１９】
2020190838.tif 000021
【図２０】
2020190838.tif 000022
【図２１】
2020190838.tif 000023