SEATを起動する前に、まずJuliusを以下のコマンドラインによって起動してください。
Juliusのインストールとセットアップについてはjuliushowtoを参照してください。
次にSEATを
の形式で起動します。
例1
スクリプトファイルconfig.xmlを読み込んで起動します。
例2
スクリプトファイルは任意の数に分けて読み込むことが可能です。 この例ではアダプタ定義部adaptor.xmlと2つのスクリプトファイルscript1.xmlとscript2.xmlを読み込んで起動します。
SEATは、アダプタを定義することによって、OpenRTMやソケット通信を利用して外部モジュールと連携することができます。アダプタ定義の例を示します。
以下、個々の定義について解説します。
以下のオプションが指定可能です。
| host | Juliusを立ち上げたホストのIPアドレス | 必須 |
|---|---|---|
| port | Juliusとの通信に利用するポート | 必須 |
| code | Juliusとの通信に利用する文字コード | 任意(デフォルト”EUC-JP”) |
Juliusのモジュールモードでの起動についてはjuliushowtoを参照してください。
以下のオプションが指定可能です。
| name | アダプタを区別するID | 必須 |
|---|---|---|
| type | アダプタの種類 | 任意(デフォルト”socket”) |
| host | ソケットサーバを立ち上げたホストのIPアドレス | type==“socket”の場合必須 |
| port | ソケットサーバとの通信に利用するポート | type==“socket”の場合必須 |
| code | 各アダプタの通信に利用する文字コード | 任意(デフォルト”無変換”) |
typeには、”socket”以外にも”rtcout”が指定でき、その場合、OpenRTMを用いた出力ポートが生成されます。 type==“rtcout”で生成されたポートは、RTSystemEditorなどのGUIを使って、容易に他モジュールに接続することができます。
スクリプトは、複数の状態からなります。 状態の中にはルールを書きます。 ルールの条件部が真となるとルールのコマンド部が起動します。
スクリプトの例
このスクリプトでは、”main”と”robotcontrol”の2つの状態が定義されています。 main状態で「ロボット操作モードへ変更」という入力を受けるとrobotcontrol状態へ移行します。 robotcontrol状態で「一歩前に進んで」という入力を受けると、ロボット操作サーバへ一歩前へ進むコマンドを送信します。
オプションの説明
オプションは以下のものがあります。
| name | 状態を区別するID | 必須 |
|---|---|---|
| dict | この状態で利用する文法モデル | 必須 |
文法モデルは、上のスクリプト例の場合:
[SEATを起動したフォルダ]/juliusdict/main.jgram [SEATを起動したフォルダ]/juliusdict/robotcontrol.jgram
のファイルが読み込まれます。
Juliusの文法モデルの作成についてはjuliushowtoを参照してください。
nameが以下の値の場合、特殊な制御が行われる。
| name=“all” | 状態の遷移によらずルールと辞書が全ての状態で有効になる |
|---|---|
| name=“start” | 起動時に最初に選択される状態 |
オプションの説明
オプションは以下のものがあります。
| phrase | ルールの一致条件 | 最低一つは必須 |
|---|---|---|
| command | ルールが一致した場合に実行されるコマンド | 任意 |
| statetransition | 状態を遷移させるコマンド | 任意 |
phrase, commandともに複数指定することができます。phraseはどれか一致すると真になるOR条件で判定されます。ルールが一致すると複数指定されたコマンドはすべて実行されます。
phraseの指定には以下の形式が利用できます。
| [subphrase] | subphraseがあってもなくても一致する |
|---|---|
| (subphrase1|subphrase2) | subphrase1かsubphrase2のどちらかがあった場合に一致する |
*例1*
一歩前に進んで[ください]
「一歩前に進んで」「一歩前に進んでください」のどちらにも一致します。
*例2*
(一歩前|二歩前|三歩前)に進んで
「一歩前に進んで」「二歩前に進んで」「三歩前に進んで」のどちらにも一致します。
多入力機能の説明
keyタグには以下のオプションを指定することができます。(バージョン1.1.0以上で有効)
| source | コマンドを受信するアダプタのID | 必須 |
|---|
sourceから受信したコマンドがphraseに一致するか判断します。
例えば以下のように使うことができます。
*例1*
説明:ポート11000で接続したsocket1から入力「hello」があった場合、socket2に対して「recieved hello from socket1」と出力、ポート12000で接続したsocket2から入力「hello」があった場合、socket1に対して「recieved hello from socket2」と出力します。
*例2*
説明:音声入力「ハロー」と、標準入力からのキー入力「hello」のどちらにも一致して、標準出力に「hello!」と出力します。(”stdin”“stdout”はSEATにデフォルトで用意されたアダプタです)
オプションの説明
オプションは以下のものがあります。
| host | コマンドを送信するアダプタのID | 必須 |
|---|
[command]で指定される内容が、hostで指定されるサーバに対して送信されます。
オプションの説明
オプションは以下のものがあります。
| name | 遷移する状態のID | 必須 |
|---|
pushdown automatonの説明
statetransitionタグには以下のオプションを指定することができます。(バージョン1.1.0以上で有効)
| func | “push”か”pop” | 任意 |
|---|
func=“push”と指定した場合、現在の状態を保存し、[name]で指定される状態に遷移します。 func=“pop”と指定した場合、前回pushによって保存された状態に戻ります。
例えば以下のように使うことができます。
*例*
解説:AかBの選択を入力しその選択を確認します。状態”confirm”はサブルーチンのようにして、状態”handleA”と状態”handleB”から呼ばれます。(アダプタ”loopback”はSEATにディフォルトで用意されています)