図1に本発明の一実施の形態に係るエージェントフレームワークのアーキテクチャを示す。本エージェントフレームワークが実装されるシステムは、例えば車載端末の例を想定して説明するが、必ずしも車載端末である必要はない。
本エージェントフレームワークは、ランタイム・エンジンであるエージェントフレームワーク・ランタイム1と、サービスアプリケーションを作成するためのSDK(Software Development Kit)であるエージェントフレームワークSDK9とで構成される。なお、アーキテクチャとしては、エージェントフレームワーク・ランタイム1を利用するアプリケーション層3と、エージェントフレームワーク・ランタイム1と連携する基盤ミドルウェア層5と、例えば車載端末に搭載される各種デバイスを含むデバイス層7とをさらに含む。
エージェントフレームワークSDK9は、開発用API(Application Program Interface)・ライブラリ94を含む。開発用API・ライブラリ94は、シナリオロジック用インタフェースとイベントアグリゲーションロジックインタフェースとを含むロジック開発用インタフェースと基盤ミドルウェア層向けインタフェース定義とを含む。後でも述べるがアプリケーション層3におけるシナリオロジック32は、シナリオXMLから動的に呼び出すことのできるC++関数である。シナリオロジック32には、状態に付随する状態ロジック、遷移に付随する遷移ロジック、起動及び終了時に全状態及び全遷移で呼び出される起動終了ロジックの3種類がある。シナリオロジック用インタフェースは、これらロジックが後に述べるシナリオエンジン11からロードできるようにするためのインタフェース仕様を規定している。また、イベントアグリゲーションロジックインタフェースは、イベントアグリゲーションロジックを、後に述べるイベントアグリゲータ122がロード・実行できるようにするインタフェース仕様を規定する。基盤ミドルウェア層向けインタフェース定義は、エージェントフレームワークから適用先システム(例えば車載端末)のデバイスを制御できるようにするためのゲートウェイコンポーネントであり、適用先システムの要件に応じてデバイス毎に開発されるべきものである。基盤ミドルウェア層5における実装コンポーネントがアクションコンダクタ13及びイベントエンジン12とインタラクションを行えるように、デバイス制御機能用インタフェース及びデバイスステータス更新用インタフェースが定義されている。デバイス制御機能用インタフェースは、アクションコンダクタ13からの実行要求・キャンセル要求を実装するため、コールバックインタフェースとしてコマンド要求インタフェース、コマンドキャンセルインタフェースを定義する。デバイスステータス更新用インタフェースは、イベントエンジン12が管理するイベントデータテーブル34に対し、デバイスのステータスが変化した際にデータを更新するためのインタフェースを提供する。このようなエージェントフレームワークSDK9は、他にも本エージェントフレームワークには必要な機能を提供するものもあるが、本実施の形態に主要部ではないので、これ以上述べない。
エージェントフレームワーク・ランタイム1は、シナリオエンジン11と、イベントエンジン12と、アクションコンダクタ13とを有する。シナリオエンジン11は、シナリオマネージャ111と、シナリオインタプリタ112とを有する。イベントエンジン12は、イベントマネージャ121と、イベントアグリゲータ122とを有する。アクションコンダクタ13は、アクション制御エンジン131と、マルチモーダルエンジン132とを有する。
シナリオエンジン11は、サービスのインタラクション手順を記述したシナリオ31をシステムに投入・削除し、シナリオ実行時には、サービス利用者(ユーザ)の入力や周辺の状況変化から検出されたイベントに応じて各々のシナリオの状態管理と、出力アクションの要求を行うことで、インタラクションの進行を制御するシナリオ実行コンポーネントである。ユーザは、複数のサービスを、状況に応じて切替えながら、臨機応変に利用することができる。シナリオエンジン11は、ユーザにサービスを、便利・快適・安全に利用してもらうことを目的として、サービス利用のインタラクション進行を制御する機能を有する。システムで利用される複数のサービスに関する状態管理を行い、サービスのインタラクション進行を記述するシナリオ31に従って、ユーザの入力イベントやセンサ入力の変化イベントに対応する出力アクションや次のイベント要求を決定し、ユーザとサービスの間のインタラクションを進行させる。また、複数のサービスを同時に動作させた場合には、それらを違和感なく切替えて利用できるようにする。
シナリオエンジン11のシナリオマネージャ111は、シナリオエンジン11内の各モジュールの起動を制御するモジュールである。シナリオエンジン11起動時に、設定情報を読み込み、各モジュールのインスタンスを生成する。このモジュールによって生成されるモジュールは、シナリオインタプリタ112を含む。シナリオマネージャ111は、シナリオインタプリタ112を、実行されるシナリオ31の数だけ生成し、シナリオ定義ファイルを読み込んで登録する。
シナリオインタプリタ112は、シナリオ31の定義に従って、インタラクション進行を制御するモジュールである。入力されたイベント(イベントエンジン12から通知される)に応じて、シナリオ31で定義された出力アクションを決定すると共に、次に必要となる入力イベントを決定する。決定されたアクション要求やイベント要求は、それぞれアクションコンダクタ13やイベントエンジン12に送付され、処理される。シナリオ定義はシナリオマネージャ111によって読み込まれ、シナリオインタプリタ112生成時に登録される。
シナリオエンジン11は、状態遷移モデルで表されるシナリオ31に従って、サービス利用者にサービスを提供する。シナリオ31には、サービスを受けるためのインタラクション手順が記述されており、ユーザの入力やセンサの変化などの入力イベントに応じた応答を決定する。
状態遷移モデルは、いくつかの「状態」と、状態から状態への「遷移」により表現される。この表現は、状態をノード、遷移をアークとしたネットワーク構造となる。状態遷移シナリオでは、遷移を定義する条件が真の時に、その遷移先である状態に変化する。本フレームワークで用いるシナリオXMLでは、state要素がノード、transition要素がアークに対応する。例えば、状態遷移シナリオにおける状態は、画面への表示や音声による発話といった、利用者に対しての働きかけや、接続されているデバイスなどへの制御命令といった、外部への働きかけ(アクション)を行うことを意味する。状態シナリオにおける遷移は、ユーザによるボタン押下やキー操作、発話などの入力や、デバイスからのイベントを受け付けることを意味する。
本システムにおける状態(state)には、外部への出力や内部処理を記述する。外部への出力はアクション(action)と呼び、音声やHTML(Hyper Text Markup Language)ブラウザ向けの表現、カーナビゲーション・システムなどの機器制御コマンドなどを記述する。また、内部処理は、プログラム言語で記述されるシナリオロジック32に定義し、実行時に特定のタイミングで呼び出される。
アクションは、外部出力を制御するコマンドの集合で、制御するモダリティ(本実施の形態においてモダリティとは、デバイス、ミドルウェアをまとめて1つの入力/出力機能単位としたものである。)毎のコマンドで記述する。アクションには、以下で述べるように、重要度と優先度を設定することができ、通常はサービスに与えられる重要度と優先度が使用されるので、明示的に指定する必要はない。重要度は、アクションコンダクタ13において、外部から与えられる重要度の閾値に従って出力を自動的に抑制したり再開したりする制御のために使用される。この機能によって、例えば、ユーザの負荷状態と連動して重要度の閾値を変化させ、負荷が高い場合には重要なアクションしか出力しないというアプリケーションを実現できる。一方、優先度は、アクションコンダクタ13において、複数アクションの出力要求が競合している場合に、出力するアクションを調停するために使用される。この機能によって、優先度の低いアクションを出力している途中でも、優先度の高いアクションを割り込ませて出力したり、その逆に、優先度の高いアクションを出力している途中であれば、優先度の低いアクションの出力を待たせたりすることができる。
本システムにおける遷移(transition)は、状態から状態への遷移関係を定義する。遷移は「現在実行中の状態(カレントコンテキストとも呼ぶ)」から伸びるものが有効となる。遷移の配下には、状態遷移を発生させるイベントを記述する。シナリオインタプリタ112は、有効な遷移に記述されたイベントが発生した場合、通知をしてもらえるようにイベントエンジン12に要求する。
本システムに対する入力は、イベント(event)と呼ぶ。イベントは、シナリオ31で検出対象とする入力を決定するもので、遷移(transition)の配下に記述される。1つの遷移に複数のイベントを記述した場合には、OR結合となって、いずれか一方のイベントが発生すれば、状態遷移が起こる。
イベントには、ユーザが定義するイベントであるユーザ定義イベントと、センサ入力のように基盤ミドルウェアで予め定義されているイベントである定義済みイベントと、システム動作に伴う定義済みのイベントである特殊イベントである。ユーザ定義イベントは、シナリオ31でユーザが定義しているイベントを受理するもので、例えば、音声認識が発生した時に認識結果を受け取ると共にイベント発生を通知してもらうような場合に使用する。定義済みイベントは、シナリオ31とは別な場所で予め定義されているイベントで、センサ類の入力などがこれにあたる。シナリオ開発者は予め定義済みイベントに関する知識を持っているという前提で、これを利用したシナリオ31を書くことになる。特殊イベントは、システムの動作に関係するイベントであり、予め定義済みとなっているイベントである。アクションの出力状況を通知するためのイベントなどが含まれる。本フレームワークでは特殊イベントとして以下のような6種類の出力状態に関するイベントが用意されている。
待機:アクション出力要求が何らかの原因で開始できない場合に通知。
開始:アクション出力要求が実際に開始されたタイミングで通知。
中断:出力中のアクションが何らかの原因で中断された場合に通知。
再開:中断されたアクションが再度、開始された場合に通知。
完了:アクションの出力が(タイムアウトを含めて)完了した場合に通知。
エラー:アクションの出力がエラーとなった場合に通知。
これらを指定する特殊なイベント定義を記述することで、出力状態の変化に応じたシナリオ31を記述することができる。
複数モダリティからの入力を同一のイベントとして扱いたい場合には、各モダリティに対して、コマンドで指定するイベントの書き込み先が同一になるように設定する。例えば、音声入力で「はい」と入力された場合と、画面の「Yes」ボタンが押された場合を同一視する場合、音声と画面のモダリティへのコマンドで同じ場所に入力結果を書き込むように指定する。
また、シナリオ31の状態や遷移の処理の、特定のタイミングで実行される関数を、シナリオロジックと呼ぶ。これらの関数には、デフォルトの動作が用意されており、何も指定されていない場合にはそれらが呼び出される。ユーザが必要な処理を定義すると、デフォルトの動作はオーバーライドされ、ユーザ定義の処理が行われる。
シナリオロジック32の中には、シナリオ31で記述しきれない複雑な内部処理や、アウトバウンズで制御する外部アプリケーションへの操作などを記述する。
シナリオロジック32を呼び出すタイミングを、状態aから遷移tを通って状態bに状態遷移が発生する場合を例にして示す。まず、カレントが、状態aにあるときに、遷移tのイベントが発生すると、そのイベントを受理するかどうかの判定処理の一環で、遷移tの遷移判定ロジックが実行される。判定の結果、遷移可能となった場合には、状態aの状態終了ロジックが実行され、引き続き遷移tの遷移実行ロジックが実行される。そして、状態bに遷移後、状態bのアクション要求ロジックが実行される。この後、アクションコンダクタ13にアクション要求がなされるが、このアクションが実際に実行される直前のタイミングで、状態bのコマンド確定ロジックが実行される。この後は、次のイベントが発生したところで、同様の処理を繰り返す。
イベントエンジン12は、サービス利用者自身の状態、サービス利用者周辺の状態、あるいはサービスの実行状態など様々な状態をイベントデータテーブル34に収集・管理し、各イベントの監視元に対し、イベントが発生した際にイベント発生通知を行うことによって、イベント発生を契機にサービスを提供するイベント駆動型サービスを実現するためのイベント管理コンポーネントである。
イベントエンジン12は、イベント管理機能(イベントマネージャ121による機能)、イベント通知機能(イベントマネージャ121による機能)、イベントアグリゲーション機能(イベントアグリゲータ122の機能)とを有する。イベント管理機能は、イベントをイベントデータテーブル34に格納・管理する機能である。イベントを新規登録、更新、削除、検索する機能を提供する。イベント通知機能は、イベントの監視元に対し、イベント発生を通知する機能である。イベントの監視元は、監視するイベントに対して予め監視登録(Subscribe)を要求しておくことにより、Subscribe対象のイベントが発生すると、イベントエンジン12からイベント通知(Notify)を受けることができる。イベント監視元は、Subscribe時に通知を受けるためのイベント通知条件を指定(条件付きSubscribe)することによって、不必要なイベント通知をフィルタリングすることができる。イベントアグリゲーション機能は、開発者の定義した外部ロジック(以下、イベントアグリゲーションロジック)により、各種デバイスなどから得られる詳細なイベントデータを、アプリケーションが取り扱いやすいイベントデータに加工する機能を提供する。例えば、車載センサーから得られるウインカー、ハンドル操舵角度、アクセル開度、ブレーキ強度の値を総合して、運転手の繁忙度合い(低〜中〜高)を算出し新しいイベントデータとする。イベントアグリゲーションロジックは、予めシェアドライブラリに登録され、イベントエンジン12からロードされる。
イベントロジック33は、アプリケーション層3においてイベントデータテーブル34を処理するものであり、開発者によって定義される。
アクションコンダクタ13は、アクション制御エンジン131と、マルチモーダルエンジン132とを有する。アクション制御エンジン131は、サービスからのアクション要求を管理し、出力順序を調停したり、出力を抑制したりすると共に、アクション出力状況の通知を行うモジュールである。複数のサービスから非同期にアクション要求を受信し、それらの優先度に従った出力順序を変更する出力調停機能や、負荷に応じて重要度の高いアクションだけを実行する出力抑制機能、アクションの出力状況に合わせてイベントタイプを更新する出力状況通知機能を提供する。マルチモーダルエンジン132は、シナリオエンジン11のアクション記述内容に応じて、アクションコンダクタ13が管理する複数のモダリティに対し制御(モダリティに対してコマンド送信及びモダリティからのレスポンス受信)するモジュールである。
アクションは、サービスが各モダリティに対する命令内容を定義するもので、各モダリティの制御コマンドや優先度・重要度、処理結果の書き込み場所などから構成される。アクションは、サービスからの要求によって生成され、アクションコンダクタ13に後に述べるアクションキューで管理されるが、サービスからのアクションのキャンセル要求やアクション完了のタイミングでアクションコンダクタ13が廃棄する。
アクションに関するデータ構造を図2に示す。図2は、1つのアクションについてのデータ構造を示している。アクション要求情報構造体は、アクションID、アクション要求元ID、アクション実行状態、アクション優先度、アクション重要度、コマンド構造体配列の先頭アドレス、コマンド数、コマンド確定コールバック関数のアドレス、コマンド確定パラメータのアドレス、イベント書き込み先のアドレスなどを含む。1つのアクションには複数のコマンドを含むことが可能であり、コマンド数でその数が規定される。また、コマンド構造体配列の先頭アドレスは、当該アクションに関係するコマンド情報構造体の先頭アドレスを示している。コマンド情報構造体は、命令先入出力ミドルウェアの識別情報と、コマンドと、コマンドパラメータとを含む。また、イベント書き込み先情報のアドレスは、イベント書き込み先情報構造体の先頭アドレスを示している。イベント書き込み先情報構造体は、完了イベント書き込み先のイベントタイプ名、待機イベント書き込み先のイベントタイプ名、開始イベント書き込み先のイベントタイプ名、中断イベント書き込み先のイベントタイプ名、再開イベント書き込み先のイベントタイプ名、エラーイベント書き込み先のイベントタイプ名を含む。コマンドは、モダリティに対する制御コマンドである。コマンド情報構造体において、命令先入出力ミドルウェアの識別情報はアクションコンダクタ13によって利用されるが、それ以外の内容は出力先のモダリティによって解釈される。重要度は、負荷に応じた出力抑制制御に用いられる。優先度は、アクションの出力調停に利用される。
なお、出力の抑制機能や出力順序の調停機能により、アクションを要求されるタイミングと、実際に出力が行われるタイミングは大きく異なる場合がある。このような場合に、アクション要求時の制御コマンドをそのまま利用しては、出力内容が不適切になったりする。それを避けるため、出力直前に制御コマンドの内容を確定させたい場合がある。コマンド確定コールバック関数が指定されると、実際の出力直前のタイミングで呼び出され、コマンド内容が確定した後に出力が行われる。コマンド確定パラメータは、コマンド確定コールバック関数で用いられるパラメータである。コマンド確定コールバック関数については後に詳述する。
アクション要求元IDは、優先度が同じ場合には、同じ要求元からのアクションを継続して出力するように制御するために指定される。
アクション要求は、以下の流れで処理される。
(1)アクション要求
サービスは、アクションコンダクタ13に対して、アクション出力の要求を登録する。アクションコンダクタ13は、送られてきた要求に対して、重要度や優先度によって出力の可否を判定する。アクションが直ぐに出力できる場合も、実際にアクションの出力を行うタイミングで、(2)コマンド確定処理が行われる。アクション要求は、複数のサービスから非同期に行われる可能性がある。
出力できなかった、すなわち保留されたアクションは、アクションコンダクタ13が記憶しており、次回の出力判定タイミングで再度、出力可能性を判定する。保留されていたアクションが新たに出力可能になった場合は、必要に応じて開始イベントが通知される。
(2)コマンド確定
アクションコンダクタ13は、アクションを実際に出力するタイミングで、コマンド内容を確定させるためのコールバック関数を呼び出す。サービスは、呼び出されたコールバック関数内で、必要に応じてコマンドの差し替えを行う。なお、要求時に指定したモダリティを変更することはできない。要求時のアクションにコマンド確定のためのコールバック関数が登録されていない場合には、これらの処理は行われず、アクション要求時のコマンドがそのまま利用される。アクション要求時にコマンドもコールバック関数も指定されていない場合にはエラーとして要求時に処理される。アクションの中断・再開によって、複数回、出力が開始される場合があるが、その際にはコールバック関数は、その都度呼び出される。
(3)アクションのキャンセル
出力が完了したアクション要求は、アクションコンダクタ13によって破棄される。一方、不要となったアクションは、サービスが明示的にキャンセルを発行する必要がある。アクション要求時に返却されるアクションIDを用いてキャンセル対象を指定する。キャンセル要求されたアクションは、出力状況にかかわらず削除される。出力中であれば、その時点で出力を中止する。
実際のアクションキャンセル要求は、アクション要求(キャンセルされるアクションの次のアクションの要求)のタイミングと同時に行われる。これは、アクションキャンセル処理と次のアクションの要求の間にタイムラグが生ずると、本来出力すべきでない別なアクションが出力される可能性があり、これを防止するためである。
アクション制御エンジン131の出力調停機能としては、出力調停機能を有する。
アクションキューでは、図3に示したように、優先度順に、アクション要求情報構造体へのアドレスが並べられている。図3の例では、音声出力についてのアクションA、アイコン出力についてのアクションB、音声出力についてのアクションCが、この順番の優先度で存在する場合には、アクション要求情報構造体Aへのアドレス、アクション要求情報構造体Bへのアドレス、アクション要求情報構造体Cへのアドレスが順番に並べられている。
なお、アクションのキャンセルと要求は同じタイミングで行われるので、キャンセルされるアクションが実行中、あるいは、完了後であり、次のアクションが存在すれば、この処理が行われる。
次に出力調停機能について説明する。アクションコンダクタ13は、アクション要求の有する優先度に従って、アクションを出力する順番を調停する機能を有する。複数のサービスが非同期に動作している場合、アクション出力の要求が競合する場合がある。例えば以下の場合である。
[1]あるサービスがアクション出力を行っている最中に、別にサービスがアクション出力の要求を行う。
[2]異なるサービスが同時にアクション出力の要求を行う。
アクション出力調停機能は、このようなアクション要求の競合が発生した場合に、重要なアクションを優先的に出力するように調停する機能を提供する。
上で述べたように、アクションには優先度が定義されており、この値を用いて次のような調停を行う。
[1]現在出力中のアクションより優先度が高いアクション要求は、現在の出力を中断して出力する。
[2]現在出力中のアクションより優先度が低いか、同じ優先度のアクション要求は、現在の出力が完了するまで待たされる。
なお、同時に複数のアクション要求が発生した場合でも、実際の処理はシリアライズされるため、順番に要求される場合と同じになる。
アクションコンダクタ13は、負荷の大きさに応じてアクションの出力を抑制するアクション出力抑制機能をも有している。負荷の大きさに対応する重要度の閾値はイベントタイプとして用意され、値の変化に応じてアクションコンダクタ13がイベント受けるように設定される。
アクションコンダクタ13は、イベントを受け付けて、内部的に重要度の閾値の変化を保持する。この閾値と、要求されたアクション、又は実行中のアクションの重要度とを比較し、出力の抑制制御を実施する。具体的には、以下の2つのケースで異なった出力抑制制御を実施する。
[a]アクション要求時
アクションの要求時には、アクションの重要度と閾値とを比較し、アクションの重要度の方が高いか等しい場合には出力可能とする。そうでない場合、出力を抑制し、アクションの要求は保留される。
[b]閾値の変化時
重要度の閾値が変化した場合、出力中を含む全てのアクション要求に対して重要度を比較し、重要度が閾値より高いか等しいものだけを集めて、出力調停処理を実施する。この結果、出力中のアクションが他のアクションに割り込まれる可能性がある。また、出力中のアクションの重要度が低くて出力できなくなった場合には、他のアクション出力が出なかったとしても中断される。
出力抑制機能によって出力できなかったアクションには、必要に応じて待機イベントが通知される。また、待機していたアクションが、負荷が下がって(すなわち重要度の閾値が下がり)出力可能となった場合には、必要に応じて開始イベントが通知される。出力中に負荷が高くなって中断されたアクションには、必要に応じて中断イベントが通知され、負荷が下がって再度(最初から)出力を行う場合には、必要に応じて再開イベントが通知される。
アクションコンダクタ13は、各アクションの出力状況を管理し、必要に応じて通知を行うアクション出力状態通知機能を有する。アクションの出力状況は、図2に示したアクション要求情報構造体における「アクション実行状態」において管理される。アクション実行状態としては、図4に示すような状態のいずれかが設定される。
図4に示すように、アクションのデータが登録された状態(初期状態)である「登録済み」状態と、アクションが直ぐに出力できず、待たされる状態である「待機」状態と、アクションを開始した状態である「開始」状態と、出力中のアクションが何らかの原因で中断された状態である「中断」状態と、一度中断されたアクションを再度出力し直す状態である「再開」状態と、アクション出力が完了した状態である「完了」状態と、アクション出力がエラーとなった状態である「エラー」状態とが定義されている。
「登録済み」状態は、アクションコンダクタ13内にアクション要求が登録された直後であり、アクション出力抑制/出力調停が行われていない状態である。「待機」状態は、具体的には、要求したアクションが、出力調停機能によって出力を待たされる場合、あるいは、出力抑制機能によって出力が待たされる場合に発生する。「開始」状態は、要求されたアクションが初めて出力される場合に発生する。アクションが出力待ちになっていなくても、初めて出力が開始されるタイミングで発生する。「中断」状態は、出力中のアクションが、完了していない段階で停止させられる場合に発生する。具体的には、他のサービスの要求アクションによる出力調停で出力を中断する場合と、出力抑制機能によって出力が抑制される場合に発生する。「再開」状態は、中断状態にあったアクションが、再度実行可能になったタイミングで発生する。具体的には、他のサービスが完了して、中断されていたアクションが再度実行可能になった場合や、出力抑制機能で抑制されていたものが解除された場合に発生する。「完了」状態は、出力中のアクションが完了した場合に発生する。アクションの完了はモダリティによって異なり、例えば、音声合成であれば指定された発話内容とタイムアウト時間が経過した段階で完了となる。通常は、モダリティからアクションコンダクタ13に完了が通知され、マルチモーダルエンジン132で、複数モダリティの完了状態を統合して完了を統合して、完了を判定する。「エラー」状態は、出力しようとした又は出力中のアクションが、何らかの原因でエラーとなった場合に発生する。エラー発生の例としては、マルチモーダルエンジン132のモダリティ制御機能でのアクション実行エラーがある。
「待機」「開始」「登録済み」「完了」「エラー」の状態は、アクション出力を通じて1度しか発生しないが、「中断」「再開」のイベントは複数回発生する可能性がある。
なお、ここでは簡略化のため「通知」と記述しているが、実際には、イベントエンジン12の提供するSubscribe機能を用いてサービスがあるイベントタイプ名とイベント通知を要求しておき、同じイベントタイプ名に対して書き込み機能を用いて値の書き込みを行うことで通知が行われる。
各アクションには、これらの状態に対応する通知場所(図2におけるイベント書き込み先情報構造体における書き込み先のイベントタイプ名)が指定される。イベント通知が不要な場合には、指定がないため、書き込み処理も行われない。
マルチモーダルエンジン132は、マルチモーダル機能を有する。マルチモーダル機能は、シナリオエンジン11のアクション記述内容に応じて、アクションコンダクタ13が管理する複数のモダリティに対して制御(モダリティに対してコマンド送信及びモダリティからのレスポンス受信)する機能を提供する。具体的には、マルチモーダル機能は、モダリティ管理機能と、モダリティ制御機能とを有する。
モダリティ管理機能は、モダリティ新規登録機能と、モダリティ制御一時停止機能と、モダリティ制御再開機能と、モダリティ登録削除機能とを有する。
モダリティ新規登録機能は、基盤ミドルウェア層5のモダリティが、アクションコンダクタ13から制御されるために、モダリティの起動時にモダリティの情報を新規登録する機能である。モダリティ制御一時停止機能は、モダリティ新規登録機能により登録済みのモダリティが何らかの事情により一時的に制御不能状態になったとき(例えば、自動車が走行中になり、画面出力を抑制する必要がある場合など)に、アクションコンダクタ13に対して制御を一時的に抑止することを宣言する機能である。モダリティ制御再開機能は、モダリティ制御一時停止機能により一時停止中のモダリティが、状況が変化し制御可能となったときに、制御の再開を宣言する機能である。モダリティ登録削除機能は、モダリティ新規登録機能により登録済みのモダリティが、システム終了などにより処理を終了する場合に、登録を削除する機能である。
モダリティ制御機能は、モダリティ状態管理機能と、モダリティ出力調停機能とを有する。
モダリティ状態管理機能は、アクションに記述される各モダリティへのコマンド要求とそのレスポンスを監視し、各モダリティが空き状態であるかビジー状態であるか(ビジー状態である場合は、当該アクションの優先度も保持)を常時管理する機能である。
モダリティ状態管理機能では、図5に示すような入出力ミドルウェア(モダリティ)管理テーブルを管理している。図5の例では、モダリティID、モダリティ名、割り込み種別と、実行アクション情報とを管理している。この実行アクション情報として、ビジーや、待機といった状態に関するデータが含まれる。割り込み種別については、他の優先度の高いアクションによって割り込みが行われる「割込可」と、割込制御が全く行われず、並列動作を許容する「割込制御無し」と、割り込みが全く認められない「割込不可」などがある。
モダリティ出力調停機能は、アクション制御エンジン131から渡される複数のアクション要求を、アクション要求に記述される各モダリティへの個々のコマンドが出力可能かどうか判定(モダリティ管理機能とモダリティ状態管理機能を参照し、モダリティが存在するかどうか、存在する場合には当該モダリティがビジーであるかどうかを判定)し、アクション要求の衝突を調停する機能である。
具体的には、アクション要求に記述される入力コマンドに対応するモダリティの状態に応じて図6に示すようなチェック結果を得て、さらに出力コマンドに対応するモダリティの状態に応じて図7に示すようなチェック結果を得る。さらに、チェック結果から図8に示すようなアクション実行判定を実施する。なお、入出力コマンドについては、入力コマンドとしてチェックを行い、さらに出力コマンドとしてもチェックを行う。
図6の入力コマンドとチェック結果の対応テーブルには、未登録のモダリティ、登録済みであって制御一時停止のモダリティ、登録済みであってビジー状態のモダリティ、登録済みであって空き状態のモダリティについて、入力コマンドに係るモダリティの一部について該当する場合、又は全てが該当する場合におけるチェック結果がまとめてある。なお、「割込制御無し」のモダリティについては、常に「空き状態」としてチェックする。
具体的には、入力コマンドに係るモダリティの状態が全て未登録であれば「エラー」として判定され、全て一時停止であれば「保留」と判定され、一部のモダリティがビジーであれば「保留」と判定され、一部が未登録又は一時停止のモダリティの場合には「保留」と判定され、それ以外の場合に「実行可」と判定される。
同様に、図7の出力コマンドとチェック結果の対応テーブルには、未登録のモダリティ、登録済みであって制御一時停止のモダリティ、登録済みであってビジー状態のモダリティ、登録済みであって空き状態のモダリティについて、出力コマンドに係るモダリティの一部について該当する場合、又は全てが該当する場合におけるチェック結果がまとめてある。なお、「割込制御無し」のモダリティについては、常に「空き状態」としてチェックする。
具体的には、出力コマンドに係るモダリティの状態が全て未登録であれば「エラー」として判定され、全て一時停止であれば「保留」と判定され、一部のモダリティがビジーであれば「保留」と判定され、一部が未登録又は一時停止のモダリティの場合には「保留」と判定され、それ以外の場合に「実行可」と判定される。
図8は、入力コマンド群のチェック結果と出力コマンド群のチェック結果とを総合して、アクション実行判定の結果を示すテーブルである。具体的には、入力コマンド群のチェック結果と出力コマンド群のチェック結果とのいずれかが「エラー」であれば「エラー」と判定され、入力コマンド群のチェック結果又は出力コマンド群のチェック結果が「保留」であれば「保留」と判定され、さらに入力コマンド群のチェック結果も出力コマンド群のチェック結果も「実行可」であれば「実行可」と判定される。なお、いずれかのチェック結果がエラーであれば、必要に応じて警告ログを出力する。
上でも述べたが、基盤ミドルウェア層5には、入力ミドルウェア1(51)、入力ミドルウェア2(52)、....、出力ミドルウェア1(53)、出力ミドルウェア2(54)、...などを含む。このように、デバイス層7に含まれる各種センサー71やマイク73などからイベントを検出してイベントエンジン12に出力するイベント入力ミドルウェア、デバイス層7に含まれるディスプレイ72やスピーカ74などに対してコマンドに応じた出力処理を実施する出力モダリティミドルウェアを含む。
デバイス層7は、車載端末などの各種センサーや出力デバイスなどを含む。
次に、本実施の形態に係る主要な処理について図9乃至図18を用いて説明する。アクション制御エンジン131は、シナリオエンジン11からのアクション要求又はキャンセル、重要度の閾値更新イベントの発生、アクション実行状態の更新タイミングで、以下の処理を実施する。
まず、上で述べたような事象が発生してアクション出力抑制/調停開始指示を受信するまで、開始指示待ちとなる(ステップS1)。そして、アクション出力抑制/調停開始指示を受信すると、現在の重要度の閾値と、アクションキュー中における実行中のアクションに規定されている重要度とを比較する(ステップS3)。図2に示したアクション要求情報構造体に含まれるアクション重要度と、内部構造に保持されている現在の重要度の閾値とを比較する。複数のアクションがアクションキューに登録されている場合には、図2に示したアクション要求情報構造体に含まれるアクション実行状態を参照して、「実行中」であるアクションについて比較を実施する。
比較の結果として、重要度<閾値である実行中のアクションがある場合には、この条件を満たす全ての実行中のアクションを中断にする(ステップS5)。すなわち、図2に示したアクション要求情報構造体に含まれるアクション実行状態を「中断」に設定する。そして、ステップS7に移行する。一方、比較の結果として、重要度<閾値である実行中のアクションがなければステップS7に移行する。
その後、現在アクションキューにキューイングされているアクション情報全てに対して、図2に示したアクション要求情報構造体に含まれる優先度順に出力調停を行い、優先度順にアクション情報(アクション要求情報構造体及びそれからリンクする情報)をアクションキューから取得する(ステップS7)。そして、現在の重要度の閾値と今回取得されたアクション情報に含まれるアクションの重要度の比較を行う(ステップS9)。ここで重要度<閾値であれば、次の優先度のアクションの処理に移行するためステップS7に戻る。一方、閾値≦重要度であれば、今回取得したアクション情報からアクション実行状態判定を実施する(ステップS11)。アクション情報に含まれるアクション実行状態が、「開始」「再開」「完了」又は「エラー」であるか判断する。このような場合には、再度アクション実行判定を実施する必要はないので、次の優先度のアクションの処理に移行するためステップS7に戻る。
一方、アクション情報に含まれるアクション実行状態が、「登録済み」「待機」又は「中断」であれば、マルチモーダルエンジン132でアクション実行判定を行う(ステップS13)。実行可能であれば、この段階で実行する。この処理については、図10を用いて説明する。そして、アクションキューに出力調停が実施されていないアクションが存在すればステップS7に戻る。一方、アクションキューに出力調停が実施されていないアクションが存在しない場合には、ステップS1に戻る。
次に、図10を用いてマルチモーダルエンジン132によるアクション実行判定について説明する。まず、アクション要求情報構造体からリンクされたコマンド情報構造体から特定される入力コマンド及び入出力コマンドについて、当該コマンドの実行対象モダリティの状態チェックを、図5に示した入出力ミドルウェア管理テーブルを参照して実施する(ステップS21)。図5に示した入出力ミドルウェア管理テーブルにおける実行アクション情報から実行対象モダリティの状態をチェックする。なお、上でも述べたが、割り込み種別も関係しており、割り込み種別が「割込制御無し」のモダリティであれば必ず「空き状態」と特定される。割込不可でビジーであれば、実行保留となる。
また、アクション要求情報構造体からリンクされたコマンド情報構造体から特定される出力コマンド及び入出力コマンドについて、当該コマンドの実行対象モダリティの状態チェックを、図5に示した入出力ミドルウェア管理テーブルを参照して実施する(ステップS23)。図5に示した入出力ミドルウェア管理テーブルにおける実行アクション情報から実行対象モダリティの状態をチェックする。割込不可でビジーであれば、実行保留となる。
そして、図6に関連して説明したように、入力コマンド及び入出力コマンドの実行判定を実施する(ステップS25)。ここでは「エラー」「保留」又は「実行可」のいずれかが特定される。同様に、図7に関連して説明したように、出力コマンド及び入出力コマンドの実行判定を実行する(ステップS27)。ステップS25と同様に、「エラー」「保留」又は「実行可」のいずれかが特定される。
その後、図8に関連して説明したように、アクション実行判定を実施する(ステップS29)。これによって、「エラー」「保留」又は「実行可」のいずれかが特定される。
「エラー」が特定されると、完了イベント発生として、図2のアクション実行状態に「完了」を登録する(ステップS31)。そして元の処理に戻る。
「保留」が特定されると、ステップS11と同様に、アクション実行状態判定を実施する(ステップS33)。そして、登録済みという状態であれば、待機イベント発生として、図2のアクション実行状態に「待機」を登録する(ステップS35)。一方、「登録済み」以外の状態であれば、元の処理に戻る。
「実行可」が特定されると、ステップS11と同様に、アクション実行状態判定を実施する(ステップS37)。これによって、「登録済み」「待機」「中断」「完了」「エラー」「開始」又は「再開」のいずれかが特定される。そして、「登録済み」又は「待機」であれば、開始イベント発生として、図2のアクション実行状態に「開始」を登録する(ステップS39)。そしてステップS43に移行する。一方、「登録済み」又は「待機」以外であれば、再開イベント発生として、図2のアクション実行状態に「再開」を登録する(ステップS41)。そしてステップS43に移行する。
そして、コマンド確定コールバック関数が図2のアクション要求情報構造体において登録されている場合には、コマンド確定処理を実施する(ステップS43)。コマンド確定コールバック関数の処理については、以下に詳細に説明するため、ここではコマンド確定コールバック関数については登録されていないものとして説明する。この場合ステップS43をスキップする。
そして、コマンドの実行対象モダリティの状態を図5の入出力ミドルウェア管理テーブルを参照してチェックし、コマンド実行中の場合はそのコマンドの処理を中断する(ステップS45)。コマンド実行中の場合には、図2のアクション実行状態に「中断」を登録する。なお、基本的には、ステップS21又はS23と同様のチェックを行う。
コマンドの実行対象モダリティの状態が「エラー」や「ビジー」ではない場合には、アクションの実行を行う(ステップS47)。そして元の処理に戻る。
以上のような処理を実施しすることによって、図11に示すような処理が可能となる。例えば、アクションキューに、第1優先度のアクションとして音声出力というアクションと、第2優先度のアクションとしてアイコン出力というアクションとが登録されている場合を想定する。なお、ここでは重要度の閾値より各アクションの重要度は高いものとする。このような場合、図9及び図10のフローに従って第1優先度のアクションの出力調停を実施する(ステップS51)。ここでテキスト音声出力モダリティ(TextToSpeechモダリティ)がビジーでなければ、第1優先度のアクションの出力処理が実施され、音声合成モダリティによって音声出力が開始される(ステップS53)。
ステップS53と並行して、図9及び図10のフローに従って第2優先度のアクションの出力調停が実施される(ステップS55)。第2優先度のアクションに係るモダリティが実行可(すなわち「空き」)状態であるか又は「割込制御無し」である場合には(ステップS57:Yesルート)、第2優先度の出力を開始させる(ステップS59)。すなわち、アイコン表示モダリティは「割込制御無し」であるので、音声とアイコンが重複出力される。一方、第2優先度のアクションに係るモダリティが実行可状態でなく且つ「割込制御無し」でもない場合には(ステップS57:Noルート)、第2優先度のアクションについて「待機」という状態を設定する(ステップS61)。
例えば第2優先度のアクションに係るモダリティが「アイコン表示」でなくとも、表示装置に画像を表示するものであったり、ビープ音を出力するものであっても同様に重複出力が行われる。
このようにフレキシブルに重複出力を可能とする構成であるため、短時間で多くの情報をユーザに提供することができるようになる。
次に、コマンド確定コールバック関数について図12乃至図18を用いて説明する。上では図10におけるステップS43でコマンド確定コールバック関数が規定されていない場合を示したが、ここでは、図12のシナリオ1(311)において、図13に示すように、状態state1内のアクションaction1については、logic属性で指定された”st1”という文字列を接頭辞としたロジック群を使用するものとして規定されているとする。これにより、コマンド確定ロジックの場合、”st1_action(・・・)”という関数が指定されたことになる。
シナリオエンジン11は、このようなシナリオ1(311)に基づき、図12に左下に示すアクション要求1をアクションコンダクタ13に出力する(ステップ(101))。アクション要求1には、開始イベントの書き込み先のイベントデータ変数名(イベントタイプ名)「$action01_start」、完了イベントの書き込み先のイベントデータ変数名(イベントタイプ名)「$action01_complete」などを含む。また、アクション要求1は、図12の中央下に示されているコマンド情報を含む。このコマンド情報では、命令先入出力ミドルウェア「TTS(TextToSpeechモダリティ)」と、コマンド「テキスト読み上げ」と、出力内容「今日の天気は晴れです」と、進捗状況通知先「$weather_progress」などのデータを含む。
アクションコンダクタ13は、図9及び図10で説明したアクションの出力調停及び実行判定を実施し(ステップ(102))、アクション要求1の実行を決定すると、開始イベントの書き込み先として指定されている、イベントエンジン12のデータ管理テーブル内のイベントデータ変数「$action01_start」をFALSEからTRUEに変更する(ステップ(103))。そして、図10におけるステップS43でコマンド確定コールバック関数を呼び出す(ステップ(104))。コマンド確定コールバック関数として指定されているコマンド確定ロジック322は、コマンド情報で指定されている、イベントエンジン12のデータ管理テーブル内のイベントデータ変数「$weather_progress」を参照して0%となっていることを確認する(ステップ(105))。そうすると、コマンド確定ロジック322は、現在のコマンド情報について変更を行う必要がないと判断する(ステップ(106))。そこで、アクションコンダクタ13は、コマンド情報をTextToSpeechミドルウェア55に出力する(ステップ(107))。TextToSpeechミドルウェア55は、コマンド情報に従ってスピーカ74を介して「今日の天気は晴れです」の音声データを合成して出力する。さらに、その出力の進捗状態を、コマンド情報で指定されている、イベントエンジン12のデータ管理テーブル内のイベント変数「$weather_progress」を更新して、80%まで音声データを出力して、上記イベント変数を80%に変更するところまで来たものとする(ステップ(108))。
この段階で、図14に示すように、シナリオエンジン11が、シナリオ2(312)に従ってアクション要求2をアクションコンダクタ13に出力したものとする(ステップ(201))。なお、アクション要求2の優先度は、アクション要求1の優先度より高いものとする。そうすると、アクションコンダクタ13は、図9及び図10で示した出力調停を実施して、アクション要求1についてのコマンドの出力を中断させる(ステップ(202))。コマンドの出力先であるTextToSpeechミドルウェア55は、割込可であるから割り込みがなされることになる。割込不可であれば、アクション要求2は割り込みできない。そして、アクションコンダクタ13は、アクション要求2についてのコマンド情報2をTextToSpeechミドルウェア55に出力する(ステップ(203))。この例では、「前方の車に注意してください」という音声データが合成され、スピーカ74から出力される。
このような出力が完了すると、図15に示すように、再開トリガーとなって(ステップ(301))、アクションキューに格納されたアクション要求1が再度出力調停の対象となり、アクションコンダクタ13は出力調停及び実行判定を実施する(ステップ(302))。そして、再度、図10のステップS43でコマンド確定コールバック関数を呼び出す(ステップ(303))。コマンド確定コールバック関数として指定されているコマンド確定ロジック322は、コマンド情報で指定されている、イベントエンジン12のデータ管理テーブル内のイベントデータ変数「$weather_progress」を参照して、出力されたデータの割合が80%以上であるか判断する(ステップ(304))。80%未満であれば、コマンド情報の変更は行わないが、この例では80%以上であるので、コマンド情報の出力内容を「NULL」に変更する(ステップ(305))。そして、アクションコンダクタ13は、変更されたコマンド情報をTextToSpeechミドルウェア55に出力する(ステップ(306))。TextToSpeechミドルウェア55は、コマンド情報の出力内容を出力しようとするが、「NULL」であるから出力するものが無く、直ぐに進捗状況通知先である、イベントエンジン12のデータ管理テーブル内のイベントデータ変数「$weather_progress」を80%から100%に変更する(ステップ(307))。そうすると、TextToSpeechミドルウェア55は、処理の終了を通知してアクションコンダクタ13の処理に復帰する(ステップ(308))。そうすると、アクション要求1で指定されている完了イベントの書き込み先イベントデータ変数「$action01_complete」をFALSEからTRUEに変更する(ステップ(309))。このようにして処理を完了する。
図12乃至図15で示したような処理を行う場合、コマンド確定ロジック322は、図16のような処理を実施する。すなわち、アクション1(311)のコマンド情報を解釈し、参照すべきイベントデータ変数を特定する(ステップS71)。そして、$weather_progress<80%であれば特に処理を行わず終了する。一方、$weather_progress≧80%であれば、コマンド情報の出力内容、ここでは天気の発声を無効化する(ステップS73)。そして処理を終了する。
また、TextToSpeechミドルウェア55は、図17に示すような処理を実施する。まず、コマンド情報に含まれる出力内容を参照し(ステップS81)、出力内容が「NULL」であれば、処理を行わず元の処理に復帰する。一方、出力内容に出力すべきテキスト(TEXT)が含まれている場合には、音声合成処理を実施し、出力バッファに格納する(ステップS83)。ここでは、テキストからPCM(Pulse Code Modulation)データを生成する。そして、出力バッファの終わりに到達した場合には元の処理に復帰する。一方、出力バッファに残りがある場合には、音声バッファ再生処理を実施し、スピーカ74を介して音声出力を行う(ステップS85)。そして、再生済みデータ量/音声データ全体を、コマンド情報で指定されている$weather_progressに格納する(ステップS87)。このような処理を出力バッファの終わりに到達するまで繰り返す。
80%は一例であって、コマンド毎に変更するようにしても良い。例えば、特定のキーワードが出力されるまでの割合を指定するようにしても良い。
このような図12乃至図17に示した処理をまとめると、図18の処理フローのようになる。まず、第1のアクションに係る第1の情報が出力される(ステップS91)。その後、第1の情報の出力が完了する前に、割り込みが発生する(ステップS93)。ここで割り込みに係る第2のアクションの方が優先度が高いとして、第2のアクションに係る第2の情報が出力される(ステップS95)。但し、割込可のモダリティであるか確認した上で、第2の情報を出力するか否かは判断される。この第2の情報の出力が完了すると、第1の情報の出力調停を再度実施し、第1の情報の再出力を決定する(ステップS97)。そして、第1の情報の出力内容を所定割合以上を出力しているか判断する(ステップS99)。第1の情報の出力内容を所定割合以上出力完了している場合には、第1の情報の出力完了を登録する(ステップS101)。そして、第1の情報については出力せずに処理を終了する。一方、第1の情報の出力内容を所定割合未満しか出力していなかった場合には、第1の情報の再出力を実施する(ステップS103)。
以上のように、十分な割合の情報が出力済みであれば、出力を再開させる場合においても、再出力を抑制して、他の情報を出力することによって、短時間に多くの情報を出力することができるようになる。
以上本発明の実施の形態を説明したが、本発明はこれに限定されるものではない。例えば、モジュール構成は図1に示したものに限定されず、上で述べたような処理を実施できれば他の構成であってもよい。
なお、上で述べた車載端末は、コンピュータ装置であって、図19に示すように当該コンピュータ装置においては、メモリ2501(記憶部)とCPU2503(処理部)とハードディスク・ドライブ(HDD)2505と表示装置2509に接続される表示制御部2507とリムーバブル・ディスク2511用のドライブ装置2513と入力装置2515とネットワークに接続するための通信制御部2517とがバス2519で接続されている。オペレーティング・システム(OS)及びWebブラウザを含むアプリケーション・プログラムは、HDD2505に格納されており、CPU2503により実行される際にはHDD2505からメモリ2501に読み出される。必要に応じてCPU2503は、表示制御部2507、通信制御部2517、ドライブ装置2513を制御して、必要な動作を行わせる。また、処理途中のデータについては、メモリ2501に格納され、必要があればHDD2505に格納される。このようなコンピュータは、上で述べたCPU2503、メモリ2501などのハードウエアとOS及び必要なアプリケーション・プログラムとが有機的に協働することにより、上で述べたような各種機能を実現する。但し、HDD2505については他の記憶装置によって代替される場合もある。また、ドライブ装置2513や通信制御部2517についても備えていない場合もある。車載端末には、図1に示した各種センサや出力装置も備えているが、図19では示していない。
(付記1)
アクションキューに登録されている第1のアクションに係る第1の情報の出力が完了する前に、前記アクションキューに次以降に登録されている第2のアクションが、当該第2のアクションに係る第2の情報の出力に用いられる特定の出力機能が空き状態であるか又は割込制御無しの機能であるかという条件を含む所定の条件を満たしているか否か判断する判断ステップと、
前記第2のアクションが前記所定の条件を満たしていると判断された場合には、前記第1の情報の出力が完了しているか否かにかかわらず、前記第2のアクションに係る第2の情報の出力を前記特定の出力機能に要求するステップと、
をコンピュータに実行させるための出力調停プログラム。
(付記2)
前記所定の条件が、
前記第2のアクションの重要度が、前記第1の情報及び前記第2の情報を知覚するユーザの負荷状態に連動する閾値以上であるという条件
を含む付記1記載の出力調停プログラム。
(付記3)
前記判断ステップが、
出力機能毎に割り込み種別及び状態を管理する管理テーブルを、前記第2のアクションに係る第2の情報の出力に用いられる前記特定の出力機能で検索するステップ
を含む付記1記載の出力調停プログラム。
(付記4)
前記第1のアクションの優先度が、前記第2のアクションの優先度より高いことを特徴とする付記1記載の出力調停プログラム。
(付記5)
前記第2のアクションが前記所定の条件を満たしていないと判断された場合、前記第2のアクションの実行状態を待機状態に設定するステップ
をさらにコンピュータに実行させるための付記1記載の出力調停プログラム。
(付記6)
アクションキューに登録されている第1のアクションに係る第1の情報の出力中に、前記アクションキューに前記第1のアクションより優先度が高く且つ前記第1のアクションに係る第1の情報の出力に用いられる特定の出力機能が同じ第2のアクションが登録された場合、前記特定の出力機能による前記第1の情報の出力を停止させる停止ステップと、
前記第2のアクションに係る第2の情報の出力を前記特定の出力機能に要求するステップと、
前記第2のアクションに係る第2の情報の出力が完了した後であって前記アクションキューに登録されている前記第1のアクションを再度処理する順番になった場合、前記第1のアクションに係る前記第1の情報の出力が予め定められた部分まで完了していたか判断するステップと、
前記第1のアクションに係る前記第1の情報の出力が予め定められた部分まで完了していた場合には、前記第1の情報の出力をキャンセルさせるステップと、
をコンピュータに実行させるための出力調停プログラム。
(付記7)
前記停止ステップが、
出力機能毎に割り込み種別を管理する管理テーブルを前記特定の出力機能で検索して、前記特定の出力機能が割り込み可の出力機能であるか判断するステップと、
前記特定の出力機能が割り込み可の出力機能である場合、前記特定の出力機能に前記第1の情報の出力を停止させるステップと、
を含む付記6記載の出力調停プログラム。
(付記8)
前記予め定められた部分が、前記第1の情報の出力割合で特定される
付記6記載の出力調停プログラム。
(付記9)
前記特定の出力機能が、前記第1のアクションによって指定された変数に前記第1の情報の出力割合を登録するステップ
をさらにコンピュータに実行させるための付記8記載の出力調停プログラム。
(付記10)
前記第1のアクションに係る前記第1の情報の出力が予め定められた部分まで完了していない場合、前記第1の情報の出力を再度前記特定の出力機能に要求するステップ
をさらにコンピュータに実行させるための付記6記載の出力調停プログラム。
(付記11)
アクションキューに登録されている第1のアクションに係る第1の情報の出力が完了する前に、前記アクションキューに次以降に登録されている第2のアクションが、当該第2のアクションに係る第2の情報の出力に用いられる特定の出力機能が空き状態であるか又は割込制御無しの機能であるかという条件を含む所定の条件を満たしているか否か判断する判断ステップと、
前記第2のアクションが前記所定の条件を満たしていると判断された場合には、前記第1の情報の出力が完了しているか否かにかかわらず、前記第2のアクションに係る第2の情報の出力を前記特定の出力機能に要求するステップと、
を含み、コンピュータに実行される出力調停方法。
(付記12)
前記所定の条件が、
前記第2のアクションの重要度が、前記第1の情報及び前記第2の情報を知覚するユーザの負荷状態に連動する閾値以上であるという条件
を含む付記11記載の出力調停方法。
(付記13)
前記判断ステップが、
出力機能毎に割り込み種別及び状態を管理する管理テーブルを、前記第2のアクションに係る第2の情報の出力に用いられる前記特定の出力機能で検索するステップ
を含む付記11記載の出力調停方法。
(付記14)
前記第1のアクションの優先度が、前記第2のアクションの優先度より高いことを特徴とする付記11記載の出力調停方法。
(付記15)
前記第2のアクションが前記所定の条件を満たしていないと判断された場合、前記第2のアクションの実行状態を待機状態に設定するステップ
をさらに含む付記11記載の出力調停方法。
(付記16)
アクションキューに登録されている第1のアクションに係る第1の情報の出力中に、前記アクションキューに前記第1のアクションより優先度が高く且つ前記第1のアクションに係る第1の情報の出力に用いられる特定の出力機能が同じ第2のアクションが登録された場合、前記特定の出力機能による前記第1の情報の出力を停止させる停止ステップと、
前記第2のアクションに係る第2の情報の出力を前記特定の出力機能に要求するステップと、
前記第2のアクションに係る第2の情報の出力が完了した後であって前記アクションキューに登録されている前記第1のアクションを再度処理する順番になった場合、前記第1のアクションに係る前記第1の情報の出力が予め定められた部分まで完了していたか判断するステップと、
前記第1のアクションに係る前記第1の情報の出力が予め定められた部分まで完了していた場合には、前記第1の情報の出力をキャンセルさせるステップと、
を含み、コンピュータに実行される出力調停方法。
(付記17)
前記停止ステップが、
出力機能毎に割り込み種別を管理する管理テーブルを前記特定の出力機能で検索して、前記特定の出力機能が割り込み可の出力機能であるか判断するステップと、
前記特定の出力機能が割り込み可の出力機能である場合、前記特定の出力機能に前記第1の情報の出力を停止させるステップと、
を含む付記16記載の出力調停方法。
(付記18)
前記予め定められた部分が、前記第1の情報の出力割合で特定される
付記16記載の出力調停方法。
(付記19)
前記特定の出力機能が、前記第1のアクションによって指定された変数に前記第1の情報の出力割合を登録するステップ
をさらに含む付記18記載の出力調停方法。
(付記20)
前記第1のアクションに係る前記第1の情報の出力が予め定められた部分まで完了していない場合、前記第1の情報の出力を再度前記特定の出力機能に要求するステップ
をさらに含む付記16記載の出力調停方法。
(付記21)
アクションキューに登録されている第1のアクションに係る第1の情報の出力が完了する前に、前記アクションキューに次に登録されている第2のアクションが、当該第2のアクションに係る第2の情報の出力に用いられる特定の出力機能が空き状態であるか又は割込制御無しの機能であるかという条件を含む所定の条件を満たしているか否か判断する判断手段と、
前記第2のアクションが前記所定の条件を満たしていると判断された場合には、前記第1の情報の出力が完了しているか否かにかかわらず、前記第2のアクションに係る第2の情報の出力を前記特定の出力機能に要求する手段と、
を有する出力調停装置。
(付記22)
前記所定の条件が、
前記第2のアクションの重要度が、前記第1の情報及び前記第2の情報を知覚するユーザの負荷状態に連動する閾値以上であるという条件
を含む付記21記載の出力調停装置。
(付記23)
前記判断手段が、
出力機能毎に割り込み種別及び状態を管理する管理テーブルを、前記第2のアクションに係る第2の情報の出力に用いられる前記特定の出力機能で検索する手段
を有する付記21記載の出力調停装置。
(付記24)
前記第1のアクションの優先度が、前記第2のアクションの優先度より高いことを特徴とする付記21記載の出力調停装置。
(付記25)
前記第2のアクションが前記所定の条件を満たしていないと判断された場合、前記第2のアクションの実行状態を待機状態に設定する手段
をさらに有する付記21記載の出力調停装置。
(付記26)
アクションキューに登録されている第1のアクションに係る第1の情報の出力中に、前記アクションキューに前記第1のアクションより優先度が高く且つ前記第1のアクションに係る第1の情報の出力に用いられる特定の出力機能が同じ第2のアクションが登録された場合、前記特定の出力機能による前記第1の情報の出力を停止させる停止手段と、
前記第2のアクションに係る第2の情報の出力を前記特定の出力機能に要求する手段と、
前記第2のアクションに係る第2の情報の出力が完了した後であって前記アクションキューに登録されている前記第1のアクションを再度処理する順番になった場合、前記第1のアクションに係る前記第1の情報の出力が予め定められた部分まで完了していたか判断する手段と、
前記第1のアクションに係る前記第1の情報の出力が予め定められた部分まで完了していた場合には、前記第1の情報の出力をキャンセルさせる手段と、
を有する出力調停装置。
(付記27)
前記停止手段が、
出力機能毎に割り込み種別を管理する管理テーブルを前記特定の出力機能で検索して、前記特定の出力機能が割り込み可の出力機能であるか判断する手段と、
前記特定の出力機能が割り込み可の出力機能である場合、前記特定の出力機能に前記第1の情報の出力を停止させる手段と、
を有する付記26記載の出力調停装置。
(付記28)
前記予め定められた部分が、前記第1の情報の出力割合で特定される
付記26記載の出力調停装置。
(付記29)
前記特定の出力機能が、前記第1のアクションによって指定された変数に前記第1の情報の出力割合を登録する手段
をさらに有する付記28記載の出力調停装置。
(付記30)
前記第1のアクションに係る前記第1の情報の出力が予め定められた部分まで完了していない場合、前記第1の情報の出力を再度前記特定の出力機能に要求する手段
をさらに有する付記26記載の出力調停装置。