(57)【要約】  プログラムの開発に利用される情報処理装置を提供する。  情報処理装置は、呼び出されるべき動作の順序を定義する行動検証シナリオを保持する保持部と、前記プログラムが順次呼び出する動作と前記行動検証シナリオを比較して、前記プログラムの評価又は検証を行なう評価部を備える。プログラム実行制御部は、外部から入力される環境情報に応じて前記プログラムを駆動し、前記評価部は、前記プログラム実行制御部により前記環境情報に応じて順次呼び出す動作と前記行動検証シナリオで定義される動作の順序とを比較して、前記プログラムの評価又は検証を行なう。
2018180143.tif 000002
【特許請求の範囲】
【請求項１】
適応制御装置が環境に応じた動作を実行するように記述されたプログラムを処理する情報処理装置であって、
呼び出されるべき動作の順序を定義する行動検証シナリオを保持する保持部と、
前記プログラムが順次呼び出す動作と前記行動検証シナリオを比較して、前記プログラムの評価又は検証を行なう評価部と、
を具備する情報処理装置。
【請求項２】
外部から入力される環境情報に応じて、前記プログラムの駆動を制御するプログラム実行制御部をさらに備え、
前記評価部は、前記プログラム実行制御部により駆動される前記プログラムが前記環境情報に応じて順次呼び出す動作と前記行動検証シナリオで定義される動作の順序とを比較して、前記プログラムの評価又は検証を行なう、
請求項１に記載の情報処理装置。
【請求項３】
前記プログラム実行制御部は、外部から入力される擬似的な環境情報に応じた動作を呼び出し、
前記評価部は、前記プログラム実行制御部により駆動される前記プログラムが前記擬似的な環境情報に応じて順次呼び出す動作と前記行動検証シナリオで定義される動作の順序とを比較して、前記プログラムの評価又は検証を行なう、
請求項２に記載の情報処理装置。
【請求項４】
前記行動検証シナリオ通りの動作が順序で呼び出されるように想定して定義される前記擬似的な環境情報を前記プログラム実行制御部に対して出力する擬似環境情報出力部をさらに備える、
請求項３に記載の情報処理装置。
【請求項５】
前記評価部は、前記適応制御装置のシミュレータにより駆動される前記プログラムが順次呼び出す動作と前記行動検証シナリオで定義される動作の順序とを比較して、前記プログラムの評価又は検証を行なう、
請求項１に記載の情報処理装置。
【請求項６】
前記シミュレータは、前記シミュレータ内の仮想環境を認識して得られる仮想的な環境情報に応じて前記プログラムを駆動し、
前記評価部は、前記シミュレータにより駆動される前記プログラムが前記仮想的な環境情報に応じて順次呼び出す動作と前記行動検証シナリオで定義される動作の順序とを比較して、前記プログラムの評価又は検証を行なう、
請求項５に記載の情報処理装置。
【請求項７】
前記評価部は、前記適応制御装置上により実際に駆動される前記プログラムが順次呼び出す動作と前記行動検証シナリオで定義される動作の順序とを比較して、前記プログラムの評価又は検証を行なう、
請求項１に記載の情報処理装置。
【請求項８】
前記適応制御装置は環境情報を認識する認識部をさらに備え、
前記適応制御装置上で駆動する前記プログラムは、前記認識部において認識される現実の環境情報に応じて動作を呼び出し、
前記評価部は、前記適応制御装置により駆動される前記プログラムが前記認識部において認識された現実の環境情報に応じて順次呼び出す動作と前記行動検証シナリオで定義される動作の順序とを比較して、前記プログラムの評価又は検証を行なう、
請求項７に記載の情報処理装置。
【請求項９】
前記プログラム実行制御部は、前記プログラムを駆動する適応制御装置において認識された環境情報を外部から入力して、前記プログラムの駆動を制御し、
前記評価部は、前記プログラム実行制御部により駆動される前記プログラムが、前記プログラムを駆動する適応制御装置において認識された環境情報に応じて順次呼び出す動作と前記行動検証シナリオで定義される動作の順序とを比較して、前記プログラムの評価又は検証を行なう、
請求項２に記載の情報処理装置。
【請求項１０】
前記評価部は、評価対象となる前記プログラムが呼び出す動作の順序を前記行動検証シナリオに定義された順番と比較し、同一でない場合には前記プログラムの異常を検出する、
請求項１に記載の情報処理装置。
【請求項１１】
適応制御装置が環境に応じた動作を実行するように記述されたプログラムを処理する情報処理方法であって、
呼び出されるべき動作の順序を定義する行動検証シナリオを読み出すステップと、
前記プログラムが順次呼び出す動作と前記行動検証シナリオを比較して、前記プログラムの評価又は検証を行なう評価ステップと、
を有する情報処理方法。
【請求項１２】
呼び出されるべき動作の順序を定義する行動検証シナリオを保持する保持部、
適応制御装置が環境に応じた動作を実行するように記述されたプログラムが順次呼び出す動作と前記行動検証シナリオを比較して、前記プログラムの評価又は検証を行なう評価部、
として機能するようにコンピュータ可読形式で記述されたコンピュータ・プログラム。
【請求項１３】
適応制御装置が環境に応じた動作を制御する制御プログラムを製造するプログラム製造方法であって、
前記制御プログラムに、呼び出されるべき動作の順序を定義する行動検証シナリオを設定する行動シナリオ設定ステップと、
前記制御プログラムに、前記プログラムが順次呼び出す動作と前記行動検証シナリオを比較して前記プログラムの評価又は検証を行なう条件を設定する検証条件設定ステップと、
を具備するプログラム製造方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本明細書で開示する技術は、プログラムの開発に利用され又はプログラムの開発を支援する情報処理装置及び情報処理方法、コンピュータ・プログラム、並びにプログラム製造方法に関する。
【背景技術】
【０００２】
近年のロボティクス技術の進歩は目覚ましく、さまざまな産業分野の作業現場に広く浸透してきている。ロボットは、例えば複数のリンクとリンク間を接続する関節で構成され、モータなどの関節駆動用のアクチュエータを用いて各節を駆動することによってロボットは動作する。【０００３】
自律型若しくは適応制御型と呼ばれるロボットは、オペレータやマスタ装置からの指示を待つことなく、自律的若しくは適応的に行動制御を行なう。具体的には、ロボットの外部環境や内部状態を常時検証（あるいは、評価、モニタリング）し、外部環境又は内部状態の認識結果が所定の遷移条件に適合する動作を順次起動していくことで、現在置かれている状況に適した振舞いを実現する（例えば、特許文献１を参照のこと）。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２００３−３３４７８５号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
本明細書で開示する技術の目的は、プログラムの開発に利用され又はプログラムの開発を支援する情報処理装置及び情報処理方法、コンピュータ・プログラム、並びにプログラム製造方法を提供することにある。
【課題を解決するための手段】
【０００６】
本明細書で開示する技術は、上記課題を参酌してなされたものであり、その第１の側面は、適応制御装置が環境に応じた動作を実行するように記述されたプログラムを処理する情報処理装置であって、
呼び出されるべき動作の順序を定義する行動検証シナリオを保持する保持部と、
前記プログラムが順次呼び出す動作と前記行動検証シナリオを比較して、前記プログラムの評価又は検証を行なう評価部と、
を具備する情報処理装置である。【０００７】
情報処理装置は、外部から入力される環境情報に応じて、前記プログラムの駆動を制御するプログラム実行制御部をさらに備えてもよい。この場合、前記評価部は、前記プログラム実行制御部により駆動される前記プログラムが前記環境情報に応じて順次呼び出す動作と前記行動検証シナリオで定義される動作の順序とを比較することにより、シミュレータや適応制御装置の実機を用いることなく、単体で前記プログラムの評価又は検証を行なうことができる。【０００８】
あるいは、前記評価部は、前記適応制御装置のシミュレータにより駆動される前記プログラムが順次呼び出す動作と前記行動検証シナリオで定義される動作の順序とを比較して、シミュレータ上で前記プログラムの評価又は検証を行なうことができる。【０００９】
あるいは、前記評価部は、前記適応制御装置上により実際に駆動される前記プログラムが順次呼び出す動作と前記行動検証シナリオで定義される動作の順序とを比較して、実機上で前記プログラムの評価又は検証を行なうことができる。【００１０】
また、本明細書で開示する技術の第２の側面は、適応制御装置が環境に応じた動作を実行するように記述されたプログラムを処理する情報処理方法であって、
呼び出されるべき動作の順序を定義する行動検証シナリオを読み出すステップと、
前記プログラムが順次呼び出す動作と前記行動検証シナリオを比較して、前記プログラムの評価又は検証を行なう評価ステップと、
を有する情報処理方法である。【００１１】
また、本明細書で開示する技術の第３の側面は、
呼び出されるべき動作の順序を定義する行動検証シナリオを保持する保持部、
適応制御装置が環境に応じた動作を実行するように記述されたプログラムが順次呼び出す動作と前記行動検証シナリオを比較して、前記プログラムの評価又は検証を行なう評価部、
として機能するようにコンピュータ可読形式で記述されたコンピュータ・プログラムである。【００１２】
第３の側面に係るコンピュータ・プログラムは、コンピュータ上で所定の処理を実現するようにコンピュータ可読形式で記述されたコンピュータ・プログラムを定義したものである。換言すれば、本願の請求項に係るコンピュータ・プログラムをコンピュータにインストールすることによって、コンピュータ上では協働的作用が発揮され、第１の側面に係る装置と同様の作用効果を得ることができる。【００１３】
また、本明細書で開示する技術の第４の側面は、適応制御装置が環境に応じた動作を制御する制御プログラムを製造するプログラム製造方法であって、
前記制御プログラムに、呼び出されるべき動作の順序を定義する行動検証シナリオを設定する行動シナリオ設定ステップと、
前記制御プログラムに、前記プログラムが順次呼び出す動作と前記行動検証シナリオを比較して前記プログラムの評価又は検証を行なう条件を設定する検証条件設定ステップと、
を具備するプログラム製造方法である。
【発明の効果】
【００１４】
本明細書で開示する技術によれば、プログラムの開発に利用され又はプログラムの開発を支援する情報処理装置及び情報処理方法、コンピュータ・プログラム、並びにプログラム製造方法を提供することができる。【００１５】
なお、本明細書に記載された効果は、あくまでも例示であり、本発明の効果はこれに限定されるものではない。また、本発明が、上記の効果以外に、さらに付加的な効果を奏する場合もある。【００１６】
本明細書で開示する技術のさらに他の目的、特徴や利点は、後述する実施形態や添付する図面に基づくより詳細な説明によって明らかになるであろう。
【図面の簡単な説明】
【００１７】
【図１】図１は、制御プログラムの開発環境の一例を模式的に示した図である。
【図２】図２は、ネットワークを介した制御プログラムの分散開発環境を例示した図である。
【図３】図３は、ロボットを開発対象とする制御プログラムの開発環境を例示した図である。
【図４】図４は、自動走行車を開発対象とする制御プログラムの開発環境を例示した図である。
【図５】図５は、無人航空機（ドローン）を開発対象とする制御プログラムの開発環境を例示した図である。
【図６】図６は、自律動作装置１００の実機に搭載されるハードウェア並びにソフトウェアのアーキテクチャーの構成例を示した図である。
【図７】図７は、アプリケーション・プログラムの構成例を模式的に示した図である。
【図８】図８は、単体動作モードにおけるソフトウェア・モジュールの構成例を示した図である。
【図９】図９は、シミュレーション・モードにおけるソフトウェア・モジュールの構成例を示した図である。
【図１０】図１０は、実機動作モードにおけるソフトウェア・モジュールの構成例を示した図である。
【図１１】図１１は、行動計画を評価・検証するための処理手順を示したフローチャートである。
【図１２】図１２は、行動計画の開発ワークフローの一例を示した図である。
【図１３】図１３は、行動検証シナリオの作成に適用されるＧＵＩツールの構成例を模式的に示した図である。
【図１４】図１４は、行動計画の評価・検証方法の応用例に係るシステム構成を示した図である。
【発明を実施するための形態】
【００１８】
以下、図面を参照しながら本明細書で開示する技術の実施形態について詳細に説明する。
【００１９】
図１には、制御プログラムの開発環境の一例を模式的に示している。開発環境下には、開発対象となる自律動作装置（実機）１００と、この自律動作装置１００における制御プログラムを作成する開発装置２００が配置されている。
【００２０】
ここで、自律動作装置１００は、自律的若しくは適応制御により自らの行動を制御する装置であり、ロボット、無人航空機、自律運転する自動車などさまざまな形態を含むものとする。
【００２１】
自律動作装置１００は、当該システム１００全体の動作を統括的にコントロールする本体部１１０と、複数のモジュール部１２０−１、１２０−２、…で構成される。図１では簡素化のため、３つのモジュール部しか描いていないが、４以上のモジュール部で構成される自律動作装置や、２以下のモジュール部しか備えていない自律動作装置も想定される。
【００２２】
１つのモジュール部１２０は、アクチュエータ１２１と、センサ１２４と、プロセッサ１２２と、メモリ１２３と、通信モデム１２５を含んでいる。なお、簡素化のため図示を省略しているが、モジュール部１２０内の各部１２１〜１２５は、内部バスにより相互接続されているものとする。
【００２３】
アクチュエータ１２１は、例えば、関節を回転駆動するためのモータや、スピーカ用のドライバなどである。センサ１２４は、関節回転角度や角速度、スピーカの音量などのアクチュエータの出力状態を検出するセンサや、外力やその他の外部環境を検出するセンサなどである。
【００２４】
プロセッサ１２２は、アクチュエータ１２１の駆動制御（モータ・コントローラ）やセンサ１２４からの検出信号の認識処理を始めとするモジュール内の動作を制御する。メモリ１２３は、アクチュエータの制御情報やセンサの検出値などを格納するためにプロセッサ１２２が使用する。
【００２５】
通信モデム１２５は、当該モジュール部１２０と本体部１１０、又は当該モジュール部１２０と他のモジュール部の間で相互通信を行なうためのハードウェアであり、無線モデム又は有線モデムのいずれでもよい。例えばプロセッサ１２３は、通信モデム１２５を介して、本体部１１０からアクチュエータ１２１の駆動などの命令信号を受信したり、センサ１２４による検出データを本体部１１０に送信したりする。また、モジュール部１２０は、通信モデム１２５を介して、開発装置２００などの外部装置とも通信を行なうことができる。
【００２６】
本体部１１０は、プロセッサ１１１と、メモリ１１２と、通信モデム１１３と、バッテリー１１４と、ＵＳＢ（Ｕｎｉｖｅｒｓａｌ  Ｓｅｒｉａｌ  Ｂｕｓ）ポート１１５と、ＧＰＳ（Ｇｌｏｂａｌ  Ｐｏｓｉｔｉｏｎｉｎｇ  Ｓｙｓｔｅｍ）１１６を含んでいる。なお、簡素化のため図示を省略しているが、本体部１１０内の各部１１１〜１１６は、内部バスにより相互接続されているものとする。
【００２７】
プロセッサ１１１は、メモリ１１２に格納されているプログラムに従って、自律動作装置１００全体の動作を統括的にコントロールする。また、バッテリー１１４は、自律動作装置１００の駆動電源であり、本体部１１０並びに各モジュール部１２０に電源を供給する。
【００２８】
通信モデム１１３は、本体部１２０と各モジュール部１２０の間で相互通信を行なうためのハードウェアであり、無線モデム又は有線モデムのいずれでもよい。例えばプロセッサ１１１は、通信モデム１１３を介して、各モジュール部１２０に対してアクチュエータ１２１の駆動などの命令信号を送信したり、各モジュール部１２０内でのセンサ１２２の検出値に基づく認識結果を受信したりする。また、本体部１１０は、通信モデム１１３を介して、開発装置２００などの外部装置とも通信を行なうことができる。
【００２９】
ＵＳＢポート１１５は、ＵＳＢバス（ケーブル）を使って本体部１１０に外部機器を接続するために使用される。本実施形態では、ＵＳＢポート１１５を使って本体部１１０に開発装置２００を接続することを想定している。例えば、開発装置２００上で作成した制御プログラムを、ＵＳＢポート１１５を介して自律動作装置１００にインストールすることができる。なお、ＵＳＢは自律動作装置１００に外部装置を接続するインターフェース規格の一例であり、他のインターフェース規格に則って外部装置を接続するように構成することもできる。
【００３０】
なお、図示を省略したが、本体部１１０と各モジュール部などのハードウェア間を結合するデータ・バス並びに制御バスが存在する。
【００３１】
開発装置２００は、例えばパーソナル・コンピュータで構成され、コンピュータ本体部２１０と、液晶パネルなどのディスプレイ２２０と、マウスやキーボードなどからなるユーザ・インターフェース（ＵＩ）部２３０を備えている。また、コンピュータ本体部２１０は、プロセッサ２１１、ＧＰＵ（Ｇｒａｐｈｉｃ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）２１２と、メモリ２１３と、ＵＳＢポート２１４と、通信モデム２１５を備えている。但し、ＧＰＵ２１２の機能がプロセッサ２１１内に含まれている構成例も考え得る。また、コンピュータ本体部２１０は、図示した以外のハードウェア構成要素を備えており、各部はバスにより相互接続されている。
【００３２】
開発装置２００上では、オペレーティング・システム（ＯＳ）が動作している。プロセッサ２１１は、所望のアプリケーション・プログラムをメモリ２１２にロードして、ＯＳによって提供される実行環境下でアプリケーション・プログラムを実行することができる。
【００３３】
本実施形態では、アプリケーション・プログラムの１つとして、自律動作装置１００の制御用プログラムを作成するための開発ツール・プログラムを想定している。この開発ツール・プログラムは、当該プログラムの実行に必要なデータとともに開発装置２００のメモリ２１３上に展開されている。
【００３４】
開発ツール・プログラムは、ディスプレイ２２０の画面にプログラム開発用のＧＵＩ（Ｇｒａｐｈｉｃａｌ  Ｕｓｅｒ  Ｉｎｔｅｒｆａｃｅ）を提示する。プログラムの開発者は、このＧＵＩ画面の内容を確認しながら、ユーザ・インターフェース２３０を介してデータやプログラムの入力を行なうことができる。また、開発ツール・プログラムは、作成した制御プログラムに関するコンパイラ、デバッガ、シミュレーション、３Ｄグラフィックス・アニメーションを用いた制御プログラムの動作確認のための機能などを備えているが、開発者はＧＵＩ画面上でこれらの機能の実行指示を行なうことができる。
【００３５】
開発ツール・プログラムを用いて作成される制御プログラムは、自律動作装置１００の実機上の本体部１１０のプロセッサ１１１上で実行されるコントロール・プログラム並びにコントロール・プログラムが使用するパラメータなどのデータと、各モジュール部１２０のプロセッサ１２２においてアクチュエータ１２１の駆動を制御するためのコントロール・プログラム並びにコントロール・プログラムが使用するパラメータなどのデータで構成される。コントロール・プログラムが使用するパラメータには、アクチュエータとしてのモータのＰ（比例制御）、Ｉ（積分制御）、Ｄ（微分制御）などの制御パラメータなどのデータを含む。本明細書ではプログラム部分とデータを併せて「制御（コントロール）プログラム」と呼ぶこともある。
【００３６】
開発ツール・プログラムを使って作成された制御プログラムは、メモリ２１３に格納される。また、メモリ２１３上の制御プログラムを、ＵＳＢポート２１４を介して自律動作装置１００側に転送することができる。あるいは、メモリ２１３上の制御プログラムを、通信モデム２１５を介して自律動作装置１００内のモジュール部１２０に転送することができる。
【００３７】
また、開発装置２００上で開発ツール・プログラムを使って作成された制御プログラムを、３Ｄグラフィックス・アニメーションを用いた開発ツール・プログラムやデータ（以下、開発ツール用のプログラムとデータを併せて「開発ツール・プログラム」とも呼ぶ）を利用して、動作の検証や、制御用のデータやプログラムの修正を行なうことができる。一般に、この種の開発ツール・プログラムは、制御プログラムに従って自律動作装置１００の実機動作の３Ｄグラフィックス・アニメーションを生成する機能を備えており、開発者はディスプレイ２２０に表示される３Ｄグラフィックス・アニメーションを利用して、自身が開発した制御プログラムの動作の検証や、データやプログラムの修正を並行して行なうことができる。
【００３８】
本実施形態では、開発ツール・プログラムが物理エンジンと呼ばれる機能を備えていることを想定している。物理エンジンは、現実の自律動作装置１００の動作を物理法則に基づいて物理現象を演算する機能を持つコンピュータ・プログラムであり、自律動作装置１００が持つ物理的な特性やさらには現実的な外部環境を考慮することによって、現実と同様の動作を生成して、その結果をディスプレイ２２０上に表示する。自律動作装置１００の実機に対し、実機のモータなどの代わりに物理エンジンを使って３Ｄグラフィックス・アニメーション空間中で動作する仮想的な自律動作装置１００のことを仮想機械（３Ｄグラフィックス・アニメーション用のデータを含むコンピュータ・プログラム及びデータ）とも呼ぶ。
【００３９】
例えば、自律動作装置１００がロボットであれば、物理エンジンは、ロボットのアームの各リンクや関節の重量やモーメント、関節駆動用のアクチュエータの特性を考慮しつつ、ロボットを模して造られた仮想機械の制御プログラムの動作において、開発ツール・プログラム上で表現された仮想的な物理環境と仮想機械との物理作用（地面との接地や障害物との衝突など）を物理法則に基づいて計算することによって、あたかもロボットのアクチュエータが実際に駆動しているかのように、仮想機械全体の動作を計算し、ロボットの現実的な動作を仮想機械によって再現した３Ｄグラフィックス・アニメーションをディスプレイ２２０上に表示する。
【００４０】
仮想機械は、物理エンジンと３Ｄグラフィックス・アニメーションを含む開発ツール・プログラム上で動作するようにされた制御プログラム及びデータであり、メモリ２１３に格納されている。望ましくは、実機の各モジュールのプロセッサで動作する単位で、制御プログラム及びデータがモジュール化されている。仮想機械をあたかも実機のように３Ｄグラフィックス空間上で動作させるために、仮想機械の制御プログラムは、実機のプロセッサ（例えば、モータ・コントローラ）１２２の動作に相当する機能を、プログラムの一部として実現する。また、この仮想機械の制御プログラムは、実機のモジュール部１２０毎のアクチュエータ１２１（例えば、モータ）に相当する動作を３Ｄグラフィックス・アニメーションで再現する物理エンジン機能を、ＡＰＩ（Ａｐｐｌｉｃａｔｉｏｎ  Ｐｒｏｇｒａｍｍｉｎｇ  Ｉｎｔｅｒｆａｃｅ）あるいは関数を使って呼び出すようにプログラムされている。さらに物理エンジンにおいて物理計算の際に使用されるデータ（アクチュエータに設定される制御パラメータや、リンクの重量、イナーシャなど）は、制御プログラムとともにメモリ２１３中に格納されており、制御プログラムの実行に伴って、メモリ２１３から読み出され、制御プログラム中で利用される。
【００４１】
また、物理エンジン機能を実現するためのプログラム・モジュールに対して指示を出すためのＡＰＩあるいは関数を、実機すなわち自律動作装置１００側で動作している基本ＯＳが提供するものと同じものとすることにより、開発ツール・プログラムで作成したプログラムを、そのまま実機上のＯＳで動作させることができる。さらに、物理エンジン機能によって実際の物理現象を再現することができるので、開発ツール・プログラムを用いて開発したプログラムを、そのままＵＳＢポート２１４などを介して自律動作装置１００にアップロードして実行させることにより、開発ツール・プログラムで確認した動作を実機上でも実現することができる。
【００４２】
また、開発ツール・プログラムを使って、モジュール部単位に分割して自律動作装置１００の制御プログラムを開発することもできる。この場合も同様に、モジュール部単位で制御プログラムを自律動作装置１００にアップロードすることができる。例えば、モジュール部１２０−１のみハードウェア及び制御プログラムの開発を担当している開発者は、自分の開発装置２００を通信モデム２１５経由で自律動作装置１００の対応するモジュール部１２０−１に接続して、作成したプログラムやデータをモジュール部１２０−１内のメモリ１２４にアップロードすることもできる。
【００４３】
モジュール部単位でハードウェア及びプログラムの開発を複数の開発者又は複数の開発ベンダーで分担することで、分散開発環境下で自律動作装置１００全体の開発を進めることができる。
【００４４】
図２には、ネットワークを介した制御プログラムの分散開発環境を例示している。図２に示す分散開発環境下では、モジュール毎に個別の開発者又は開発ベンダーに開発が委ねられている。但し、図２で言うモジュールは、図１に示した自律動作装置１００のハードウェア構成要素であるモジュール部の他に、自律動作装置１００の制御ソフトウェアのモジュールを指す場合もある。
【００４５】
自律動作装置１００の本体部又はモジュール部単位で制御プログラムの開発を任された各プログラム開発者は、それぞれモジュール開発用コンピュータを用いて、自分が担当する本体部又はモジュール部の制御プログラムを作成する。モジュール開発用コンピュータ上では、例えば上述した開発ツール・プログラムが動作している。各モジュール開発用コンピュータは、ネットワークに接続されている。そして、各プログラム開発者は、それぞれクラウド・サーバ上の共有ストレージ、自分専用のストレージ（すなわち、本体部開発者ストレージ、モジュール部開発者ストレージ）、あるいは専用サーバが備えるストレージにおいて、自己が開発した制御プログラムなどを提供してもよい。また、サーバなどのストレージにアカウントを有する管理者、開発者、顧客、あるいはユーザによって制御プログラムなどが共有されるようにしてもよい。
【００４６】
自律動作装置１００の実機全体の制御プログラム開発を担当若しくは統括する開発者は、ネットワーク経由で本体部及び各モジュール部の制御プログラムの提供を受ける。具体的には、実機全体の開発者が使用する実機プログラム開発用コンピュータは、クラウド・サーバ上の共有ストレージ又は開発者ストレージ、専用サーバ、あるいは各開発者のモジュール開発用コンピュータとの直接通信によって、各々の制御プログラムを受信する。但し、制御プログラムの提供を受けるネットワークは、有線又は無線のいずれで構成されていてもよい。
【００４７】
実機全体の開発者が使用する実機プログラム開発用コンピュータは、図１に示した開発装置２００に相当し、開発ツール・プログラム上で物理エンジンを用いた演算を行ない、且つ、３Ｄグラフィックス・アニメーションにより実機に相当する仮想機械の動作を表示できる機能を備えている。したがって、実機プログラム開発用コンピュータは、本体部１１０及びすべてのモジュール部１２０の制御プログラムを、開発ツール・プログラムが備える物理エンジン機能を利用して、仮想機械の３Ｄグラフィックス・アニメーションの表示などを通じて動作の確認・検証を行なうことができる。
【００４８】
さらに、実機プログラム開発用コンピュータ上では、開発された制御プログラムの実行と並行して、各々の制御プログラムの修正を行なうことができる。したがって、実機全体の開発者と各モジュール部を担当する開発者とで、実機全体の制御プログラムを効率的に共同開発することにもなる。また、実機プログラム開発用コンピュータ上で修正した制御プログラムを、そのモジュール部を担当する開発者に再度提供して、最終的なプログラム製品を完成してもらうことが可能である。例えばクラウド・サーバ上に本体部並びに各モジュール部専用のストレージを配置するなどモジュール部単位で制御プログラムを管理するようにすることで、共同開発を円滑に進めることができる。
【００４９】
実機全体の開発者が使用する実機プログラム開発用コンピュータ上で動作が確認・検証された（すなわち、完成した）制御プログラムは、ＵＳＢポート２１４を介して開発装置２００から実機の自律動作装置１００に直接アップロードすることができる。あるいは、有線又は無線で構成されるネットワーク経由で、実機全体又はモジュール部毎の制御プログラムを実機にアップロードすることもできる。
【００５０】
また、制御プログラムを専用サーバから実機へアップロードするという形態も想定される。例えば、ある実機のユーザが自分のユーザ端末のユーザ・インターフェース（キーボード、マウス、タッチパネルなど）を介して自分が持つアカウントを用いて専用サーバにログインして、さらに実機にダウンロード又はアップロードする制御プログラムを選択して、ダウンロード又はアップロードを実施するようにしてもよい。
【００５１】
図３には、自律動作装置１００の具体例として脚式のロボットを開発対象とする場合の制御プログラムの開発環境を例示している。図３では、単一の開発装置を用いてプログラム開発が行なわれるが、勿論、図２に示したようなネットワークを介した分散開発環境を利用することも可能である。
【００５２】
脚式ロボット１００は、本体部１１０と、頭部や左右の脚部に相当するモジュール部１２０を有している。図示を省略するが、本体部１１０と、頭部や左右の脚部などの各モジュール部１２０などのハードウェア間を結合するデータ・バス並びに制御バスが存在する。
【００５３】
なお、脚式ロボット１００は、上肢など図示しないモジュール部をさらに有していてもよい。また、少なくとも一部のモジュール部内のプロセッサやメモリなど機能が本体部と一体となって、本体部のプロセッサによってコントロールされるという実機構成の変形例も考えられる。
【００５４】
本体部１１０は、プロセッサ１１１と、メモリ１１２と、無線又は有線の通信モデム１１３と、バッテリー１１４と、ＵＳＢポート１１５と、ＧＰＳ１１６を備えている。
【００５５】
左右の脚のモジュール部１２０−２及び１２０−３は、アクチュエータとして、股関節や膝関節、足首などの関節駆動用（若しくは、歩行用）のモータ１２１を備え、プロセッサとしてモータの駆動を制御するモータ・コントローラ１２２を備えている。また、センサ１２４として、モータの出力側に発生する外力を検知するトルク・センサや、モータの出力側の回転角度を検出するエンコーダー、足裏部の接地センサなどを備えている。また、頭部のモジュール部１２０−１は、アクチュエータとしての頭部回転用のモータ１２１と、センサとしての周囲を撮像するイメージ・センサ１２４を備えている。
【００５６】
図１と同様に、開発装置２００上で動作する開発ツール・プログラムを用いて、上記のロボット１００の本体部並びに各モジュール部の制御プログラムを作成し、さらに開発ツール・プログラム上で動作する物理エンジンの演算を利用し、仮想機械の３Ｄグラフィックス・アニメーションの表示などを通じて動作の確認・検証を行なうことができる。
【００５７】
また、開発装置２００を用いて作成された制御プログラム、あるいは図２に示したような開発環境（あるいはその他の開発環境）において開発された実機全体の制御プログラムやモジュール部毎の制御プログラムは、本体部１１０のＵＳＢポート１１５や各モジュール部１２０の通信モデム１２５を介した有線又は無線の通信によって、本体部１１０のメモリ１１２又は各モジュール部１２０のメモリ１２３にアップロードされる。そして、アップロードされたプログラムは、ロボット１００の起動時などに適宜動作するようになっている。
【００５８】
図４には、自律動作装置１００の他の具体例として自動走行車を開発対象とする場合の制御プログラムの開発環境を例示している。自動走行車１００は、自動運転技術が導入された自動車（あるいは、作業用又は輸送用などの無人運転車両）のことであるが、完全自動運転車の他、自動運転モードと手動運転モードを切り替え可能な自動車における自動運転モードで走行中の自動車も含むものとする。図４では、単一の開発装置を用いてプログラム開発が行なわれるが、勿論、図２に示したようなネットワークを介した分散開発環境を利用することも可能である。
【００５９】
図４に示す自動走行車１００は、主制御部１１０と、モジュール部としてのトランスミッション制御モジュール部１２０−２並びに室内空調制御モジュール部１２０−１を有している。図示を省略するが、主制御部１１０と各モジュール部１２０などのハードウェア間を結合するデータ・バス並びに制御バス（ＣＡＮバスなど）が存在する。また、自動走行車１００は、通常、トランスミッション制御モジュール部１２０−２、室内空調制御モジュール部１２０−１以外にも図示しない多くのモジュール部を備えているが、説明の簡素化のため省略する。
【００６０】
主制御部１１０は、プロセッサとしてのＥＣＵ（Ｅｌｅｃｔｒｏｎｉｃ  Ｃｏｎｔｒｏｌ  Ｕｎｉｔ：電子制御装置）１１１と、メモリ１１２と、通信モデム１１３と、ＥＣＵインターフェース１１５と、ＧＰＳ１１６と、バッテリー１１４を備えている。通信モデム１１３は、Ｗｉ−Ｆｉ（Ｗｉｒｅｌｅｓｓ  Ｆｉｄｅｌｉｔｙ）、ＬＴＥ（Ｌｏｎｇ  Ｔｅｒｍ  Ｅｖｏｌｕｔｉｏｎ）、近距離無線通信などを想定している。また、ＥＣＵインターフェース１１５は、ＣＡＮ（Ｃｏｎｔｒｏｌｌｅｒ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）バス（図示しない）へのインターフェースを想定しており、開発装置２００側とはイーサネット（登録商標）などの通信規格を利用して接続される。
【００６１】
室内空調モジュール部１２０−１は、アクチュエータとしての空調１２１と、プロセッサとしての空調制御ＥＣＵ１２２と、メモリ１２３と、センサとしての室内温度センサ１２４と、Ｂｌｕｅｔｏｏｔｈ（登録商標）通信などの通信モデム１２５を備えている。例えば搭乗者が携帯するスマートフォン（図示しない）などの情報端末とＢｌｕｅｔｏｏｔｈ（登録商標）通信により接続して、空調を制御することを想定している。
【００６２】
トランスミッション制御モジュール部１２０−２は、アクチュエータとしての駆動輪用モータ１２１と、プロセッサとしてのトランスミッション制御ＥＣＵ１２２と、メモリ１２３と、センサとして速度・加速度センサ１２４や操舵角センサなどを備えている。
【００６３】
なお、図４に示した構成例では、主制御部１１０並びに各モジュール部１２０にＥＣＵが配置されているが、主制御部１１０内のＥＣＵ１１１ですべてのモジュール部を集中管理するように構成することも可能である。
【００６４】
図１と同様に、開発装置２００上で動作する開発ツール・プログラムを用いて、上記の自動走行車１００の主制御部１１０、室内空調制御モジュール部１２０−１、並びにトランスミッション制御モジュール部１２０−２の制御プログラムを作成し、さらに開発ツール・プログラム上で動作する物理エンジン機能を利用し、仮想機械の３Ｄグラフィックス・アニメーションの表示などを通じて動作の確認・検証を行なうことができる。
【００６５】
また、開発装置２００を用いて作成された制御プログラム、あるいは図２に示したような開発環境（あるいはその他の開発環境）において開発された実機全体の制御プログラムやモジュール部毎の制御プログラムは、主制御部１１０のＥＣＵインターフェース１１５や各モジュール部１２０の通信モデム（図示を省略）を介した有線又は無線の通信によって、主制御部１１０のメモリ１１２又は各モジュール部１２０のメモリ１２３にアップロードされる。そして、アップロードされたプログラムは、自動走行車１００の起動時などに適宜動作するようになっている。
【００６６】
図５には、自律動作装置１００の他の具体例として無人航空機（ドローン）を開発対象とする場合の制御プログラムの開発環境を例示している。図５では、単一の開発装置を用いてプログラム開発が行なわれるが、勿論、図２に示したようなネットワークを介した分散開発環境を利用することも可能である。
【００６７】
図５に示す無人航空機１００は、主制御部１１０と、モジュール部としてのカメラ制御モジュール部１２０−１並びにプロペラ制御モジュール部１２０−２を有している。図示を省略するが、主制御部１１０と各モジュール部１２０などのハードウェア間を結合するデータ・バス並びに制御バスが存在する。また、無線航空機１００には、カメラ制御モジュール部１２０−１並びにプロペラ制御モジュール部１２０−２以外のモジュール部が組み込まれていてもよい。
【００６８】
主制御部１１０は、プロセッサ１１１と、メモリ１１２と、通信モデム１１３と、ＵＳＢポート１１５と、ＧＰＳ１１６と、バッテリー１１４を備えている。通信モデム１１３は、Ｗｉ−Ｆｉ、ＬＴＥ、近距離無線通信などの無線モデムを想定しており、操縦者が操作するリモート・コントローラ（図示しない）と通信を行なうようになっている。また、開発装置２００側とはＵＳＢポート１１５を利用して接続され、開発された制御プログラムのアップロードが行なわれる。
【００６９】
カメラ制御モジュール部１２０−１は、センサとしてのカメラ部（イメージ・センサを含む）１２４と、アクチュエータとしてのカメラ部回転用モータ１２１と、プロセッサとしてのモータ・コントローラ１２２と、メモリ１２３と、通信モデム１２５を備えている。カメラ部回転用モータは、例えば水平方向に３６０度の範囲で回転が可能であり、さらにチルト回転が可能であってもよい。また、通信モデム１２５は、Ｗｉ−Ｆｉ、ＬＴＥ、近距離無線通信などの無線モデムを想定しており、操縦者が操作するリモート・コントローラやスマートフォンからのコマンドに従ってカメラ部１２４の回転や撮影を行なう。
【００７０】
プロペラ制御モジュール部１２０−２は、アクチュエータとして例えば３つのプロペラ（回転用モータを含む）１２１と、プロペラ１２１の回転用モータの制御などを行なうプロセッサ１２２、メモリ１２３と、センサとしてのプロペラ回転検出センサ１２４を備えている。
【００７１】
図１と同様に、開発装置２００上で動作する開発ツール・プログラムを用いて、上記の無人航空機１００の主制御部１１０、カメラ制御モジュール部１２０−１、並びにプロペラ制御モジュール部１２０−２の制御プログラムを作成し、さらに開発ツール・プログラム上で動作する物理エンジン機能を利用し、仮想機械の３Ｄグラフィックス・アニメーションの表示などを通じて動作の確認・検証を行なうことができる。
【００７２】
また、開発装置２００を用いて作成された制御プログラム、あるいは図２に示したような開発環境（あるいはその他の開発環境）において開発された実機全体の制御プログラムやモジュール部毎の制御プログラムは、主制御部１１０や各モジュール部１２０の通信モデムを介した有線又は無線の通信によって、主制御部１１０のメモリ１１２又は各モジュール部１２０のメモリ１２３にアップロードされる。そして、アップロードされたプログラムは、無人航空機１００の起動時などに適宜動作するようになっている。
【００７３】
図６には、自律動作装置１００の実機に搭載されるハードウェア並びにソフトウェアのアーキテクチャーの構成例を示している。
【００７４】
実機は、図１などにも示したように、本体部（若しくは主制御部）と複数のモジュール部などの複数のハードウェア・モジュール（ＨＷ1、ＨＷ2、…）が筐体内に組み込まれて構成される。また、各ハードウェア・モジュールを２以上の筐体に分散して配置して構成される実機も存在し得る。
【００７５】
ＯＳは、これらハードウェア・モジュール（ＨＷ1、ＨＷ2、…）を直接的に制御する。また、ＯＳではなく、モジュール部内のメモリにアップロードされた制御プログラムがハードウェア・モジュールを直接的に制御する場合もある（具体的には、プロセッサが制御プログラムを実行して、アクチュエータの駆動を制御する）。
【００７６】
図１などに示したように、本体部１１０と複数のモジュール部１２０でハードウェア・アーキテクチャーが構成される自律動作装置１００においては、本体部１１０（のプロセッサ１１１）において当該システム１００全体を制御する主ＯＳが動作して、各モジュール部１２０内で実行中の制御プログラムを直接的又は間接的に制御するように構成される。
【００７７】
図６では、主ＯＳ以外にも複数のＯＳ（例えば、ＯＳ1、ＯＳ2、…）が動作し、各ＯＳがアプリケーション・プログラムの実行環境を提供する例を示している。図６において、例えば、ＯＳ1が主ＯＳの管理下にあるハードウェア・モジュールを駆動したい場合には、まずＯＳ1が主ＯＳと通信を行なうことによって、間接的に所望のモジュール部の制御プログラムを制御するようにすることができる。また、ＯＳ1と主ＯＳ間の通信には、ＲＰＣ（Ｒｅｍｏｔｅ  Ｐｒｏｃｅｄｕｒｅ  Ｃａｌｌ）などの技術を利用して実現することができる。
【００７８】
図６には、仮想化技術（Ｖｉｒｔｕａｌｉｚａｔｉｏｎ）を用いて構築したアーキテクチャーも併せて示している。すなわち、複数の異なるオペレーティング・システム（例えば、ＯＳ1、ＯＳ2、…）を仮想化ＯＳ上で動作させている。異なるＯＳを想定して開発された各アプリケーション・プログラム（例えば、ＯＳ1を想定して開発されたＡＰ1と、ＯＳ2を想定して開発されたＡＰ2）を、同じ実機上で混在させることが可能である。
【００７９】
例えば、自動走行車において開発されるアプリケーション・プログラムを、駆動系制御（ＤＳＵなど）のように高い信頼性が要求されるアプリケーション・プログラムと、ユーザに対するサービスに関わるインフォテインメント（オーディオ機器や空調など）のように汎用性の高いアプリケーション・プログラムの２種類に大別すると、前者のＡＰ1はより信頼性の高いＯＳ1を想定して開発され、後者のＡＰ2はより汎用性が高く多くの開発者によって開発可能なＯＳ2を想定して開発される。このように異なるＯＳを想定して開発された駆動系制御用アプリケーション・プログラムＡＰ1及びインフォテインメント・アプリケーション・プログラムＡＰ2は、仮想化ＯＳの介在により各々に該当するハードウェアに対する制御が容易となるので、同一の自動走行車上で混在することが可能となる。
【００８０】
アプリケーション・プログラムの開発者は、システム（例えば、ミドルウェア）が提供するＡＰＩを用いてアプリケーション・プログラムを開発することができる。例えば、ＡＰＩとして、「地図表示」、「音声対話モードへの切り替え」、「周囲の人間の認識」といった機能の利用が考えられる。
【００８１】
また、アプリケーション・プログラムの開発者は、システム・コールを利用してＯＳに対して指示を行なうようなプログラムを含めてアプリケーション・プログラムを開発することができる。ここで言うシステム・コールは、システム制御に関わる機能を利用するためのインターフェースである。システム・コールの例として、モジュール部内のプロセッサ（例えば、モータ・コントローラ）のパラメータを変更する、通信モデムにおけるネットワーク・アドレスの設定を行なう、といったものを挙げることができる。
【００８２】
図７には、アプリケーション・プログラムの構成例を模式的に示している。アプリケーション・プログラムは、例えば図１中の開発装置２００上で（すなわち、開発ツール・プログラムを用いて）開発される。図示のように、アプリケーション・プログラムは複数のコンポーネントで構成されるが、すべてのコンポーネントを一体化して１つのファイルで構成してもよいが、各コンポーネントをそれぞれ別のファイルとして構成してもよい。また、これらのファイルは、図２におけるクラウド・サーバ上の共有ストレージ、各自専用のストレージ（すなわち、本体部開発者ストレージ、モジュール部開発者ストレージ）、あるいは専用サーバが備えるストレージなどに格納され、サーバなどのストレージに対するアクセス権を有する管理者、開発者、顧客、あるいはユーザによって共有することが可能であってもよい。
【００８３】
アプリケーション・プログラムは、１又はそれ以上の定義動作と、１又はそれ以上の行動計画と、１又はそれ以上の行動検証シナリオを含んでいる。定義動作並びに行動計画はいずれも、自律動作装置１００の動作制御プログラムである。
【００８４】
定義動作は、ハードウェアのうち、モータなどに代表されるアクチュエータのコントローラに対して指示する目標値からなり、「モーション」とも呼ばれる。１つの定義動作が、ある時点においてコントローラに対して指示する目標値のみからなる場合や、ある区間においてコントローラに対して時系列的に指示する一連の目標値からなる場合がある。また、定義動作は、コントローラに対して基本パラメータの設定を指示するプログラム及びデータでもある。パラメータの一例として、Ｐ（比例制御）、Ｉ（積分制御）、Ｄ（微分制御）が挙げられる。また、モータなど制御対象となるアクチュエータの特性に応じてコントローラ（プロセッサ）に設定することができるパラメータを、基本パラメータとして定義動作の中で設定することができる。
【００８５】
行動計画は、１又はそれ以上の定義動作の機能を呼び出すプログラム及びデータからなる。ロボットなどの自律動作装置１００は、行動計画に従って呼び出された１又はそれ以上の定義動作を実行することによって、１つの「ビヘイビア」を実現する。
【００８６】
また、行動計画は、状況毎に起動すべき定義動作を取り決めることで、自律動作装置１００の一連の動作を記述するプログラム及びデータである。例えば、定義動作を選択するための条件分岐をツリー構造の形式で記述する行動計画を挙げることができる。行動計画は、認識結果に応じて自律動作装置１００を制御することから、環境（状況）認識に基づく行動制御プログラムに位置付けることができる。この意味で、行動計画は、広義のＡＩ（人工知能）の機能の一部にも相当する。
【００８７】
行動検証シナリオは、行動計画内の所定の定義動作が、所定の条件で実行されているかどうかについて検証（あるいは、評価、モニタリング）を実現するプログラムからなる。所定の条件は、各モジュール部内のメモリに格納されているデータ（内部状態）や、各モジュール部内のセンサで検出されるデータ（外部環境）などの環境データに関して定義される。行動検証シナリオは、自律動作装置１００がある行動計画内で所定の条件が発生したときに、期待した通りの定義動作が起動しなかったことを、異常として検出することができる。
【００８８】
アプリケーション・プログラムは、また、ＯＳ又はミドルウェアの機能を利用するためのプログラム及びデータを含むことができる。また、アプリケーション・プログラムは、実機動作中に、行動計画又は定義動作のプログラム及びデータを学習によって変更させるためのプログラム及びデータを含むこともできる。アプリケーション・プログラムは、さらに、自律動作装置１００の実機のアプリケーション・プログラムの機能を、外部から利用させるためのＡＰＩを定義している。したがって、アプリケーション・プログラムの作成に利用した開発装置２００や、ユーザ端末、サーバなどの外部装置は、実機が動作中あるいは試験動作中に、通信を介してＡＰＩを呼び出すことによってアプリケーション・プログラムの機能を利用することができる。
【００８９】
例えば、自動走行車を自律動作装置１００とする場合において、定義動作として「ブレーキ作動」が定義されるとともに、行動検証シナリオとして「安全走行」が定義されているとする。行動検証シナリオ「安全走行」は、例えば自動走行車においてある行動計画を実行中に、外部環境として「前方に人を認識」という条件下で、定義動作「ブレーキ作動」が起こることを検証（あるいは、評価、モニタリング）するものである。「前方に人を認識」という条件下で、自動走行車において定義動作「ブレーキ作動」が起こらなかったときには、行動検証シナリオは自動走行車の（若しくは、行動計画上の）異常が起こったことを検出する。
【００９０】
また、行動検証シナリオは、異常など所定の事象を検出した場合の、自律動作装置１００の本体部又は各モジュール部内のメモリに格納されているデータ（内部状態）や、各モジュール部内のセンサで検出されるデータ（外部環境）などの環境データを、行動検証シナリオに関連付けて記録する機能を備えている。外部からアプリケーション・プログラムの機能を利用させるためのＡＰＩの１つとして「安全運転検証」ＡＰＩを定義して、自動走行車の事故前後の行動検証シナリオ「安全走行」に関連付けて記録された環境データを取り出すことができるようにする。
【００９１】
このようなＡＰＩを用いて、異常の発生時に行動検証シナリオに関連付けて記録された環境データを外部に取り出すことかできる。そして、開発装置２００上で動作する開発ツール・プログラムが持つ物理エンジンと連携した３Ｄグラフィックス・アニメーション機能を用いて、取り出された環境データに基づく異常発生時の自律動作装置１００の動作を、仮想機械の３Ｄグラフィックス・アニメーションによって再現することができる。また、異常が発生した自律動作装置１００又は同タイプの実機に異常発生時の環境データをアップロードしてアプリケーション・プログラムを動作させることで、異常発生時の実機動作を再現することができる。
【００９２】
自律動作装置１００用のアプリケーション・プログラムは、アプリケーション・プログラムの開発者が、開発装置２００上で開発ツール・プログラムを利用して作成することができる。開発ツール・プログラムは、コンパイラ、デバッガ、物理エンジンと連携した３Ｄグラフィックス・アニメーション機能などを備え、アプリケーション・プログラムの開発者はＧＵＩ画面上でこれらの機能の実行指示を行なうことができる。
【００９３】
また、本実施形態では、開発装置２００上で動作する開発ツール・プログラムが物理エンジンと呼ばれる機能を備えていることを想定している。物理エンジンは、現実の自律動作装置１００の動作を物理法則に基づく現象をコンピュータ上で再現する機能であり、自律動作装置１００が持つ物理的な特性やさらには現実的な外部環境を考慮することによって、現実の実機と同様の動作を表す仮想機械の３Ｄグラフィックス・アニメーションを生成して、その結果を表示する。アプリケーション・プログラムの開発者は、このような３Ｄグラフィックス・アニメーションを見ながら実機の動作を検証し、さらにアプリケーション・プログラムを適切に修正することができる。
【００９４】
開発ツール・プログラムは、自律動作装置１００の各モジュール部のアクチュエータ及びプロセッサの現実の動作を再現するためプログラム・モジュールやデータを用意している。物理エンジン機能を実現するためのプログラム・モジュールに対して指示を出すためのＡＰＩあるいは関数を、実機上で動作しているＯＳ（図６を参照のこと）と同じものとすることにより、開発ツール・プログラムで作成したプログラムを、そのまま実機上のＯＳで動作させることができる。
【００９５】
昨今、物理エンジンの精度は向上しており、自律動作装置１００の実機動作を制御するアプリケーション・プログラムを、物理エンジンと３Ｄグラフィックス・アニメーションの機能を備えた開発ツール・プログラム上で動作させることにより、実機動作を仮想機械でより正確に再現することが可能になってきている。特に、高機能の物理演算を行なう物理エンジンが、実機のハードウェア（例えば、モータ・コントローラ）に相当する機能を果たすので、実機を用いることなく制御プログラムを検証することができるので、開発の効率が向上するとともに開発コストが低減する。また、このようにして作成された制御プログラムを含むアプリケーション・プログラムを、実機上で動作させたときに、実機上でも期待した動作を再現することができる。
【００９６】
例えば、各モジュール部のコントローラに対する時系列的な目標値からなる定義動作（前述）が実環境においても正しく動作するかどうかを、物理エンジンと３Ｄグラフィックス・アニメーション機能を備えた開発ツール・プログラムを利用すれば、実機上で定義動作を実行させことなく、評価・検証することができる。
【００９７】
一方、広義のＡＩの機能に一部にも相当する行動計画に関しては、定義動作ほど評価や検証が容易ではない。例えば、以下のような評価・検証方法が挙げられる。
【００９８】
（１）評価対象となる行動計画を実機上又は物理エンジンと３Ｄグラフィックス・アニメーション機能を備えた開発ツール・プログラム上で動作させ、実機の評価者に対する挙動や、同開発ツール・プログラム上での評価者の操作に対する挙動を目視で確認する。
（２）評価者の代替としての役割を果たす行動計画（評価者行動計画）を別途作成し、評価者行動計画に対する評価対象の行動計画による挙動を、評価者の目視又は評価者行動計画のデバッグ出力を以って確認する。
【００９９】
上記の（１）並びに（２）のいずれの評価方法も、以下のような問題点がある。
【０１００】
（ａ）評価に長時間を要する。
（ｂ）乱数や周辺環境、評価者の操作のブレなどの影響を受け、検証結果の再現性が低い。
（ｃ）行動計画制御ソフトウェアへの入力となる環境データとして、各モジュール部内のセンサや認識器の出力を利用しているため、統合的な検証にしかなっておらず、行動計画のロジックに対する直接的な評価とは言い難い。
【０１０１】
そこで、以下では、物理エンジンと３Ｄグラフィックス・アニメーション機能を備えた開発ツール・プログラムを利用したアプリケーション・プログラムの開発環境において、再現性が高く、且つ効率的な行動計画の検証方法について提案する。この検証方法は、望ましい（若しくは、理想的な）定義動作の順序を定義した行動検証シナリオを用意しておき、評価対象となる行動計画を所定の環境下で駆動させて、定義動作が行動検証シナリオの通りの順序で選択されるかどうかによって行動計画の評価・検証を行なうものである。
【０１０２】
行動検証シナリオを参照して行動計画の評価・検証を実施するソフトウェアのことを、以下では「行動検証ソフトウェア」と呼ぶことにする。行動検証ソフトウェアは、行動検証ソフトウェア自身で評価対象の行動計画を駆動させて、当該ソフトウェア単体で行動計画の評価・検証を実施する「単体動作モード」と、物理エンジンと３Ｄグラフィックス・アニメーション機能を備えた開発ツール・プログラムによって行動計画を駆動し、仮想環境に応じて起動される定義動作を監視して行動計画の評価・検証を実施する「シミュレーション・モード」と、実機（自律動作装置１００）上で行動計画を駆動し、実環境に応じて起動させる定義動作を監視して行動計画の評価・検証を実施する「実機動作モード」という３通りの動作モードを有している。
【０１０３】
「単体動作モード」や「シミュレーション・モード」によれば、プログラム（行動計画）の開発環境において、高い再現性で行動計画の評価・検証を実施することができる。また、「実機動作モード」によれば、実時間で行動計画の評価・検証を実施することができる。
【０１０４】
図８には、単体動作モードにおいて行動計画を評価・検証するためのソフトウェア・モジュールの構成例を示している。行動検証ソフトウェア８００は、開発装置２００などで実行される。単体動作モードにおける行動検証ソフトウェア８００は、シナリオ評価部８０１と、行動検証シナリオ保持部８０２と、擬似認識結果ストリーム出力部８０３と、行動計画制御部８１０をソフトウェア・モジュールとして備えている。図示の行動検証ソフトウェア８００は、当該ソフトウェア８００内の行動計画制御部８１０で駆動させている行動計画を評価・検証する構成となっている。
【０１０５】
行動計画制御部８１０は、評価対象行動計画保持部８１１と、状態保存部８１２と、外部環境入力部８１３と、行動計画駆動部８１４を備えている。
【０１０６】
評価対象行動計画保持部８１１は、行動検証ソフトウェア８００において評価対象となる１又はそれ以上の行動計画のプログラム及びデータを保持している。行動計画は、アプリケーション・プログラムの状態（内部状態）と外部環境に応じて起動すべき定義動作を記述するプログラム及びデータである。以下では、定義動作を選択するための条件分岐をツリー構造の形式で記述した行動計画を想定している。
【０１０７】
状態保存部８１２は、外部環境の認識結果や、アプリケーション・プログラム（行動計画駆動部８１４で駆動される行動計画）の状態、すなわち内部状態を保存する。
【０１０８】
外部環境入力部８１３は、外部環境のデータを行動計画制御部８１０の外部から受け取り、状態保存部８１２への書き込み（更新）を行なう。外部環境は、本来は実機（自律動作装置１００）の周辺の環境データを指す。但し、単体動作モードでは、評価対象となる行動計画から行動検証シナリオ通りの定義動作が順序で選択されるように想定される、理想的な外部環境データの時系列の集合体である。
【０１０９】
行動計画駆動部８１４は、評価対象としている行動計画のプログラム及びデータを評価対象行動計画保持部８１１から読み込むとともに、状態保存部８１２から現在の内部状態及び外部環境の情報を参照して、内部状態又は外部環境に応じて表出すべき定義動作を選択する。また、行動計画駆動部８１４は、選択した定義動作に応じて更新されるアプリケーション・プログラムの状態を、状態保存部８１２に書き込む。
【０１１０】
行動検証シナリオ保持部８０２は、行動計画毎の行動検証シナリオを保持している。行動検証シナリオは、想定される外部環境の変化に従って行動計画から選択される、望ましい（若しくは、理想的な）定義動作の順序を定義したプログラム及びデータである。行動検証シナリオは、例えば行動計画プログラムの開発者が、想定する外部環境の変化に対して理想的と考える定義動作の順序である。
【０１１１】
擬似認識結果ストリーム出力部８０３は、行動計画制御部８１０内の外部環境入力部８１３に対して外部環境の擬似的な認識結果データをストリーム出力する。外部環境は、実機（自律動作装置１００）の周辺の環境データであり、本来は各モジュール部内のセンサの検出結果に基づいて認識されるデータある。但し、単体動作モードでは、評価対象となる行動計画から行動検証シナリオ通りの定義動作が順序で選択されるように想定される、理想的な外部環境の認識結果の時系列のデータ集合体からなる擬似認識結果ストリームを外部環境として用いる。例えば、行動検証シナリオと同時に擬似認識結果ストリームを定義する。そして、擬似認識結果ストリーム出力部８０３は、評価対象となる行動計画に対する行動検証シナリオとともに定義された擬似認識結果ストリームを、外部環境入力部８１３に出力する。
【０１１２】
シナリオ評価部８０１は、現在評価対象としている行動計画に対応する行動検証シナリオを行動検証シナリオ保持部８０２から読み出す。そして、シナリオ評価部８０１は、行動計画駆動部８１４が擬似認識結果ストリームに応じて順次選択する定義動作を、行動検証シナリオにおいて定義される定義動作の順序と比較した結果に基づいて、評価対象としている行動計画の評価・検証を実施する。
【０１１３】
図９には、シミュレーション・モードにおいて行動計画を評価・検証するためのソフトウェア・モジュールの構成例を示している。シミュレーション・モードにおける行動検証ソフトウェア９００は、シナリオ評価部９０１と、行動検証シナリオ保持部９０２を備え、物理エンジンと３Ｄグラフィックス・アニメーション機能を備えた開発ツール・プログラム内で仮想的に駆動される行動計画を評価・検証する構成となっている。
【０１１４】
物理エンジンと３Ｄグラフィックス・アニメーション機能を備えた開発ツール・プログラム内には、行動計画の駆動を制御する行動計画制御部９１０と仮想環境認識部９０３が配置される。行動計画制御部９１０は、評価対象行動計画保持部９１１と、状態保存部９１２と、外部環境入力部９１３と、行動計画駆動部９１４を備えている。
【０１１５】
評価対象行動計画保持部９１１は、行動検証ソフトウェア９００において評価対象となる１又はそれ以上の行動計画のプログラム及びデータを保持している。
【０１１６】
状態保存部９１２は、（仮想的な）外部環境の認識結果や、アプリケーション・プログラム（行動計画駆動部９１４で駆動される行動計画）の状態、すなわち内部状態を保存する。
【０１１７】
外部環境入力部９１３は、外部環境のデータを行動計画制御部９１０の外部から受け取り、状態保存部９１２への書き込み（更新）を行なう。外部環境は、本来は実機（自律動作装置１００）の周辺の環境データを指す。但し、シミュレーション・モードでは、物理エンジンと３Ｄグラフィックス・アニメーション機能を備えた開発ツール・プログラム内の仮想的な外部環境の認識結果の時系列の集合体である。仮想環境認識部９０３は、同開発ツール・プログラム内の仮想環境を認識して、外部環境入力部９１３に出力する。
【０１１８】
行動計画駆動部９１４は、評価対象（若しくは、シミュレーションの対象）としている行動計画のプログラム及びデータを評価対象行動計画保持部９１１から読み込むとともに、状態保存部９１２から現在の内部状態及び外部環境の情報を参照して、内部状態又は外部環境に応じて表出すべき定義動作を選択する。また、行動計画駆動部９１４は、選択した定義動作に応じて更新されるアプリケーション・プログラムの状態を、状態保存部９１２に書き込む。
【０１１９】
行動検証シナリオ保持部９０２は、行動計画毎の行動検証シナリオを保持している。行動検証シナリオは、想定される外部環境の変化に従って行動計画から選択される、望ましい（若しくは、理想的な）定義動作の順序を定義したプログラム及びデータである。行動検証シナリオは、例えば行動計画プログラムの開発者が、想定する外部環境の変化に対して理想的と考える定義動作の順序である。
【０１２０】
シナリオ評価部９０１は、現在評価対象としている行動計画に対応する行動検証シナリオを行動検証シナリオ保持部９０２から読み出す。そして、シナリオ評価部９０１は、行動計画駆動部９１４が仮想環境に応じて順次選択する定義動作を、行動検証シナリオにおいて定義される定義動作の順序と比較した結果に基づいて、評価対象としている行動計画の評価・検証を実施する。
【０１２１】
図１０には、実機動作モードにおいて行動計画を評価・検証するためのソフトウェア・モジュールの構成例を示している。実機動作モードにおける行動検証ソフトウェア１０００は、シナリオ評価部１００１と、行動検証シナリオ保持部１００２を備え、実機（自律動作装置１００）上で行動計画を駆動し、実環境に応じて起動させる定義動作を監視して行動計画の評価・検証を実施する。
【０１２２】
実機ハードウェア（自律動作装置１００）には、行動計画制御部１０１０と実環境認識部１００３が配置される。行動計画制御部１０１０は、具体的には本体部のプロセッサ上で行動計画を実行する行動計画制御ソフトウェアであるが、評価対象行動計画保持部１０１１と、状態保存部１０１２と、外部環境入力部１０１３と、行動計画駆動部１０１４を備えている。また、実環境認識部１００３は、各モジュール部内に配置されるセンサ及びプロセッサに相当し、プロセッサがセンサによる検出信号に基づいて実機１００の外部環境を認識する。
【０１２３】
評価対象行動計画保持部１０１１は、行動検証ソフトウェア１０００において評価対象となる１又はそれ以上の行動計画のプログラム及びデータを保持している。
【０１２４】
状態保存部１０１２は、外部環境の認識結果や、アプリケーション・プログラム（行動計画駆動部１０１４で駆動される行動計画）の状態、すなわち内部状態を保存する。
【０１２５】
外部環境入力部１０１３は、実機１００の外部環境のデータを行動計画制御部１０１０の外部から受け取り、状態保存部１０１２への書き込み（更新）を行なう。外部環境は、実機（自律動作装置１００）の周辺の現実の環境データであり、実環境認識部１００３から入力される。
【０１２６】
行動計画駆動部１０１４は、評価対象としている行動計画のプログラム及びデータを行動計画保持部１０１１から読み込むとともに、状態保存部１０１２から現在の内部状態及び外部環境の情報を参照して、内部状態又は外部環境に応じて表出すべき定義動作を選択する。また、行動計画駆動部１０１４は、選択した定義動作に応じて更新されるアプリケーション・プログラムの状態を、状態保存部１０１２に書き込む。
【０１２７】
行動検証シナリオ保持部１００２は、行動計画毎の行動検証シナリオを保持している。行動検証シナリオは、想定される外部環境の変化に従って行動計画から選択される、望ましい（若しくは、理想的な）定義動作の順序を定義したプログラム及びデータである。行動検証シナリオは、例えば行動計画プログラムの開発者が、想定する外部環境の変化に対して理想的と考える定義動作の順序である。
【０１２８】
シナリオ評価部１００１は、現在評価対象としている行動計画に対応する行動検証シナリオを行動検証シナリオ保持部１００２から読み出す。そして、シナリオ評価部１００１は、行動計画駆動部１０１４が実機周辺の実環境に応じて順次選択する定義動作を、行動検証シナリオにおいて定義される定義動作の順序と比較した結果に基づいて、評価対象としている行動計画の評価・検証を実施する。
【０１２９】
単体動作モード、シミュレーション・モード、及び実機動作モードのいずれにおいても、行動計画制御部を構成する各ソフトウェア・モジュール自体はほぼ同一であるが、モード毎に動作する実行環境と外部環境の入力源が相違する。外部環境入力部のインターフェースを適切に定義することによって、行動計画制御部はほぼ同じソフトウェア・モジュール構成のままでもさまざまな環境で動作することが可能である。
【０１３０】
単体動作モードでは、理想的な外部環境の認識結果である擬似認識結果ストリームを外部環境入力部８１３に入力することで、行動計画制御部８１０は、実機の実環境認識部の性能に左右されることなく、評価対象となる行動計画を高い再現性で評価・検証することができる。
【０１３１】
一方、同一構成の行動計画制御部９１０、１０１０がシミュレーション・モード及び実機動作モードの各々においても動作することにより、統合評価（インテグレーション・テスト）においても同形式の行動検証シナリオにより行動計画を評価することが可能となっている。
【０１３２】
いずれの動作モードにおいても、シナリオ評価部８０１（９０１、１００１）は、行動計画が実行された際に選択される定義動作の順序が行動検証シナリオに定義された順番と同一であるかどうかを比較する。そして、比較の結果、定義動作の順序が同一でないと判別された場合には、評価対象の行動計画の異常を検出する。
【０１３３】
図１１には、行動計画を評価・検証するための処理手順をフローチャートの形式で示している。以下では、単体動作モードにおける行動検証ソフトウェア８００が実行する処理手順として説明するが、シミュレーション・モード及び実機動作モードでも同様の処理手順となることを理解されたい。
【０１３４】
まず、状態保存部８１２の初期化処理として、評価対象となる行動計画の検証のための前提条件を状態保存部８１２に書き込む（ステップＳ１１０１）。検証の前提条件は、行動検証シナリオにおいて想定している前提条件であり、行動検証シナリオの定義時に同時に定義される。
【０１３５】
次いで、行動計画駆動部８１４を起動する（ステップＳ１１０２）。行動計画駆動部８１４は、評価対象行動計画保持部８１１から、今回の行動検証で評価対象とする行動計画を読み込み、行動計画の動作を開始する。
【０１３６】
そして、シナリオ評価部８０１は、行動計画駆動部８１４で順次呼び出す定義動作をチェックする（ステップＳ１１０３）。
【０１３７】
ステップＳ１１０２では、行動計画駆動部８１４において動作を開始した行動計画は、例えば所定の制御周期毎に状態保存部８１２に保存されている外部環境並びにアプリケーション・プログラムの状態（内部状態）を読み込み、その外部環境並びに内部状態からなる条件に適う定義動作を選択して呼び出す。そして、ステップＳ１１０３では、シナリオ評価部８０１は、行動検証シナリオ保持部８０２から、評価対象となっている行動計画に対応する行動検証シナリオを呼び出すと、行動計画が選択した定義動作が行動検証シナリオに定義された順番通りの期待された定義動作であるかどうかをチェックする。
【０１３８】
ここで、行動計画が選択した定義動作が行動検証シナリオに定義された順番通りの期待された定義動作でない場合には（ステップＳ１１０４のＮｏ）、評価対象の行動計画の異常を検出して、本処理を異常終了する。異常終了の場合、行動検証ソフトウェアや、物理エンジンと３Ｄグラフィックス・アニメーション機能を備えた開発ツール・プログラムであれば、ＧＵＩ上で、ダイアログボックスを表示するなど異常終了についての告知がなされるようにすることができる。また、実機動作モードの場合には、例えば図１中の参照番号１２１で例示したスピーカ用ドライバを駆動して、音声によってユーザに告知したり、通信モデム１２５を用いてユーザの携帯端末（スマートフォンなど）に通知したりするようにしてもよい。
【０１３９】
一方、今回の制御周期で行動計画が選択した定義動作が、定義動作が行動検証シナリオに定義された順番通りの期待された定義動作である場合には（ステップＳ１１０４のＹｅｓ）、行動検証シナリオで順序が定義されたすべての定義動作について評価・検証が完了したかどうかをチェックする（ステップＳ１１０５）。
【０１４０】
行動検証シナリオがまだ完了していない場合には（ステップＳ１１０５のＮｏ）、外部環境入力部８１３に入力される擬似認証結果と、現在のアプリケーション・プログラムの状態（内部状態）を書き込んで、状態保存部８１２が保存している状態を更新する（ステップＳ１１０６）。その後、ステップＳ１１０３に戻って、行動検証シナリオを用いた行動計画が次に呼び出す定義動作についてのチェックを繰り返し実施する。
【０１４１】
以降、行動検証シナリオの終端に到達するまで、上記と同様の処理を繰り返し実施する。そして、異常が検出されることなく、行動検証シナリオの終端に到達することができた場合には（ステップＳ１１０５のＹｅｓ）、評価対象の行動計画は正常であると結論して、本処理を正常終了する。
【０１４２】
図１２には、上述した行動計画の評価・検証を含んだ行動計画の開発ワークフローの一例を示している。
【０１４３】
開発者は、例えば開発装置２００上で動作する開発ツール・プログラムを用いて、ロボットなどの自律動作装置１００の行動計画の設計・開発を行なう。従来、設計・開発された行動計画をシミュレータに掛けたり実機を駆動させたりすることで評価・検証が行なわれていたが、行動計画単体での評価は難しかった。これに対し、本実施形態では、図８に示したような、行動検証ソフトウェアの単体動作モードを利用して、行動計画単体の評価・検証を行なうことができる。
【０１４４】
次いで、物理エンジン機能などを利用した開発ツール・プログラム実行環境下で、自律動作装置１００の行動計画の設計・開発を行なう。そして、図９に示したような、行動検証ソフトウェアのシミュレーション・モードを利用して、開発ツール・プログラム実行環境での行動計画の統合評価を実施する。
【０１４５】
さらに、開発装置２００に自律動作装置１００の実機を接続して、実機動作環境下で、自律動作装置１００の行動計画の設計・開発を行なう。そして、図１０に示したような、行動検証ソフトウェアの実機動作モードを利用して、実機環境での行動計画の統合評価を実施する。
【０１４６】
行動計画の開発スケジュールは、開発ツール・プログラム実行環境並びに実機環境での統合評価環境の開発速度の影響を受ける。本実施形態によれば、行動検証ソフトウェアの単体動作モードを利用することで行動計画の単体評価を行なうことが可能になるので、比較的他モジュールとは独立性の高い並行開発の実現を期待することができる。
【０１４７】
一般的なソフトウェア開発では、プログラムを評価・検証に用いる検証用コードの作成は、プログラムの開発を担当したプログラマ自身が行なう。これに対し、本実施形態では、行動計画の設計・開発を担当したプログラマ以外のデザイナーなども行動検証シナリオを作成することを想定している。
【０１４８】
図１３には、行動検証シナリオの作成に適用されるＧＵＩツール１３００の構成例を模式的に示している。図示のＧＵＩツール１３００は、評価対象となる行動計画を表示する行動計画表示ペイン１３０１と、行動計画に評価・検証に用いる行動検証シナリオの設計に用いる行動検証シナリオ設計ペイン１３０２と、行動検証シナリオに関するプロパティを設定するためのプロパティ設定ペイン１３０３を含んでいる。
【０１４９】
もちろん、ＧＵＩツール１３００は、図示したペイン１３０１〜１３０３以外のペインを表示してもよいし、行動検証シナリオの設計作業に利用されるツール・ボタンなどのＧＵＩ部品を表示してもよいが、図面の簡素化のため省略している。
【０１５０】
本実施形態では、ツリー構造の形式で表現した行動計画を想定している。したがって、行動計画表示ペイン１３０１内には、評価対象となる行動計画を表現したツリーが表示される。ツリー上の末端のノードＡ、Ｂ、Ｃ、…はそれぞれ定義動作に相当する。また、末端以外のノードは、すべて条件ノードであり、現在観測される外部環境と内部状態に応じていずれかの枝を選択する。行動計画を駆動する自律動作装置１００は、例えば定義動作が完了したとき、外部環境の変化が観測されるなどのイベントが発生したとき、あるいは所定の制御周期毎に、ツリーのルートからツリー探索を開始して、現在観測される外部環境と内部状態に適合する末端ノードに該当する定義動作を選択する。
【０１５１】
行動検証シナリオは、評価対象となる行動計画に対して定義される、望ましい（若しくは、理想的な）定義動作の順序を示す。行動検証シナリオ設計ペイン１３０２では、それぞれ定義動作に相当する複数のノードＢ、Ａ、Ｅ、Ｆ、…をタイムライン方向に配置することによって、タイムライン方向の順番通りの定義動作からなる行動検証シナリオを設計することができる。デザイナーは、例えば行動景観表示ペイン１３０１に表示されているツリーの中から、所望する定義動作に対応する末端ノードを行動検証シナリオ設計ペイン１３０２内にドラッグ・アンド・ドロップ操作するという簡便で直感的な作業により、行動検証シナリオを設計することができる。また、ある定義動作から次の定義動作に移行する際の外部環境などの条件（Ｅｎｖ  ｄａｔａ）を、行動検証シナリオ設計ペイン１３０２内で、該当するノード間を結ぶジョイント上に記述するという形式で定義することができる。
【０１５２】
プロパティ設定ペイン１３０３では、行動検証シナリオ全般の設定値や、フォーカスされているオブジェクトの情報を表示する。例えば、行動検証シナリオ設定ペイン１３０２内で、定義動作のノードや、ノード間の遷移条件（Ｅｎｖ  ｄａｔａ）のオブジェクトを選択すると、そのオブジェクトのプロパティに関する詳細な情報がプロパティ設定ペイン１３０３に表示され、編集することができる。
【０１５３】
行動計画の設計には、ステートマシンやツリーなどを構築する手法がよく利用されており、ビジュアル・プログラミング・ツールにより作業分担も可能である。図１３に示したＧＵＩツール１３００は、行動計画の評価・検証プログラムである行動検証シナリオの作成にまで拡張するものである。ＧＵＩツール１３００を用いることにより、行動計画の設計・開発者は、行動計画の仕様策定、実装、評価に至るまでの一連の作業を行なうことが可能である。
【０１５４】
行動検証シナリオの主な評価項目は定義動作の実行順序であるが、それ以外の評価を行動検証シナリオに組み込むことができる。例えば、下記のような項目を、定義動作の実行順序と並列して評価することが考えられる。
【０１５５】
（Ａ）選択した定義動作を実行した際、状態保存部８１２に保存される状態が期待通りか。
（Ｂ）検証は期待通りの時間内に終わるか。
（Ｃ）期待通りに、指定した以外の定義動作が選択されたか。
【０１５６】
シナリオは、所定の事象を検出したときの情報をシナリオに関連付けて記録する機能を備えている（前述）。したがって、行動検証シナリオは、このような機能を利用して、上記（Ａ）〜（Ｃ）のような評価項目を行動検証シナリオに関連付けて記録するようすればよい。また、行動検証シナリオにより記録されたデータを外部に取り出すＡＰＩを定義すれば、シナリオ評価部８０１（又は、９０１、１００１）は、このＡＰＩを呼び出すことによって、定義動作の順序以外のさまざまな評価項目についても評価・検証することが可能になる。
【０１５７】
図１４には、上述した行動計画の評価・検証方法の応用例に係るシステム構成を示している。図示のシステムは、開発済みの行動計画を実機１００上で駆動させる際に観測される外部環境や内部状態を認識ストリームのデータとして取り出して、開発装置２００上において単体動作モードで動作する行動検証ソフトウェア１４００に入力して、実機上の環境をソフトウェアで再現するという構成になっている。認識結果ストリームは、例えば図２に示したようなネットワーク環境において、無線又は有線の通信によって送信される。通信ネットワークは、Ｐ２Ｐ型、ＬＡＮ、ＷＡＮ、あるいはインターネットなどのいずれで構成されていてもよい。
【０１５８】
実機ハードウェア（自律動作装置１００）には、行動計画制御部１４３０と実環境認識部１４３５が配置される。行動計画制御部１４３０は、具体的には本体部のプロセッサ上で行動計画を実行する行動計画制御ソフトウェアであるが、行動計画保持部１４３１と、状態保存部１４３２と、外部環境入力部１４３３と、行動計画駆動部１４３４を備えている。
【０１５９】
行動計画保持部１４３１は、本体部１１０のメモリ１１２又は各モジュール部１２０内のメモリ１２３に相当し、開発済みの１又はそれ以上の行動計画のプログラム及びデータを保持している。
【０１６０】
実環境認識部１４３５は、各モジュール部１２０内に配置されるセンサ１２４及びプロセッサ１２２に相当し、プロセッサ１２２がセンサ１２４による検出信号に基づいて実機１００の外部環境を認識する。外部環境入力部１４３３は、実環境認識部１４３５から実機１００の外部環境のデータを受け取り、状態保存部１４３２への書き込み（更新）を行なう。
【０１６１】
外部環境入力部１４３３は、実環境認識部１４３５から外部環境のデータを受け取り、状態保存部１４３２への書き込み（更新）を行なう。
【０１６２】
行動計画駆動部１４３４は、実機１００で駆動すべき行動計画のプログラム及びデータを行動計画保持部１４３１から読み込むとともに、状態保存部１４３２から現在の内部状態及び外部環境の情報を参照して、内部状態又は外部環境に応じて表出すべき定義動作を選択する。また、行動計画駆動部１４３４は、選択した定義動作に応じて更新されるアプリケーション・プログラムの状態を、状態保存部１４３２に書き込む。
【０１６３】
ここで、実機１００上で行動計画が期待通りに動かなかった場合（行動計画の不具合がユーザ環境下で発生した場合）などには、状態保存部１４３２に保存されている内部状態並びに外部環境を、認識結果ストリームとして取り出す。状態保存部１４３２からの認識結果ストリームの取り出しは、行動検証シナリオにより記録されたデータを外部に取り出すように定義したＡＰＩを用いて実施することができる。ここで言う「認識結果ストリーム」は、単体動作モード（図８を参照のこと）における「擬似認識結果ストリーム」と同質のデータであり、行動検証ソフトウェアへの入力データとしてそのまま使用することができるデータである。
【０１６４】
そして、開発装置２００上において、実機１００上の状態保存部１４３２から取り出した認識結果ストリームを、単体動作モードで動作する行動検証ソフトウェア１４００に入力して、実機上の環境をソフトウェアで再現する。
【０１６５】
行動検証ソフトウェア１４００は、当該ソフトウェア１４００内の行動計画制御部１４１０で駆動させている行動計画を評価・検証する構成となっている。行動計画制御部１４１０は、評価対象行動計画保持部１４１１と、状態保存部１４１２と、外部環境入力部１４１３と、行動計画駆動部１４１４を備えている。
【０１６６】
外部環境入力部１４３３は、実機１００から取り出された認識結果ストリームの受け取り、状態保存部１０１２への書き込み（更新）を行なう。
【０１６７】
評価対象行動計画保持部１４１１は、行動検証ソフトウェア１４００において評価対象となる１又はそれ以上の行動計画のプログラム及びデータを保持している。行動計画駆動部１４３４は、実機１００側で不具合が発生した行動計画のプログラム及びデータを行動計画保持部１４３１から読み込むとともに、状態保存部１４３２から認識結果ストリームとして逐次入力される内部状態及び外部環境の情報を参照して、内部状態又は外部環境に応じて表出すべき定義動作を選択することで、同じ行動計画を駆動させていた実機１００側で不具合が発生したときの環境を再現する。
【０１６８】
行動検証シナリオ保持部１４０２は、行動計画毎の行動検証シナリオを保持している。行動検証シナリオは、想定される外部環境の変化に従って行動計画から選択される、望ましい（若しくは、理想的な）定義動作の順序を定義したプログラム及びデータである。行動検証シナリオは、例えば行動計画プログラムの開発者が、想定する外部環境の変化に対して理想的と考える定義動作の順序である。
【０１６９】
シナリオ評価部１４０１は、不具合が発生した実機１００において駆動していた行動計画に対応する行動検証シナリオを行動検証シナリオ保持部１４０２から読み出す。そして、シナリオ評価部１４０１は、行動計画駆動部１４３４が実機周辺の実環境に応じて順次選択する定義動作を、行動検証シナリオにおいて定義される定義動作の順序と比較した結果に基づいて、再現された不具合発生環境下において行動計画の評価・検証を実施する。
【０１７０】
ソフトウェアの不具合を修復するためのファースト・ステップは、不具合を再現させることである。ユーザの環境で発生する問題を開発者の環境で再現できないケースも想定される。その理由として、ユーザの環境にのみ存在する特殊な状況で、開発者の環境には存在しないことが挙げられる。
【０１７１】
本実施形態では、状態保存部に保存される情報のみを状態として扱って行動計画を駆動する構成となっている（例えば、図８〜図１０を参照のこと）。したがって、図１４に示したシステム構成では、実機１００においてソフトウェアの不具合が発生したときの状態保存部１４３２に保存されている状態を認識結果ストリームとして取り出して、行動検証ソフトウェア１４００を実行する開発装置２００に転送することで、ユーザの環境で発生した不具合を開発者の環境でも確実に再現することが可能になる。その結果として、開発者において不具合の解析とソフトウェアの修復を容易に進めることが可能になる。
【０１７２】
本明細書で開示する技術の利点を以下に挙げておく。
【０１７３】
・検証開発容易性
行動計画を実行するための検証項目をまとめた行動検証シナリオを構築するＧＵＩ環境（図１３を参照のこと）を提供することで、従来はプログラマ以外には難しかった検証項目開発の難易度を低減することができる。
【０１７４】
・評価・検証の効率化、高速化
あらかじめ定義した認識結果を入力して行動計画を駆動させることで、非常に短時間で行動計画を評価・検証することが可能となる。
【０１７５】
・再現性
単体動作モードの行動検証ソフトウェアでは、実機の外部環境を認識する実環境認識部などのモジュールを使用しないで、完全な理想環境で行動計画の評価・検証を実施するので、再現性のある評価結果を得ることができる。
【０１７６】
・並行開発容易性
単体動作モードの行動検証ソフトウェアでは、行動検証シナリオとともに定義された理想的な擬似認識結果ストリームを用いて行動計画の評価・検証を実施することができる。すなわち、シミュレータ・モードで使用する仮想環境認識部や、実機動作モードで使用する実環境認識部などの他モジュールの開発を待たずに、行動計画の評価・検証を開始することができる。その結果として、行動計画のような認識結果に応じて行動を制御する認識系のプログラムの開発を、自律動作装置１００の実機動作を制御する動作制御プログラムとは完全に独立して行なうことが可能となる。
【０１７７】
・不具合箇所の特定容易性
本明細書で開示する技術によれば、行動検証ソフトウェアの単体動作モードを利用して、行動計画を単体で評価・検証することができる。したがって、単体評価は通過していることを前提として、行動計画の統合評価を開始することができるので、不具合を発生した箇所の絞り込みが容易となる。
【０１７８】
・行動検証シナリオの流用
行動検証ソフトウェアの単体動作モードにおいて用いた行動検証シナリオを、シミュレーション・モード及び実機動作モードでも一切変更することなく、使用することができる。したがって、行動計画制御ソフトウェアの実行環境が変わったとしても、新たに評価項目や検証用コードを書き起こすといった作業が不要となる。
【産業上の利用可能性】
【０１７９】
以上、特定の実施形態を参照しながら、本明細書で開示する技術について詳細に説明してきた。しかしながら、本明細書で開示する技術の要旨を逸脱しない範囲で当業者が該実施形態の修正や代用を成し得ることは自明である。【０１８０】
本明細書で開示する技術は、ロボットや自動走行車、無人航空機（ドローン）などの自律動作装置の自律的若しくは適応的な行動を実現するアプリケーション・プログラムの動作の評価・検証に利用することができる。さまざまな車種やさまざまに機種に対してそれぞれ別の行動計画を開発するよりも、各車種や各機種の上で抽象化した実行環境において１つの行動計画を入念に評価するというモデルが現実的であり、図８〜図１０に示したような行動計画の評価・検証方法が適していると考えられる。【０１８１】
また、本明細書で開示する技術は、行動計画を用いて動作を制御する、ビデオ・ゲームのキャラクターのＡＩ開発に対しても適用することができる。ゲーム開発においては、実機動作環境での行動計画の評価・検証の工程が省かれるだけで、他はロボットなどの自律動作装置の行動計画の開発工程と基本的に同様である。【０１８２】
要するに、例示という形態により本明細書で開示する技術について説明してきたのであり、本明細書の記載内容を限定的に解釈するべきではない。本明細書で開示する技術の要旨を判断するためには、特許請求の範囲を参酌すべきである。【０１８３】
なお、本明細書の開示の技術は、以下のような構成をとることも可能である。
（１）適応制御装置が環境に応じた動作を実行するように記述されたプログラムを処理する情報処理装置であって、
呼び出されるべき動作の順序を定義する行動検証シナリオを保持する保持部と、
前記プログラムが順次呼び出す動作と前記行動検証シナリオを比較して、前記プログラムの評価又は検証を行なう評価部と、
を具備する情報処理装置。
（２）外部から入力される環境情報に応じて、前記プログラムの駆動を制御するプログラム実行制御部をさらに備え、
前記評価部は、前記プログラム実行制御部により駆動される前記プログラムが前記環境情報に応じて順次呼び出す動作と前記行動検証シナリオで定義される動作の順序とを比較して、前記プログラムの評価又は検証を行なう、
上記（１）に記載の情報処理装置。
（３）前記プログラム実行制御部は、外部から入力される擬似的な環境情報に応じた動作を呼び出し、
前記評価部は、前記プログラム実行制御部により駆動される前記プログラムが前記擬似的な環境情報に応じて順次呼び出す動作と前記行動検証シナリオで定義される動作の順序とを比較して、前記プログラムの評価又は検証を行なう、
上記（２）に記載の情報処理装置。
（４）前記行動検証シナリオ通りの動作が順序で呼び出されるように想定して定義される前記擬似的な環境情報を前記プログラム実行制御部に対して出力する擬似環境情報出力部をさらに備える、
上記（３）に記載の情報処理装置。
（５）前記評価部は、前記適応制御装置のシミュレータにより駆動される前記プログラムが順次呼び出す動作と前記行動検証シナリオで定義される動作の順序とを比較して、前記プログラムの評価又は検証を行なう、
上記（１）に記載の情報処理装置。
（６）前記シミュレータは、前記シミュレータ内の仮想環境を認識して得られる仮想的な環境情報に応じて前記プログラムを駆動し、
前記評価部は、前記シミュレータにより駆動される前記プログラムが前記仮想的な環境情報に応じて順次呼び出す動作と前記行動検証シナリオで定義される動作の順序とを比較して、前記プログラムの評価又は検証を行なう、
上記（５）に記載の情報処理装置。
（７）前記評価部は、前記適応制御装置上により実際に駆動される前記プログラムが順次呼び出す動作と前記行動検証シナリオで定義される動作の順序とを比較して、前記プログラムの評価又は検証を行なう、
上記（１）に記載の情報処理装置。
（８）前記適応制御装置は環境情報を認識する認識部をさらに備え、
前記適応制御装置上で駆動する前記プログラムは、前記認識部において認識される現実の環境情報に応じて動作を呼び出し、
前記評価部は、前記適応制御装置により駆動される前記プログラムが前記認識部において認識された現実の環境情報に応じて順次呼び出す動作と前記行動検証シナリオで定義される動作の順序とを比較して、前記プログラムの評価又は検証を行なう、
上記（７）に記載の情報処理装置。
（９）前記プログラム実行制御部は、前記プログラムを駆動する適応制御装置において認識された環境情報を外部から入力して、前記プログラムの駆動を制御し、
前記評価部は、前記プログラム実行制御部により駆動される前記プログラムが、前記プログラムを駆動する適応制御装置において認識された環境情報に応じて順次呼び出す動作と前記行動検証シナリオで定義される動作の順序とを比較して、前記プログラムの評価又は検証を行なう、
上記（２）に記載の情報処理装置。
（１０）前記評価部は、評価対象となる前記プログラムが呼び出す動作の順序を前記行動検証シナリオに定義された順番と比較し、同一でない場合には前記プログラムの異常を検出する、
上記（１）乃至（９）のいずれかに記載の情報処理装置。
（１１）適応制御装置が環境に応じた動作を実行するように記述されたプログラムを処理する情報処理方法であって、
呼び出されるべき動作の順序を定義する行動検証シナリオを読み出すステップと、
前記プログラムが順次呼び出す動作と前記行動検証シナリオを比較して、前記プログラムの評価又は検証を行なう評価ステップと、
を有する情報処理方法。
（１２）呼び出されるべき動作の順序を定義する行動検証シナリオを保持する保持部、
適応制御装置が環境に応じた動作を実行するように記述されたプログラムが順次呼び出す動作と前記行動検証シナリオを比較して、前記プログラムの評価又は検証を行なう評価部、
として機能するようにコンピュータ可読形式で記述されたコンピュータ・プログラム。
（１３）適応制御装置が環境に応じた動作を制御する制御プログラムを製造するプログラム製造方法であって、
前記制御プログラムに、呼び出されるべき動作の順序を定義する行動検証シナリオを設定する行動シナリオ設定ステップと、
前記制御プログラムに、前記プログラムが順次呼び出す動作と前記行動検証シナリオを比較して前記プログラムの評価又は検証を行なう条件を設定する検証条件設定ステップと、
を具備するプログラム製造方法。
【符号の説明】
【０１８４】
１００…自律動作装置（実機）
１１０…本体部
１１１…プロセッサ、１１２…メモリ、１１３…通信モデム
１１４…バッテリー、１１５…ＵＳＢポート、１１６…ＧＰＳ
１２０…モジュール部
１２１…アクチュエータ、１２２…プロセッサ
１２３…メモリ、１２４…センサ、１２５…通信モデム
２００…開発装置、２１０…コンピュータ本体部
２１１…プロセッサ、２１２…ＧＰＵ
２１３…メモリ、２１４…ＵＳＢポート、２１５…通信モデム
２２０…ディスプレイ、２３０…ユーザ・インターフェース
８００…行動検証ソフトウェア（単体動作モード）
８０１…シナリオ評価部、８０２…行動検証シナリオ保持部
８０３…擬似認識結果ストリーム出力部
８１０…行動計画制御部
８１１…評価対象行動計画保持部、８１２…状態保存部
８１３…外部環境入力部、８１４…行動計画駆動部
９００…行動検証ソフトウェア（シミュレーション・モード）
９０１…シナリオ評価部、９０２…行動検証シナリオ保持部
９０３…仮想環境認識部
９１０…行動計画制御部
９１１…評価対象行動計画保持部、９１２…状態保存部
９１３…外部環境入力部、９１４…行動計画駆動部
１０００…行動検証ソフトウェア（実機動作モード）
１００１…シナリオ評価部、１００２…行動検証シナリオ保持部
１００３…実環境認識部
１０１０…行動計画制御部
１０１１…評価対象行動計画保持部、１０１２…状態保存部
１０１３…外部環境入力部、１０１４…行動計画駆動部
【図１】
2018180143.tif 000003
【図２】
2018180143.tif 000004
【図３】
2018180143.tif 000005
【図４】
2018180143.tif 000006
【図５】
2018180143.tif 000007
【図６】
2018180143.tif 000008
【図７】
2018180143.tif 000009
【図８】
2018180143.tif 000010
【図９】
2018180143.tif 000011
【図１０】
2018180143.tif 000012
【図１１】
2018180143.tif 000013
【図１２】
2018180143.tif 000014
【図１３】
2018180143.tif 000015
【図１４】
2018180143.tif 000016
【国際調査報告】
2018180143.tif 000017
2018180143.tif 000018
2018180143.tif 000019
2018180143.tif 000020