(57)【要約】【課題】シナリオを適切に編集することができる。【解決手段】ロボット装置を動作させる命令を含む複数のモジュールを含んで構成されるシナリオを作成し、作成したシナリオに基づいてロボット装置を制御するロボット装置制御システムであって、ロボット装置を動作させる命令を含む複数のモジュールからモジュールの選択を受け付けるモジュール受付部と、共通処理が規定されたシナリオテンプレートにモジュール受付部で選択されたモジュールを組み込んで実行可能なシナリオを作成するシナリオ作成部と、シナリオ作成部で作成されたシナリオを出力する出力部と、を設けるようにした。【選択図】図１
2019118992.tif 000002
【特許請求の範囲】
【請求項１】
ロボット装置を動作させる命令を含む複数のモジュールを含んで構成されるシナリオを作成し、作成したシナリオに基づいてロボット装置を制御するロボット装置制御システムであって、
ロボット装置を動作させる命令を含む複数のモジュールからモジュールの選択を受け付けるモジュール受付部と、
共通処理が規定されたシナリオテンプレートに前記モジュール受付部で選択されたモジュールを組み込んで実行可能なシナリオを作成するシナリオ作成部と、
前記シナリオ作成部で作成されたシナリオを出力する出力部と、
を備えることを特徴とするロボット装置制御システム。
【請求項２】
前記複数のモジュールには、ロボット装置の移動を指示する命令を含むモジュールと、ロボット装置の発話を指示する命令を含むモジュールとの両方または一方が含まれる、
ことを特徴とする請求項１に記載のロボット装置制御システム。
【請求項３】
前記複数のモジュールの各々に対応したテストモジュールを格納するテストモジュールＤＢを備え、
前記モジュール受付部で受け付けられたモジュールに対応するテストモジュールを前記テストモジュールＤＢから選択し、テストテーブルに登録するテストモジュール登録部を備える、
ことを特徴とする請求項１に記載のロボット装置制御システム。
【請求項４】
前記モジュール受付部は、モジュールの指定を受け付けるときに、前記モジュールの動作を指定するパラメタを受け取り、
前記シナリオ作成部は、前記モジュール受付部で選択されたモジュールに受け取られたパラメタを指定してシナリオテンプレートに組み込んで実行可能なシナリオを作成する、
ことを特徴とする請求項１に記載のロボット装置制御システム。
【請求項５】
前記モジュール受付部が受け取るパラメタには、ロボット装置の発話内容が含まれる、
ことを特徴とする請求項４に記載のロボット装置制御システム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明はロボット装置制御システムに関し、例えばシナリオに基づいてロボットを制御するロボット装置制御システムに適用して好適なものである。
【背景技術】
【０００２】
ロボットの制御に係るシナリオを作成する際、ロボットが持つ機能に対応している有効なプログラムまたはデータであるか否かを判定し、有効なプログラムまたはデータであった場合にのみ、シナリオへの追加、変更、削除ができるようにする技術が開示されている（特許文献１参照）。
【０００３】
また、複数のシナリオをロボットに送信し、ロボットは、複数のシナリオの中から最適なシナリオを選択して実行する技術が開示されている（特許文献２参照）。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２００５−０７４６０１号公報
【特許文献２】特開２００２−３０１６７５号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
ロボットの動作は複雑化しつつあり、上記特許文献１および特許文献２に記載の技術を用いたとしても、シナリオが多岐にわたるため、シナリオの作成工数の作業量が大きくなってしまうという問題がある。
【０００６】
また、商業施設、公共交通機関、観光地など、ロボットが用いられる現場は多様であり、ロボットによるサービスを一定水準以上で提供することが困難となっている。
【０００７】
本発明は以上の点を考慮してなされたもので、シナリオを適切に編集し得るロボット装置制御システムを提案しようとするものである。
【課題を解決するための手段】
【０００８】
かかる課題を解決するため本発明においては、ロボット装置を動作させる命令を含む複数のモジュールを含んで構成されるシナリオを作成し、作成したシナリオに基づいてロボット装置を制御するロボット装置制御システムであって、ロボット装置を動作させる命令を含む複数のモジュールからモジュールの選択を受け付けるモジュール受付部と、共通処理が規定されたシナリオテンプレートに前記モジュール受付部で選択されたモジュールを組み込んで実行可能なシナリオを作成するシナリオ作成部と、前記シナリオ作成部で作成されたシナリオを出力する出力部と、を設けるようにした。
【０００９】
上記構成によれば、予め設けられた複数のモジュールから選択されたモジュールをシナリオテンプレートに組み込むことにより、例えば、シナリオの作成工数を低減することができるようになり、かつ、一定水準以上のサービスを提供できるようになる。
【発明の効果】
【００１０】
本発明によれば、シナリオを適切に編集することができる。
【図面の簡単な説明】
【００１１】
【図１】第１の実施の形態によるロボット装置制御システムの構成の一例を示す図である。
【図２】第１の実施の形態によるモジュールＤＢの一例を示す図である。
【図３】第１の実施の形態によるパラメタＤＢの一例を示す図である。
【図４】第１の実施の形態によるシナリオテンプレートＤＢの一例を示す図である。
【図５】第１の実施の形態によるテストテーブルの一例を示す図である。
【図６】第１の実施の形態によるシナリオテンプレートファイルの一例を示す図である。
【図７】第１の実施の形態によるシナリオ編集処理に係る処理手順の一例を示す図である。
【図８】第１の実施の形態によるモジュール受付処理に係る処理手順の一例を示す図である。
【図９】第１の実施の形態によるテストモジュール登録処理に係る処理手順の一例を示す図である。
【図１０】第１の実施の形態によるシナリオ作成処理に係る処理手順の一例を示す図である。
【図１１】第１の実施の形態による出力処理に係る処理手順の一例を示す図である。
【図１２】第１の実施の形態によるシナリオタスク処理に係る処理手順の一例を示す図である。
【図１３】第１の実施の形態による制御種別毎処理に係る処理手順の一例を示す図である。
【図１４】第１の実施の形態による号機管理ＤＢの一例を示す図である。
【図１５】第１の実施の形態による出力データテーブルの一例を示す図である。
【図１６】第１の実施の形態によるシナリオテンプレート実行処理に係る処理手順の一例を示す図である。
【発明を実施するための形態】
【００１２】
以下図面について、本発明の一実施の形態を詳述する。
【００１３】
（１）第１の実施の形態
行動、発話などのロボットの動作をモジュール単位で組み合わせてシナリオを作成するシステムにおいて、ロボットの動作は複雑化しつつあり、シナリオが多岐にわたるため、シナリオの作成工数の作業量が大きくなってしまうという問題がある。また、商業施設、公共交通機関、観光地など、ロボットが用いられる現場は多様であり、ロボットによるサービスを一定水準以上で提供することが困難となっている。
【００１４】
また、モジュールの組合せは正しいが期待したシナリオ通りにロボットが動作しないということがある。そのため、テストデータを入力して事前にシナリオ通りに動作するかを検証する必要がある。しかしながら、従来の技術では、シナリオをロボットに送付して実行することが可能であるが、変更後のシナリオに対して動作検証が事前にできない。また、従来の技術では、プログラムやデータをモジュール単位にて事前に繋ぎ合わせることが可能であるか否かの事前判断はできるが、シナリオ内の変更を行った結果、シナリオ通りに動作するかを事前に検証できない。
【００１５】
そこで、本実施の形態では、ロボット装置制御システムの保守性を高めるために、シナリオを適切に編集可能な構成（方法）について説明する。また、ロボット装置制御システムの保守性を高めるために、編集したシナリオに対して事前に検証可能な構成（方法）について説明する。
【００１６】
図１において、１０００は全体として第１の実施の形態によるロボット装置制御システムを示す。ロボット装置制御システム１０００は、シナリオ作成装置１、データ変換装置２、シナリオ表示端末装置３、シナリオ処理装置４、ロボット装置５、および検索エンジン６を備え、これらは、ネットワーク７を介して通信可能に接続されている。
【００１７】
シナリオ作成装置１は、ロボット装置５を動作させるためのモジュールを組み合わせてシナリオを作成する装置であって、ノートパソコン、サーバ装置等であり、図示は省略するＣＰＵ（Central  Processing  Unit）、ＲＡＭ（Random  Access  Memory）、ＲＯＭ（Read  Only  Memory）、ＨＤＤ（Hard  Disk  Drive）、ＮＩＣ（Network  Interface  Card）などを含んで構成される。
【００１８】
シナリオ作成装置１の機能（モジュール受付部１０１、テストモジュール登録部１０２、シナリオ作成部１０３、出力部１０４など）は、例えば、ＣＰＵがＲＯＭに格納されたプログラムをＲＡＭに読み出して実行すること（ソフトウェア）により実現されてもよいし、専用の回路などのハードウェアにより実現されてもよいし、ソフトウェアとハードウェアとが組み合わされて実現されてもよい。また、シナリオ作成装置１の機能の一部は、シナリオ作成装置１と通信可能な他のコンピュータ（シナリオ処理装置４等であってもよい。）により実現されてもよい。
【００１９】
また、シナリオ作成装置１は、通信部１０Ｂを備える。通信部１０Ｂは、例えば、ＮＩＣから構成され、シナリオ処理装置４等との通信時におけるプロトコル制御を行う。
【００２０】
シナリオ作成装置１は、シナリオ管理ＤＢ１１と、モジュールＤＢ１２と、パラメタＤＢ１３と、シナリオテンプレートＤＢ１４と、テストモジュールＤＢ１５と、テストテーブル１６と、モジュールファイル１７と、シナリオテンプレートファイル１８と、テストモジュールファイル１９とをＨＤＤなどの記憶装置に記憶（格納）する。
【００２１】
なお、シナリオ作成装置１の詳細については図２〜図１３を用いて後述する。
【００２２】
データ変換装置２は、シナリオ作成装置１と同様、ＣＰＵ等を含むノートパソコン、サーバ装置等であり、概念ＤＢ２１と、音声ＤＢ２２と、映像ＤＢ２３と、音声ファイル２４と、映像ファイル２５と、データ変換部２６と、通信部２７とを備える。
【００２３】
概念ＤＢ２１は、シナリオの実施時に想定される概念を扱うＤＢであり、概念ＤＢ２１には、ＤＢ内でユニークとなる概念ＩＤと概念データとの情報が対応付けられて格納されている。概念データは、箇条書きのテキスト形式のデータであってもよいし、機械的に解釈できる文法に従いバイナリ化されたデータであってもよい。
【００２４】
音声ＤＢ２２は、概念データと対になる音声が管理されたＤＢであり、音声ＤＢ２２には、ＤＢ内でユニークとなる音声ＩＤと、概念ＤＢ２１の概念ＩＤを示す概念ＩＤと、音声ファイル名との情報が対応付けられて格納されている。音声ファイル名の音声ファイルは、音声ファイル２４として格納されている。
【００２５】
映像ＤＢ２３は、概念データと対になる映像が管理されたＤＢであり、映像ＤＢ２３には、ＤＢ内でユニークとなる映像ＩＤと、概念ＤＢ２１の概念ＩＤを示す概念ＩＤと、映像ファイル名との情報が対応付けられて格納されている。映像ファイル名の映像ファイルは、映像ファイル２５として格納されている。
【００２６】
データ変換装置２は、音声データから概念データ、映像データから概念データ、概念データから音声データ、概念データから映像データへのそれぞれデータ変換を行う。また、データ変換装置２は、音声データから概念データ、映像データから概念データに変換した際に、概念ＤＢ２１に変換した概念データに近いデータが無い場合には、検索エンジン６より概念データと対になる音声データ、映像データを取得してそれぞれ概念ＤＢ２１、音声ＤＢ２２、映像ＤＢ２３にレコードを追加する。
【００２７】
より具体的には、データ変換装置２は、シナリオ作成装置１またはシナリオ処理装置４からの受信待ちを行う。なお、シナリオ作成装置１またはシナリオ処理装置４からの受信データは、変換前データと、変換前データ型と、変換後データ型との３つで構成される。
【００２８】
続いて、データ変換装置２は、変換前データ型が概念データ型であるか否かを判定する。続いて、データ変換装置２は、変換前データ型が概念データ型であると判定した場合、変換後データ型は音声データ型であるか否かを判定する。続いて、データ変換装置２は、変換後データ型が音声データ型であると判定した場合、音声ＤＢ２２を検索し、該当の音声ファイル２４のデータを応答データにセットし、変換後データ型が音声データ型でないと判定した場合、映像ＤＢ２３を検索し、該当の映像ファイル２５を応答データにセットする。
【００２９】
データ変換装置２は、変換前データ型が概念データ型でないと判定した場合、変換前データ型が音声データ型であるか否かを判定する。データ変換装置２は、変換前データ型が音声データ型であると判定した場合、音声データを概念データに変換し、変換前データ型が音声データでないと判定した場合、映像データを概念データに変換する。
【００３０】
また、データ変換装置２は、概念ＤＢ２１より、近似の概念データを持つレコードを検索し、近似の概念データがあるか否かの判定を行う。データ変換装置２は、近似の概念ＩＤがあると判定した場合、応答データに検索したレコードの概念ＩＤをセットする。データ変換装置２は、近似の概念ＩＤがなかったと判定した場合、検索エンジン６に概念データを入力し、音声データと映像データとを取得し、概念ＤＢ２１に変換後の概念データを追加し、音声ＤＢ２２に取得した音声データと追加（新規に採番）した概念ＩＤをセットにして追加し、音声データをファイル化して音声ファイル２４に追加し、映像ＤＢ２３に取得した音声データと新規に採番した概念ＩＤをセットにして追加し、映像データをファイル化して映像ファイル２５に追加し、応答データに新規に採番した概念ＩＤをセットする。
【００３１】
以上のように、データ変換装置２は、変換後データをセットし、変換後データをシナリオ作成装置１またはシナリオ処理装置４に送信する。例えば、シナリオ作成装置１とデータ変換装置２とは、シナリオ作成装置１が出力部１０４でシナリオのテスト中に、音声または映像を概念に変換する際、概念から音声または映像に変換する際に通信を行う。
【００３２】
シナリオ表示端末装置３は、シナリオ作成装置１と同様、ＣＰＵ等を含むノートパソコン、クライアント装置等であり、シナリオ表示部３１と、通信部３２とを備える。
【００３３】
シナリオ表示部３１は、例えば、シナリオ作成装置１のシナリオ編集部１０Ａを介して、シナリオ管理ＤＢ１１、モジュールＤＢ１２、パラメタＤＢ１３、シナリオテンプレートＤＢ１４、テストモジュールＤＢ１５等の編集、その編集に係る表示を行う。
【００３４】
通信部３２は、例えば、シナリオ表示部３１によりシナリオの編集が行われる際に、シナリオ作成装置１の通信部１０Ｂと通信を行う。
【００３５】
シナリオ処理装置４は、シナリオ作成装置１と同様、ＣＰＵ等を含むノートパソコン、サーバ装置等であり、号機管理ＤＢ４１と、出力データテーブル４２と、シナリオテンプレートファイル４３と、シナリオ処理部４４と、通信部４５とを備える。
【００３６】
通信部４５は、シナリオ作成装置１の通信部１０Ｂと、データ変換装置２の通信部２７と、ロボット装置５の通信部５６と通信を行う。通信部４５は、例えば、シナリオ作成装置１がシナリオ処理装置４のシナリオテンプレートファイル４３を変更するときにシナリオ作成装置１と通信を行う。また、例えば、通信部４５は、シナリオ処理装置４がシナリオ処理部４４でシナリオの実行中に、音声または映像を概念に変換する際、概念から音声または映像に変換する際にデータ変換装置２と通信を行う。
【００３７】
また、シナリオ処理装置４は、ロボット装置５の動作、動作条件が規定されたシナリオを処理する装置であり、ロボット装置５で収集された音声、画像などに基づいてロボット装置５に対して制御指令を送信する。かかる制御により、ロボット装置５では、施設案内、商品紹介、受付対応、顧客呼び込み等のサービスが提供される。
【００３８】
なお、シナリオ処理装置４の詳細については図１４〜図１６を用いて後述する。
【００３９】
ロボット装置５は、号機部５１と、ハードウェア入力部５２と、ハードウェア出力部５３と、データ記録部５４と、制御部５５と、通信部５６とを備える。
【００４０】
ロボット装置５の号機部５１には、号機と、シナリオ処理装置４との通信に必要なＩＰアドレスとが含まれている。
【００４１】
ハードウェア入力部５２は、ロボット装置５内での入力を扱うものであり、カメラ部、マイク部、センサ部などを含んで構成される。
【００４２】
ハードウェア出力部５３は、ロボット装置５内での出力を扱うものであり、アーム部、回転モータ部、ローラ部、スピーカ部、ディスプレイ部などを含んで構成される。
【００４３】
データ記録部５４は、通信、制御情報をリアルタイムに保存しているメモリ等であり、メモリが満杯の場合には古い順にデータが消去されるようになっている。
【００４４】
制御部５５は、ロボット装置５の動作を制御する。
【００４５】
より具体的には、ロボット装置５が起動すると、制御部５５は、カメラ部の入力タスク起動し、マイク部の入力タスク起動し、センサ部の入力タスク起動し、アーム部の出力タスク起動し、回転モータ部の出力タスク起動し、ローラ部の出力タスク起動し、スピーカ部の出力タスク起動し、ディスプレイ部の入力タスク起動し、入力データ送信タスク起動し、出力データ受信タスク起動する。なお、それぞれのタスクについては、独立して動作できるようになっている。
【００４６】
ハードウェアの入力タスクに係る処理では、制御部５５は、ハードウェアからの入力データを取得し、データ記憶部が満杯であるか否かを判定し、データ記憶部が満杯であると判定した場合、一番古い同一ハードウェアの入力データを削除し、データ記憶部に入力データを保存する。
【００４７】
ハードウェアの出力タスクに係る処理では、制御部５５は、データ記憶部にハードウェアに制御出力要求があるか否かを判定し、ハードウェアへの制御出力要求があると判定した場合、ハードウェアに制御出力し、データ記憶部から制御出力要求をクリアする。
【００４８】
入力受信タスクに係る処理では、制御部５５は、シナリオ処理装置４からのデータ取得要求があるか否かを判定し、データ取得要求があると判定した場合、データ記録部５４からデータを取り出し、取り出したデータをシナリオ処理装置４に送信する。
【００４９】
出力受信タスクに係る処理では、制御部５５は、シナリオ処理装置４からの出力要求があるか否かを判定し、出力要求があると判定した場合、データ記憶部に制御出力データを書き込み、シナリオ処理装置４に受け付け完了の応答を送信する。
【００５０】
ロボット装置５は、シナリオ処理装置４からの入力要求、出力要求に応答するのみでロボット装置５の通信部５６は、シナリオ処理装置４の通信部４５とのみ通信を行う。
【００５１】
ロボット装置５は、シナリオ処理装置４からの入力制御、出力制御のみを制御部５５にて付ける構成となっていて、シナリオの進行は、シナリオ処理装置４側のシナリオ処理部４４で全て実行されているため、シナリオの変更時においてロボット装置５の制御部５５は、影響を受けない構成となっている。
【００５２】
（シナリオ作成装置が備えるデータについて）
シナリオ管理ＤＢ１１には、ＤＢ内でユニークとなる管理ＩＤと、シナリオＩＤと、シナリオ名と、シナリオテンプレートファイル名と、動作モードとの情報が対応付けられて格納されている。シナリオテンプレートファイル名のファイルは、シナリオテンプレートファイル１８として格納されている。動作モードの種別としては、「本番」および「テスト」の２種類が設けられている。なお、シナリオ管理ＤＢ１１の例については、図示を省略する。
【００５３】
図２は、モジュールＤＢ１２の一例を示す図である。モジュールＤＢ１２には、ＤＢ内でユニークとなるモジュールＩＤ１２１と、モジュール名１２２と、制御種別１２３と、制御の対象になる箇所の情報の対象１２４と、モジュールの実行時の入力のパラメタ型１２５と、モジュールの実行時に出力されるデータ型の実行出力時データ型１２６と、モジュールファイル名１２７との情報が対応付けられて格納されている。例えば、モジュールは、発話する、移動する、手を振るなどの行動、立ち止まりを検知する、対面を検知するなどの画像解析、音声認識、意図解析などの音声解析のような処理単位で設けられる。
【００５４】
ここで、制御種別１２３、対象１２４、パラメタ型１２５、および実行出力時データ型１２６は、個々のモジュールの定義情報である。
【００５５】
制御種別１２３は、「入力」、「出力」、「解析」、「データ変換」、「フロー」の５種類に分かれている。パラメタ型１２５は、「パラメタ無し」、「テキスト型」、シナリオの実行時に別のモジュールから出力されたデータである「オブジェクト型」の３種類に分かれている。
【００５６】
制御種別１２３の「入力」とは、ロボット装置５などの外部からの入力データを受信する制御を示す。制御種別１２３の「出力」とは、ロボット装置５などの外部へ出力データを送信する制御を示す。制御種別１２３の「解析」とは、目的のデータであるか否かを解析する制御を示す。制御種別１２３の「データ変換」とは、データを別のデータ型に変換する制御を示す。制御種別１２３の「フロー」とは、シナリオのフロー制御を示す。シナリオは、１または複数のモジュールを含んで構成される。
【００５７】
モジュールファイル名１２７のファイルは、モジュールファイル１７として格納されている。モジュールファイル１７は、モジュール（機能）に対応する実行可能なファイルである。
【００５８】
図３は、パラメタＤＢ１３の一例を示す図である。パラメタＤＢ１３には、ＤＢ内でユニークとなるパラメタＩＤ１３１と、モジュールＤＢ１２上のモジュールＩＤ１２１を示すモジュールＩＤ１３２と、パラメタデータ１３３との情報が対応付けられて格納されている。なお、例えば、パラメタをテキスト型として定義しているモジュール（モジュールＩＤ「４」、「５」、「６」のモジュールなど）において、取り得るパラメタは決められているため、当該モジュールを特定するためのモジュールＩＤ１３２が必要となっている。
【００５９】
図４は、シナリオテンプレートＤＢ１４の一例を示す図である。シナリオテンプレートＤＢ１４には、ＤＢ内でユニークとなるシナリオテンプレートＩＤ１４１と、シナリオ管理ＤＢ１１のシナリオＩＤを示すシナリオＩＤ１４２と、シナリオの開始終了を定義する開始終了１４３と、モジュールＤＢ１２のモジュールＩＤ１２１を示すモジュールＩＤ１４４と、パラメタＤＢ１３のパラメタＩＤ１３１を示すパラメタＩＤ１４５と、別のシナリオテンプレートＩＤ１４１で実行されたモジュールから出力されたデータをパラメタとすることを示すパラメタシナリオテンプレートＩＤ１４６と、モジュールを実行した際の戻り値が成功であった場合に次に実行するシナリオテンプレートＩＤ１４１を示す成功時次回シナリオテンプレートＩＤ１４７との情報が対応付けられて格納されている。
【００６０】
なお、本実施の形態では、エラー時の処理についてはその説明を省略する。付言するならば、例えば、シナリオテンプレートＤＢ１４には、モジュールを実行した際の戻り値が失敗であった場合に次に実行するシナリオテンプレートＩＤ１４１を示す失敗時次回シナリオテンプレートＩＤの情報が対応付けられて格納されていてもよい。
【００６１】
また、テストモジュールＤＢ１５には、ＤＢ内でユニークとなるテストモジュールＩＤと、モジュールＤＢ１２のモジュールＩＤ１２１を示すモジュールＩＤと、テストモジュールファイル名と、モジュールＤＢ１２のパラメタ型１２５を示すデータ型との情報が対応付けられて格納されている。テストモジュールファイル名のファイルは、テストモジュールファイル１９として格納されている。データ型としては、「音声オブジェクト型（音声データ型）」、「映像オブジェクト型（映像データ型）」、「概念オブジェクト型（概念データ型）」、「センサーオブジェクト型（センサーの出力値を示すデータのデータ型）」、「テキスト型（選択言語）」、「テキスト型（次回実行シナリオテンプレートＩＤ）」等が設けられている。ここで、概念オブジェクト型は、概念データのデータ型であり、概念データは、音声データと映像データとを紐づけるための中間的なデータであることから、処理済中間データ型とも言い得る。なお、テストモジュールＤＢ１５の例については図示を省略する。
【００６２】
図５は、テストテーブル１６の一例を示す図である。テストテーブル１６は、シナリオ編集部１０Ａにてシナリオの編集が行われる際に更新されるテーブルである。テストテーブル１６は、シナリオ作成装置１でシナリオのテストを行うために必要なテーブルであり、シナリオを実行するシナリオ処理装置４が持つ出力データテーブル４２と同一のテーブル構成になっている。
【００６３】
テストテーブル１６には、号機１６１と、シナリオ管理ＤＢ１１のシナリオＩＤを示すシナリオＩＤ１６２と、シナリオテンプレートＤＢ１４のシナリオテンプレートＩＤ１４１を示すシナリオテンプレートＩＤ１６３と、出力データポインタアドレス１６４と、データ型１６５との情報が対応付けられて格納されている。
【００６４】
図６は、シナリオテンプレートファイル１８の一例を示す図である。シナリオテンプレートファイル１８は、シナリオ表示端末装置３よりシナリオ作成装置１のシナリオ編集部１０Ａを介して、シナリオ作成装置１内のシナリオ管理ＤＢ１１、モジュールＤＢ１２、パラメタＤＢ１３、シナリオテンプレートＤＢ１４、モジュールファイル１７のいずれかが変更された場合に更新される。
【００６５】
図６では、シナリオテンプレートファイル１８の中で本番用のシナリオＩＤが「１」である本番用シナリオＩＤ１シナリオテンプレートファイルの構成要素の一例を示している。
【００６６】
なお、図６では、本番用シナリオＩＤ１シナリオテンプレートファイルの例を示したが、テスト用シナリオＩＤ１シナリオテンプレートファイルも同様であり、同一シナリオＩＤの本番用とテスト用との差異は、シナリオ１シナリオ管理ＤＢ１８１のシナリオテンプレートファイル名および動作モードのみである。
【００６７】
（シナリオ作成装置が作成するシナリオについて）
従来、発話、行動等の個別要素を繋いでサービス（シナリオ）の流れが構成されている。しかしながら、シナリオが多岐にわたるため、シナリオを個別に作成すると、シナリオの作成工数の作業量が大きくなってしまったり、良質なサービスを均一に提供することが困難となってしまったりする。
【００６８】
そこで、ロボット装置制御システム１０００では、シナリオを共通処理（開始処理、終了処理など）と個別処理とに分類して全体を１つの標準シナリオとして構築し、複数の個別処理（例えば、モジュール）を予め用意し、個別処理のテンプレート（シナリオテンプレート）を作成し、サービスに合わせて必要な個別処理がユーザにより選択されることでシナリオが作成される構成を採用する。なお、シナリオテンプレートに規定される共通処理については図示を省略する。
【００６９】
ここで、開始処理としては、ロボット装置５がホームポジションから顧客のもとまで移動する処理が挙げられる。例えば、開始処理では、ロボット装置５は、初期ポジションにて起動を行い、顧客を待つ顧客待ちの状態に遷移し、顧客待ちの状態において音声、映像による顧客の立止りを検知すると、顧客のもとに移動して対面待ちの状態に遷移し、顧客の対面を検知すると、対話状態に遷移する。また、個別処理としては、サービスに応じて対話（発話、行動、表示など）する処理が挙げられる。また、終了処理としては、対話が終了すると、ロボット装置５がホームポジションに戻る処理が挙げられる。
【００７０】
つまり、従来は、要件定義、シナリオ設計、発話内容決定、ソフト設計の工程を行い、それに応じた試験工程を実施していたが、個別処理の選択方式によれば、事前のシナリオをベースとすることで要件定義の工数が削減され、シナリオ設計からシナリオの選択に変わるため、シナリオ設計の工数が不要になり、ソフト設計の工程も不要となる。
【００７１】
また、ロボット装置制御システム１０００では、少なくとも１つの命令を含むモジュールを格納するモジュールＤＢ１２から、モジュールが選択され、実行順序、実行条件、繰り返し回数などのオプション情報が追加され、シナリオが作成される。また、各モジュールに対応したテストモジュールがテストモジュールＤＢ１５から読み出され、作成されたシナリオに対応するテストパターンが自動生成されて自動実行されることで、テストの省力化が図られる。
【００７２】
シナリオのテスト（テストパターンの自動生成および自動実行）については、シナリオの作成時とシナリオの変更時とで基本的な処理（モジュールを受け付け、テストモジュールを登録し、シナリオを作成し、出力する処理）は同様であるので、以下では、シナリオが変更されたケースを例に挙げて、テストパターンの自動生成および自動実行について説明する。
【００７３】
（シナリオ作成装置が実施するシナリオのテストについて）
図７は、シナリオ編集部１０Ａが実行するシナリオ編集処理に係る処理手順の一例を示す図である。シナリオ表示端末装置３のシナリオ表示部３１からの指示に基づいて、シナリオ作成装置１のシナリオ編集処理が実行される。
【００７４】
シナリオ編集部１０Ａは、シナリオ表示部３１を介して選択された号機（例えば「１号機」）をセットする（ステップＳ７０１）。
【００７５】
続いて、シナリオ編集部１０Ａは、シナリオ管理ＤＢ１１から、変更を行うシナリオのシナリオＩＤを選択し、動作モードが「本番」と「テスト」との２レコードを取得する（ステップＳ７０２）。以下では、シナリオ表示部３１を介してシナリオＩＤ「１」（管理ＩＤ「１」および「２」）が選択されたとして適宜に説明する。
【００７６】
続いて、シナリオ編集部１０Ａは、シナリオテンプレートＩＤ１４から、選択したシナリオＩＤと同じシナリオＩＤ１４２を持つレコードを取得する（ステップＳ７０３）。例えば、シナリオ編集部１０Ａは、シナリオＩＤ１４２「１」を持つシナリオテンプレートＩＤ１４１「１」〜「１７」のレコードを取得する。
【００７７】
続いて、シナリオ編集部１０Ａは、シナリオテンプレートＩＤ１４から取得したレコードから、シナリオ表示部３１を介して変更を行うレコードを１つ選択し、選択したレコードのシナリオテンプレートＩＤ１４１を記憶する（ステップＳ７０４）。
【００７８】
続いて、シナリオ編集部１０Ａは、モジュール受付処理を実行する（ステップＳ７０５）。モジュール受付処理では、例えば、ロボット装置５を動作させる命令を含む複数のモジュールからモジュールの選択が受け付けられる。モジュール受付処理の詳細については、図８を用いて説明する。
【００７９】
続いて、シナリオ編集部１０Ａは、テストモジュール登録処理を実行する（ステップＳ７０６）。テストモジュール登録処理では、例えば、受け付けられたモジュールに対応するテストモジュールがテストモジュールＤＢ１５から選択され、テストテーブル１６に登録される。テストモジュール登録処理の詳細については、図９を用いて説明する。
【００８０】
続いて、シナリオ編集部１０Ａは、シナリオ作成処理を実行する（ステップＳ７０７）。シナリオ作成処理では、例えば、開始処理と終了処理とが規定されたシナリオテンプレートに、選択されたモジュールが組み込まれて実行可能なシナリオが作成される。シナリオ作成処理の詳細については、図１０を用いて説明する。
【００８１】
続いて、シナリオ編集部１０Ａは、出力処理を実行する（ステップＳ７０８）。出力処理では、作成されたシナリオが出力される。出力処理の詳細については、図１１を用いて説明する。
【００８２】
図８は、モジュール受付部１０１が実行するモジュール受付処理に係る処理手順の一例を示す図である。
【００８３】
モジュール受付部１０１は、ステップＳ７０４で取得されたシナリオテンプレートＩＤ１４１を取得する（ステップＳ８０１）。
【００８４】
続いて、モジュール受付部１０１は、シナリオ表示部３１を介してモジュールＤＢ１２からモジュールを選択（ユーザが変更すると指定したモジュールを選択）する（ステップＳ８０２）。
【００８５】
続いて、モジュール受付部１０１は、シナリオテンプレートＤＢ１４のモジュールＩＤ１４４を更新する（ステップＳ８０３）。より具体的には、モジュール受付部１０１は、ステップＳ８０１で取得したシナリオテンプレートＩＤ１４１のレコードのモジュールＩＤ１４４にステップＳ８０２で選択したモジュールのモジュールＩＤ１２１をセットする。
【００８６】
続いて、モジュール受付部１０１は、モジュールＤＢ１２を参照して選択したモジュールのパラメタ型１２５を取得し、当該パラメタ型１２５が「パラメタ無し」（引数無し）であるか否かを判定する（ステップＳ８０４）。モジュール受付部１０１は、引数無しであると判定した場合、ステップＳ８１５に処理を移し、引数有りであると判定した場合、ステップＳ８０５に処理を移す。
【００８７】
ステップＳ８０５では、モジュール受付部１０１は、当該パラメタ型１２５がテキスト型であるか否かを判定する。モジュール受付部１０１は、テキスト型であると判定した場合、ステップＳ８０６に処理を移し、テキスト型でないと判定した場合、ステップＳ８０９に処理を移す。
【００８８】
ステップＳ８０６では、モジュール受付部１０１は、パラメタＤＢ１３から、選択したモジュールのモジュールＩＤ１２１を持つレコードのパラメタＩＤ１３１を取得する。例えば、モジュール受付部１０１は、モジュールＩＤ１２１が「５」である場合、モジュールＩＤ１３２が「５」であるパラメタＩＤ１３１として「４」、「５」、「６」を取得する。
【００８９】
続いて、モジュール受付部１０１は、シナリオ表示部３１を介して、ステップＳ８０６で取得したパラメタＩＤ１３１の中からパラメタＩＤ１３１を１つ選択（ユーザが用いると指定したパラメタのパラメタＩＤ１３１を選択）する（ステップＳ８０７）。
【００９０】
続いて、モジュール受付部１０１は、シナリオテンプレートＤＢ１４のパラメタＩＤ１４５を更新し（ステップＳ８０８）、ステップＳ８１５に処理を移す。より具体的には、モジュール受付部１０１は、ステップＳ８０１で取得したシナリオテンプレートＩＤ１４１のレコードのパラメタＩＤ１４５にステップＳ８０７で選択したパラメタＩＤ１３１をセットする。
【００９１】
ステップＳ８０９では、モジュール受付部１０１は、当該パラメタ型１２５がオブジェクト型であるか否かを判定する。モジュール受付部１０１は、オブジェクト型であると判定した場合、ステップＳ８１０に処理を移し、オブジェクト型でないと判定した場合、ステップＳ８１５に処理を移す。
【００９２】
ステップＳ８１０では、モジュール受付部１０１は、シナリオテンプレートＤＢ１４から、ステップＳ８０１で取得したシナリオテンプレートＩＤ１４１と同じシナリオＩＤ１４２を持つレコードを取得する。
【００９３】
続いて、モジュール受付部１０１は、ステップＳ８１０で取得したレコードのモジュールＩＤ１４４を取り出し、モジュールＤＢ１２より同じモジュールＩＤ１２１を持つレコードを取得し、実行出力時データ型１２６を取得する（ステップＳ８１１）。
【００９４】
続いて、モジュール受付部１０１は、モジュールが連結可能であるか否かのチェックを行うため、ステップＳ８１０のレコードとステップＳ８１１のデータ型とを突き合わせ、ステップＳ８１０で取得したシナリオテンプレートＤＢ１４のレコードの中から、選択したモジュールのモジュールＩＤ１４４を持つレコードのパラメタ型と同じ実行出力時データ型１２６を持つモジュールＩＤ１２１を持つレコードを取得する（ステップＳ８１２）。
【００９５】
続いて、モジュール受付部１０１は、ステップＳ８１２で取得したレコードの中から、シナリオ表示部３１を介して、連結させるためのシナリオテンプレートＩＤ１４１を選択（ユーザが連結すると指定したシナリオテンプレートのシナリオテンプレートＩＤ１４１を選択）する（ステップＳ８１３）。
【００９６】
続いて、モジュール受付部１０１は、シナリオテンプレートＤＢ１４のパラメタシナリオテンプレートＩＤ１４６を更新する（ステップＳ８１４）。より具体的には、モジュール受付部１０１は、ステップＳ８０１で取得したシナリオテンプレートＩＤ１４１のレコードのパラメタシナリオテンプレートＩＤ１４６にステップＳ８１３で選択したシナリオテンプレートＩＤ１４１をセットする。
【００９７】
ステップＳ８１５では、モジュール受付部１０１は、開始モジュールの設定を行う。より具体的には、ユーザは、ステップＳ８０１で取得されたシナリオテンプレートＩＤ１４１のレコードをシナリオの実行時の開始に変更したい場合にはシナリオ表示部３１を介して開始を選択し、モジュール受付部１０１は、ステップＳ７０３で取得したレコードの中から開始終了１４３が「ＳＴＡＲＴ」のレコードを空白にセットし、ステップＳ８０１で取得したシナリオテンプレートＩＤ１４１のレコードの開始終了１４３を「ＳＴＡＲＴ」にセットする。
【００９８】
レコードの開始終了１４３の「ＳＴＡＲＴ」を持つシナリオテンプレートのレコードのモジュールＩＤ１４４のモジュールが実行されると、シナリオテンプレートに係る処理が開始するため、開始終了１４３「ＳＴＡＲＴ」が対応付けられたモジュールがシナリオテンプレートに係る処理の実行時の開始モジュールとなる。
【００９９】
続いて、モジュール受付部１０１は、終了モジュールの設定を行う（ステップＳ８１６）。より具体的には、ユーザは、ステップＳ８０１で取得されたシナリオテンプレートＩＤ１４１のレコードをシナリオの実行時の終了に変更したい場合にはシナリオ表示部３１を介して終了を選択し、モジュール受付部１０１は、ステップＳ７０３で取得したレコードの中から開始終了１４３が「ＥＮＤ」のレコードを空白にセットし、ステップＳ８０１で取得したシナリオテンプレートＩＤ１４１のレコードの開始終了１４３を「ＥＮＤ」にセットする。
【０１００】
レコードの開始終了１４３の「ＥＮＤ」を持つシナリオテンプレートのレコードのモジュールＩＤ１４４のモジュールが実行されると、シナリオテンプレートに係る処理が終了するため、開始終了１４３「ＥＮＤ」が対応付けられたモジュールがシナリオテンプレートに係る処理の実行時の終了モジュールとなる。
【０１０１】
続いて、モジュール受付部１０１は、ステップＳ８０１で取得したシナリオテンプレートＩＤ１４１のレコードの開始終了１４３を「ＥＮＤ」にセットしたか否かを判定する（ステップＳ８１７）。モジュール受付部１０１は、「ＥＮＤ」にセットしたと判定した場合、モジュール受付処理を終了し、「ＥＮＤ」にセットしていないと判定した場合、ステップＳ８１８に処理を移す。
【０１０２】
ステップＳ８１８では、モジュール受付部１０１は、成功時のモジュールの設定を行う。より具体的には、ユーザはシナリオ表示部３１を介して、ステップＳ７０３で取得されたレコードの中から成功した際に実行するシナリオテンプレートＩＤ１４１を選択し、モジュール受付部１０１は、ステップＳ８０１で取得したシナリオテンプレートＩＤ１４１のレコードの成功時次回シナリオテンプレートＩＤ１４７にセットする。
【０１０３】
モジュール受付部１０１は、ステップＳ８１８の処理を行うと、モジュール受付処理を終了する。なお、ステップＳ８１８に続いて、モジュール受付部１０１は、失敗時のモジュール設定を行ってもよいが、失敗時の処理については省略する。
【０１０４】
図９は、テストモジュール登録部１０２が実行するテストモジュール登録処理に係る処理手順の一例を示す図である。
【０１０５】
テストモジュール登録部１０２は、シナリオ管理ＤＢ１１から、ステップＳ７０２で取得した動作モードが「テスト」のレコードのシナリオＩＤを取得する（ステップＳ９０１）。
【０１０６】
続いて、テストモジュール登録部１０２は、シナリオテンプレートＤＢ１４から、取得したシナリオＩＤと同じシナリオＩＤ１４２を持つレコードを取得し、取得したレコードのリストを作成する（ステップＳ９０２）。
【０１０７】
続いて、テストモジュール登録部１０２は、リストからすべて要素（レコード）を取り出したか否かを判定する（ステップＳ９０３）。テストモジュール登録部１０２は、取り出したと判定した場合、テストモジュール登録処理を終了し、取り出していないと判定した場合、ステップＳ９０４に処理を移す。
【０１０８】
ステップＳ９０４では、テストモジュール登録部１０２は、リストから要素を１件取り出す。
【０１０９】
続いて、テストモジュール登録部１０２は、テストモジュールＤＢ１５から、取り出したレコード中のモジュールＩＤ１４４を持つレコードを検索し、レコードがある場合は、テストモジュールファイル名とデータ型とを取得する（ステップＳ９０５）。
【０１１０】
続いて、テストモジュール登録部１０２は、レコードがあるか否かを判定する（ステップＳ９０６）。テストモジュール登録部１０２は、レコードがあると判定した場合、ステップＳ９０７に処理を移し、レコードがないと判定した場合、ステップＳ９０３に処理を移す。
【０１１１】
ステップＳ９０７では、テストモジュール登録部１０２は、取得したテストモジュールファイル名を持つファイルをテストモジュールファイル１９より取得し、ファイルのデータをメモリ上に展開し、メモリ上の先頭のポインタを出力データポインタとして取得する。
【０１１２】
続いて、テストモジュール登録部１０２は、テストテーブル１６にレコードを格納する（ステップＳ９０８）。より具体的には、テストモジュール登録部１０２は、ステップＳ７０１でセットされた号機、ステップＳ７０２で選択されたシナリオＩＤ、ステップＳ９０４で取り出したレコード中のシナリオテンプレートＩＤ１４１、ステップＳ９０６で取得した出力データポインタアドレス、ステップＳ９０５で取得したデータ型を持つレコードをテストテーブル１６に格納する。
【０１１３】
ここで、人間は、耳で聞いたもの、目で見たもの等を「入力」とし、何を聞いたか、何を見たかを理解（認識）する。そして、聞いたもの、見たものの内容に応じて、動作（判断）する。この判断がロボット装置５におけるシナリオに対応する。
【０１１４】
しかしながら、ロボット装置５（シナリオ処理装置４）は、人間が話したことを１００％理解できるものではなく、発音とかによって理解できない場合がある。そこで、上述の処理では、１００％理解できるデータが読み込まれるようにしている。
【０１１５】
換言するならば、一般に音声認識の精度、画像認識の精度等の問題があるので、テストをスムーズに行うために音声データ、画像データ等を予め登録し、テストのときには予め格納されているデータが読み込まれてモジュールが実行されるように、テストデータを格納している。なお、本番では、実際にマイク部から読み込んだデータ、カメラ部から読み込んだデータが使われる。
【０１１６】
図１０は、シナリオ作成部１０３が実行するシナリオ作成処理に係る処理手順の一例を示す図である。
【０１１７】
シナリオ作成部１０３は、本番用シナリオＩＤ１シナリオテンプレートファイルとして、シナリオＩＤ１シナリオ管理ＤＢ１８１と、シナリオＩＤ１シナリオテンプレートＤＢ１８２と、シナリオＩＤ１モジュールＤＢ１８３と、シナリオＩＤ１パラメタＤＢ１８５とを作成する（ステップＳ１００１）。
【０１１８】
続いて、シナリオ作成部１０３は、ステップＳ７０２で取得したレコードの中から、動作モードが「本番」のレコードをシナリオＩＤ１シナリオ管理ＤＢ１８１に格納する（ステップＳ１００２）。
【０１１９】
続いて、シナリオ作成部１０３は、ステップＳ７０３で取得したレコードをシナリオＩＤ１シナリオテンプレートＤＢ１８２に格納する（ステップＳ１００３）。
【０１２０】
続いて、シナリオ作成部１０３は、ステップＳ１００３のレコードの中からモジュールＩＤ１４４を重複なく取り出し、モジュールＤＢ１２より同一のモジュールＩＤ１２１を持つレコードのリストを作成し、リストをシナリオＩＤ１モジュールＤＢ１８３に格納する（ステップＳ１００４）。
【０１２１】
続いて、シナリオ作成部１０３は、シナリオＩＤ１モジュールＤＢ１８３からモジュールファイル名１２７を重複なく取り出し、モジュールファイル１７より同一のファイル名を持つファイルをシナリオＩＤ１モジュールファイル１８４に格納する（ステップＳ１００５）。
【０１２２】
続いて、シナリオ作成部１０３は、ステップＳ１００３のレコードの中からパラメタＩＤを重複なく取り出し、パラメタＤＢ１３より同一のパラメタＩＤ１４５を持つレコードのリストを作成し、リストをシナリオＩＤ１パラメタＤＢ１８５に格納する（ステップＳ１００６）。
【０１２３】
続いて、シナリオ作成部１０３は、シナリオＩＤ１シナリオ管理ＤＢ１８１のシナリオテンプレートファイル名と同じファイル名で本番用シナリオＩＤ１シナリオテンプレートファイルとしてシナリオテンプレートファイル１８に上書き保存する（ステップＳ１００７）。
【０１２４】
続いて、シナリオ作成部１０３は、テスト用シナリオＩＤ１シナリオテンプレートファイルとして、シナリオＩＤ１シナリオ管理ＤＢ１８１と、シナリオＩＤ１シナリオテンプレートＤＢ１８２と、シナリオＩＤ１モジュールＤＢ１８３と、シナリオＩＤ１パラメタＤＢ１８５とを作成する（ステップＳ１００８）。
【０１２５】
続いて、シナリオ作成部１０３は、ステップＳ７０２で取得したレコードの中から、動作モードが「テスト」のレコードをシナリオＩＤ１シナリオ管理ＤＢ１８１に格納する（ステップＳ１００９）。
【０１２６】
続いて、シナリオ作成部１０３は、本番用シナリオＩＤ１シナリオテンプレートファイルのシナリオＩＤ１シナリオテンプレートＤＢ１８２のレコードをテスト用シナリオＩＤ１シナリオテンプレートファイルのシナリオＩＤ１シナリオテンプレートＤＢ１８２にコピーする（ステップＳ１０１０）。
【０１２７】
続いて、シナリオ作成部１０３は、本番用シナリオＩＤ１シナリオテンプレートファイルのシナリオＩＤ１モジュールＤＢ１８３のレコードをテスト用シナリオＩＤ１シナリオテンプレートファイルのシナリオＩＤ１モジュールＤＢ１８３にコピーする（ステップＳ１０１１）。
【０１２８】
続いて、シナリオ作成部１０３は、本番用シナリオＩＤ１シナリオテンプレートファイルのシナリオＩＤ１モジュールファイル１８４をテスト用シナリオＩＤ１シナリオテンプレートファイルのシナリオＩＤ１モジュールファイル１８４にコピーする（ステップＳ１０１２）。
【０１２９】
続いて、シナリオ作成部１０３は、本番用シナリオＩＤ１シナリオテンプレートファイルのシナリオＩＤ１パラメタＤＢ１８５のレコードをテスト用シナリオＩＤ１シナリオテンプレートファイルのシナリオＩＤ１パラメタＤＢ１８５にコピーする（ステップＳ１０１３）。
【０１３０】
続いて、シナリオ作成部１０３は、シナリオＩＤ１シナリオ管理ＤＢ１８１のシナリオテンプレートファイル名と同じファイル名でテスト用シナリオＩＤ１シナリオテンプレートファイルとしてシナリオテンプレートファイル１８に上書き保存する（ステップＳ１０１４）。
【０１３１】
シナリオ作成部１０３は、ステップＳ１０１４の処理を行うと、シナリオ作成処理を終了する。
【０１３２】
ここで、シナリオを構成するモジュール間のインタフェースの一致の確認だけでは、シナリオ全体が動作するかの確認はできていないため、シナリオの変更の際にはシナリオ全体としてテストして事前検証することが望ましい。この点、上述した処理によれば、一のモジュールを変更した際には、当該モジュールを含むシナリオ全体の動作確認が可能な一連のテスト用シナリオ（テストパターン）が登録される。
【０１３３】
図１１は、出力部１０４が実行する出力処理に係る処理手順の一例を示す図である。
【０１３４】
出力部１０４は、ステップＳ１０１４で作成したテスト用シナリオＩＤ１シナリオテンプレートファイルを読込む（ステップＳ１１０１）。
【０１３５】
続いて、出力部１０４は、読込んだファイルのデータからシナリオタスクを起動する（シナリオタスク処理を行う）（ステップＳ１１０２）。シナリオタスク処理では、シナリオに従ってモジュールが実行される。シナリオタスク処理の詳細については、図１２を用いて説明する。
【０１３６】
続いて、出力部１０４は、テストテーブル１６をファイル化してからクリアする（ステップＳ１１０３）。
【０１３７】
続いて、出力部１０４は、出力結果の確認待ちを行う（ステップＳ１１０４）。例えば、出力部１０４は、シナリオ表示部３１を介して、問題なくテストが終了したか否か（確認ＯＫであるか否か）を示す情報を取得する。
【０１３８】
続いて、出力部１０４は、確認ＯＫであるか否かを判定する（ステップＳ１１０５）。出力部１０４は、確認ＯＫであると判定した場合、ステップＳ１１０６に処理を移し、出力部１０４は、確認ＯＫでないと判定した場合、出力処理を終了する。
【０１３９】
ステップＳ１１０６では、出力部１０４は、本番用シナリオＩＤ１シナリオテンプレートファイルをシナリオ処理装置４に送信し、出力処理を終了する。
【０１４０】
なお、上述した処理では、人間が出力結果（テスト結果）を確認するケースを例に挙げて説明したが、これに限られるものではない。例えば、出力結果については、出力部１０４が確認するようにしてもよい。
【０１４１】
上述した処理によれば、自動的にシナリオがテストされて事前検証が行われた後に、シナリオがシナリオ処理装置４に送付される。
【０１４２】
図１２は、出力部１０４が実行するシナリオタスク処理に係る処理手順の一例を示す図である。ここでは、出力部１０４は、シナリオＩＤ１シナリオテンプレートファイルを実行したとして説明する。
【０１４３】
出力部１０４は、シナリオＩＤ１用シナリオテンプレートＤＢ１８２から、開始終了が「ＳＴＡＲＴ」のレコードを抽出し、シナリオテンプレートＩＤを次回実行シナリオテンプレートＩＤとしてメモリ上に保存する（ステップＳ１２０１）。
【０１４４】
続いて、出力部１０４は、開始終了が「ＥＮＤ」のシナリオテンプレートＩＤを実行済みであるか否かを判定する（ステップＳ１２０２）。出力部１０４は、実行済みであると判定した場合、シナリオタスク処理を終了し、実行済みでないと判定した場合、ステップＳ１２０３に処理を移す。
【０１４５】
ステップＳ１２０３では、出力部１０４は、メモリ上の次回実行シナリオテンプレートＩＤを読み出す。
【０１４６】
続いて、出力部１０４は、シナリオＩＤ１用シナリオテンプレートＤＢ１８２から、メモリ上より読み出した次回実行シナリオテンプレートＩＤと同じシナリオテンプレートＩＤを持つレコードを読み出す（ステップＳ１２０４）。
【０１４７】
続いて、出力部１０４は、シナリオＩＤ１用モジュールＤＢ１８３から、ステップＳ１２０４で読み出したレコードのモジュールＩＤと同じモジュールＩＤを持つレコードを読み込む（ステップＳ１２０５）。
【０１４８】
続いて、出力部１０４は、制御種別毎処理を行い（ステップＳ１２０６）、ステップＳ１２０２に処理を移す。制御種別毎処理では、制御種別に対応した処理が行われる。制御種別毎処理の詳細については、図１３を用いて説明する。
【０１４９】
図１３は、出力部１０４が実行する制御種別毎処理に係る処理手順の一例を示す図である。
【０１５０】
出力部１０４は、モジュールの制御種別が「入力」であるか否かを判定する（ステップＳ１３０１）。出力部１０４は、「入力」であると判定した場合、ステップＳ１３０２に処理を移し、「入力」でないと判定した場合、ステップＳ１３０３に処理を移す。
【０１５１】
ステップＳ１３０２では、出力部１０４は、制御種別入力処理を行い、制御種別毎処理を終了する。制御種別入力処理では、ロボット装置５などの外部からの入力データが取得される。
【０１５２】
より詳細には、出力部１０４は、ステップＳ１２０５で取得したレコードのモジュール名と同じシナリオＩＤ１用モジュールファイル１８４を実行（入力モジュール処理を実行）する。入力モジュール処理では、動作モードに応じて入力に係る処理が行われる。
【０１５３】
更に詳細には、出力部１０４は、シナリオ１シナリオ管理ＤＢ１８１の動作モードが「テスト」であるか否かを判定する。
【０１５４】
出力部１０４は、「テスト」であると判定した場合、出力部１０４は、図９のテストモジュール登録処理にて既にテストテーブル１６にはテストデータが格納されているため、号機、シナリオＩＤ、シナリオテンプレートＩＤをキーにしてテストテーブル１６からレコードを取得し、戻り値をレコード中の出力データポインタアドレスにセットし、入力モジュール処理を終了する。
【０１５５】
出力部１０４は、「テスト」でない（本番である）と判定した場合、シナリオ処理部４４は、該当号機のロボット装置５への入力の内容を送信する。続いて、本番であるのでシナリオ処理部４４は、該当号機のロボット装置５からの受信データをメモリ上へ保存する。続いて、本番であるのでシナリオ処理部４４は、戻り値を受信データのメモリ上のポインタにセットし、入力モジュール処理を終了する。
【０１５６】
入力モジュール処理後、出力部１０４は、シナリオ１シナリオ管理ＤＢ１８１の動作モードが「本番」であるか否かを判定する。
【０１５７】
「本番」であると判定された場合、シナリオ処理部４４は、実行結果の出力データ（号機とシナリオＩＤとシナリオテンプレートＩＤと出力データのポインタアドレスとデータ型と）を出力データテーブル４２に格納する。
【０１５８】
「本番」でないと判定した場合、出力部１０４は、実行結果の出力データ（号機とシナリオＩＤとシナリオテンプレートＩＤと出力データのポインタアドレスとデータ型と）をテストテーブル１６に格納する。
【０１５９】
実行結果の出力データの格納後、出力部１０４は、ステップＳ１２０４で取得したレコードの成功時次回シナリオテンプレートＩＤを次回実行シナリオテンプレートＩＤとしてメモリ上に保存し、制御種別入力処理を終了する。
【０１６０】
ステップＳ１３０３では、出力部１０４は、モジュールの制御種別が「出力」であるか否かを判定する。出力部１０４は、「出力」であると判定した場合、ステップＳ１３０４に処理を移し、「出力」でないと判定した場合、ステップＳ１３０５に処理を移す。
【０１６１】
ステップＳ１３０４では、出力部１０４は、制御種別出力処理を行い、制御種別毎処理を終了する。制御種別出力処理では、ロボット装置５などの外部に出力データが出力される。
【０１６２】
より詳細には、出力部１０４は、シナリオＩＤ１用パラメタＤＢ１８５から、ステップＳ１２０４で取得したレコードのパラメタＩＤと同じレコードを取得し、パラメタを取得する。
【０１６３】
続いて、出力部１０４は、取得したパラメタを用いて、ステップＳ１２０５で取得したレコードのモジュール名と同じシナリオＩＤ１用モジュールファイル１８４を実行する。
【０１６４】
より具体的には、出力部１０４は、シナリオ１シナリオ管理ＤＢ１８１の動作モードが「テスト」であるか否かを判定し、「テスト」であると判定した場合、戻り値を「成功」にセットし、「テスト」でないと判定した場合、本番であるのでシナリオ処理部４４が該当号機のロボット装置５に出力の内容を送信し、ロボット装置５からの応答受信に応じて戻り値を「成功」または「失敗」にセットする。なお、失敗時の処理については説明を省略する。
【０１６５】
続いて、出力部１０４は、ステップＳ１２０４で取得したレコードの成功時次回シナリオテンプレートＩＤを次回実行シナリオテンプレートＩＤとしてメモリ上に保存し、制御種別出力処理を終了する。
【０１６６】
ステップＳ１３０５では、出力部１０４は、モジュールの制御種別が「解析」であるか否かを判定する。出力部１０４は、「解析」であると判定した場合、ステップＳ１３０６に処理を移し、「解析」でないと判定した場合、ステップＳ１３０７に処理を移す。
【０１６７】
ステップＳ１３０６では、出力部１０４は、制御種別解析処理を行い、制御種別毎処理を終了する。制御種別解析処理では、目的のデータであるか否かが解析される。
【０１６８】
より詳細には、出力部１０４は、テストテーブル１６から、同一の該当号機とステップＳ１２０４で取得したレコードのパラメタシナリオテンプレートＩＤとを持つレコードを取得する。なお、本番の場合は、シナリオ処理部４４が出力データテーブル４２から当該レコードを取得する。
【０１６９】
続いて、出力部１０４は、取得したレコードの出力データポインタアドレスからデータをメモリ上にコピーしたデータをパラメタにしてステップＳ１２０５で取得したレコードのモジュール名と同じシナリオＩＤ１用モジュールファイル１８４を実行する。
【０１７０】
より具体的には、出力部１０４は、パラメタとして渡されたデータの解析を行い、目的の期待通りの解析結果であるか否かを判定し、期待通りの解析結果であると判定した場合、戻り値を「成功」にセットし、期待通りの解析結果でないと判定した場合、戻り値を「失敗」にセットする。なお、失敗時の処理については説明を省略する。
【０１７１】
続いて、出力部１０４は、ステップＳ１２０４で取得したレコードの成功時次回シナリオテンプレートＩＤを次回実行シナリオテンプレートＩＤとしてメモリ上に保存し、制御種別解析処理を終了する。
【０１７２】
ステップＳ１３０７では、出力部１０４は、モジュールの制御種別が「データ変換」であるか否かを判定する。出力部１０４は、「データ変換」であると判定した場合、ステップＳ１３０８に処理を移し、「データ変換」でないと判定した場合、ステップＳ１３０９に処理を移す。
【０１７３】
ステップＳ１３０８では、出力部１０４は、制御種別データ変換処理を行い、制御種別毎処理を終了する。制御種別データ変換処理では、データのデータ型が別のデータ型に変換される。
【０１７４】
より詳細には、出力部１０４は、テストテーブル１６から、同一の該当号機とステップＳ１２０４で取得したレコードのパラメタシナリオテンプレートＩＤとを持つレコードを取得する。なお、本番の場合は、シナリオ処理部４４が出力データテーブル４２から当該レコードを取得する。
【０１７５】
続いて、出力部１０４は、取得したレコードの出力データポインタアドレスからデータをメモリ上にコピーしたデータをパラメタにしてステップＳ１２０５で取得したレコードのモジュール名と同じシナリオＩＤ１用モジュールファイル１８４を実行する。
【０１７６】
より具体的には、出力部１０４は、変換前のデータであるパラメタのデータと変換後の実行出力時データの型との２つをデータ変換装置２に送信し、データ変換装置２から結果を受信し、データ変換に成功したか否かを判定し、データ変換に成功した場合には変換後のデータをメモリ上に保存して戻り値を変換データのポインタにセットし、データ変換に失敗した場合には戻り値をＮＵＬＬにセットする。なお、失敗時の処理については説明を省略する。
【０１７７】
データ変換のモジュール処理後、出力部１０４は、シナリオ１シナリオ管理ＤＢ１８１の動作モードが「本番」であるか否かを判定する。
【０１７８】
「本番」であると判定された場合、シナリオ処理部４４は、実行結果の出力データ（号機とシナリオＩＤとシナリオテンプレートＩＤと出力データのポインタアドレスとデータ型と）を出力データテーブル４２に格納する。
【０１７９】
「本番」でないと判定した場合、出力部１０４は、実行結果の出力データ（号機とシナリオＩＤとシナリオテンプレートＩＤと出力データのポインタアドレスとデータ型と）をテストテーブル１６に格納する。
【０１８０】
実行結果の出力データの格納後、出力部１０４は、ステップＳ１２０４で取得したレコードの成功時次回シナリオテンプレートＩＤを次回実行シナリオテンプレートＩＤとしてメモリ上に保存し、制御種別データ変換処理を終了する。
【０１８１】
ステップＳ１３０９では、出力部１０４は、モジュールの制御種別が「フロー」であるか否かを判定する。出力部１０４は、「フロー」であると判定した場合、ステップＳ１３１０に処理を移し、「フロー」でないと判定した場合、制御種別毎処理を終了する。
【０１８２】
ステップＳ１３１０では、出力部１０４は、制御種別フロー処理を行い、制御種別毎処理を終了する。制御種別フロー処理では、シナリオのフロー制御が行われる。
【０１８３】
より詳細には、出力部１０４は、シナリオＩＤ１用パラメタＤＢ１８５から、ステップＳ１２０４で取得したレコードのパラメタＩＤと同じレコードを取得し、パラメタを取得する。
【０１８４】
続いて、出力部１０４は、取得したパラメタを用いて、ステップＳ１２０５で取得したレコードのモジュール名と同じシナリオＩＤ１用モジュールファイル１８４を実行する。
【０１８５】
より具体的には、出力部１０４は、シナリオテンプレートファイル１８内のパラメタＤＢ１８５より同じパラメタＩＤを持つデータを取得し、シナリオテンプレートファイル１８内のシナリオテンプレートＤＢ１８２から、条件に該当するシナリオテンプレートＩＤを検索し、戻り値を検索したシナリオテンプレートＩＤにセットする。付言するならば、バイナリ化されたシナリオテンプレートファイル１８内に存在するデータのみで制御される。
【０１８６】
続いて、出力部１０４は、実行した戻り値を次回実行シナリオテンプレートＩＤとしてメモリ上に保存し、制御種別フロー処理を終了する。
【０１８７】
以上のように処理することにより、シナリオ作成装置１内でシナリオテンプレートファイル１８の事前動作検証を行った上でシナリオ処理装置４のシナリオテンプレートファイル４３を更新でき、ロボット装置５を動作させる前にシナリオの動作検証が可能となる。
【０１８８】
また、例えば、シナリオＩＤ１に対し、シナリオ途中で音声データのみの出力から音声データと映像データとの両方の出力に変更する場合、シナリオテンプレートＤＢ１４のシナリオテンプレートＩＤ１４１の「１４」、「１５」の変更と、「３１」、「３２」が追加となる。シナリオテンプレートＩＤ１４１が「１４」のレコードについては、成功時次回シナリオテンプレートＩＤ１４７の「１５」を「３１」に変更し、シナリオテンプレートＩＤ１４１が「１５」レコードについては、成功時次回シナリオテンプレートＩＤ１４７の「１６」を「３２」に変更する。また、シナリオテンプレートＩＤ１４１が「３１」のレコードについては、シナリオＩＤ１４２を「１」、モジュールＩＤを「１６」、パラメタシナリオテンプレートＩＤ１４６を「１３」、成功時次回シナリオテンプレートＩＤ１４７を「１５」とする。シナリオテンプレートＩＤ１４１が「３２」のレコードについては、シナリオＩＤ１４２を「１」、モジュールＩＤを「８」、パラメタシナリオテンプレートＩＤ１４６を「３１」、成功時次回シナリオテンプレートＩＤ１４７を「１６」とする。
【０１８９】
この場合でも、ステップＳ１１０３でファイル化されたテストテーブル１６の内容を確認することにより、変更した内容が正しいことを確認できる。
【０１９０】
なお、ロボット装置制御システム１０００では、概念ＤＢ２１、音声ＤＢ２２、映像ＤＢ２３が部分的に更新されたときには、過去に行ったテストが行われ、ロボット装置制御システム１０００の信頼性の向上が図られる。
【０１９１】
（シナリオテンプレートの実行について）
シナリオ処理装置４のシナリオ処理部４４にて、シナリオテンプレートの実行を行う。以下、その概要を説明する。
【０１９２】
図１４は、号機管理ＤＢ４１の一例を示す図である。号機管理ＤＢ４１には、ＤＢ内でユニークとなる号機管理ＩＤ４１１と、号機４１２と、ロボット装置５のＩＰアドレスを示すＩＰアドレス４１３と、シナリオＩＤ４１４と、シナリオテンプレートファイル名４１５と動作モード４１６との情報が対応付けられて格納されている。
【０１９３】
図１５は、出力データテーブル４２の一例を示す図である。出力データテーブル４２は、号機４２１と、シナリオＩＤ４２２と、シナリオテンプレートＩＤ４２３と、出力データポインタアドレス４２４と、データ型４２５との情報が対応付けられて格納されている。
【０１９４】
図１６は、シナリオ処理部４４が実行するシナリオテンプレート実行処理に係る処理手順の一例を示す図である。なお、シナリオの共通処理（開始処理、終了処理等）については、図示および説明を省略している。
【０１９５】
シナリオ処理部４４は、号機管理ＤＢ４１からレコードを取得する（ステップＳ１６０１）。
【０１９６】
続いて、シナリオ処理部４４は、取得したレコードの持つシナリオテンプレートファイル名よりシナリオテンプレートファイル４３を取得する（ステップＳ１６０２）。
【０１９７】
続いて、シナリオ処理部４４は、シナリオの実行中にシナリオテンプレートファイル４３が更新されている場合を考慮し、シナリオテンプレートファイル４３が更新されているかをファイルサイズ、ファイル更新日付などでチェックを行う（ステップＳ１６０３）。シナリオ処理部４４は、更新されていると判定した場合、ステップＳ１６０４に処理を移し、更新されていないと判定した場合、ステップＳ１６０５に処理を移す。
【０１９８】
ステップＳ１６０４では、シナリオ処理部４４は、シナリオテンプレートファイル４３を再読み込みし、ステップＳ１６０５に処理を移す。
【０１９９】
ステップＳ１６０５では、シナリオ処理部４４は、ステップＳ１６０１で取得した号機管理ＤＢ４１のレコードを１件読み込む。
【０２００】
続いて、シナリオ処理部４４は、レコード中の該当号機のシナリオタスク処理が終了しているかを判定する（ステップＳ１６０６）。シナリオ処理部４４は、終了していると判定した場合、ステップＳ１６０７に処理を移し、終了していないと判定した場合、ステップＳ１６０３に処理を移す。
【０２０１】
ステップＳ１６０７では、シナリオ処理部４４は、該当号機の出力データテーブル４２の出力データポインタアドレスのメモリ上のデータをクリアし、該当号機の出力データテーブル４２のレコードもクリアする。
【０２０２】
続いて、シナリオ処理部４４は、シナリオタスク処理を行う（ステップＳ１６０８）。なお、シナリオタスク処理については、図１２の処理と同様であるので説明を省略する。
【０２０３】
続いて、シナリオ処理部４４は、ステップＳ１６０１で取得したレコードのうち未処理のレコードがまだあるか否かを判定する（ステップＳ１６０９）。シナリオ処理部４４は、未処理のレコードがあると判定した場合、ステップＳ１６０３に処理を移し、未処理のレコードがないと判定した場合、ステップＳ１６０１に処理を移す。
【０２０４】
以上のように、シナリオの実行中であっても変更したシナリオテンプレートファイル４３を入替え可能である。
【０２０５】
本実施の形態によれば、シナリオを適切に編集することができるので、保守性の高いロボット装置制御システムを提供することができる。
【０２０６】
（２）他の実施の形態
なお上述の実施の形態においては、本発明をロボット装置制御システム１０００に適用するようにした場合について述べたが、本発明はこれに限らず、この他種々のロボット装置制御システムに広く適用することができる。
【０２０７】
また上述の実施の形態においては、シナリオ作成装置１とデータ変換装置２とシナリオ処理装置４とロボット装置５とが別々に設けられている場合について述べたが、本発明はこれに限らず、ロボット装置５内にシナリオ処理装置４を配置してもよいし、シナリオ処理装置４内にデータ変換装置２を配置してもよいし、その他の組み合わせの装置構成としてもよい。
【０２０８】
また上述の実施の形態においては、説明の便宜上、ＸＸＸテーブル、ＸＸＸファイルを用いて各種のデータを説明したが、データ構造は限定されるものではなく、ＸＸＸ情報などと表現してもよい。
【０２０９】
また、上記の説明において各機能を実現するプログラム、テーブル、ファイル等の情報は、メモリや、ハードディスク、ＳＳＤ（Solid State Drive）等の記憶装置、または、ＩＣカード、ＳＤカード、ＤＶＤ等の記録媒体に置くことができる。
【０２１０】
また上述した構成については、本発明の要旨を超えない範囲において、適宜に、変更したり、組み替えたり、組み合わせたり、省略したりしてもよい。
【符号の説明】
【０２１１】
１……シナリオ作成装置、２……データ変換装置、３……シナリオ表示端末装置、４……シナリオ処理装置、５……ロボット装置、６……検索エンジン、１０１……モジュール受付部、１０２……テストモジュール登録部、１０３……シナリオ作成部、１０４……出力部、１０００……ロボット装置制御システム。
【図１】
2019118992.tif 000003
【図２】
2019118992.tif 000004
【図３】
2019118992.tif 000005
【図４】
2019118992.tif 000006
【図５】
2019118992.tif 000007
【図６】
2019118992.tif 000008
【図７】
2019118992.tif 000009
【図８】
2019118992.tif 000010
【図９】
2019118992.tif 000011
【図１０】
2019118992.tif 000012
【図１１】
2019118992.tif 000013
【図１２】
2019118992.tif 000014
【図１３】
2019118992.tif 000015
【図１４】
2019118992.tif 000016
【図１５】
2019118992.tif 000017
【図１６】
2019118992.tif 000018