Translations of this page:

SEATユーザマニュアル

コマンドラインオプション

SEATを起動する前に、まずJuliusを以下のコマンドラインによって起動してください。

% julius -C seatsat.jconf

Juliusのインストールとセットアップについてはjuliushowtoを参照してください。

次にSEATを

% seat [scriptfile]

の形式で起動します。

例1

% seat config.xml

スクリプトファイルconfig.xmlを読み込んで起動します。

例2

% seat adaptor.xml script1.xml script2.xml

スクリプトファイルは任意の数に分けて読み込むことが可能です。 この例ではアダプタ定義部adaptor.xmlと2つのスクリプトファイルscript1.xmlとscript2.xmlを読み込んで起動します。

アダプタ定義

SEATは、アダプタを定義することによって、OpenRTMやソケット通信を利用して外部モジュールと連携することができます。アダプタ定義の例を示します。

<general name="sample">
  <julius host="localhost" port="9000" code="EUC-JP" />
  <agent name="control" type="rtcout" />
  <agent name="talk" host="localhost" port="11000" code="shift-jis" />
</general>

以下、個々の定義について解説します。

Juliusアダプタ

<julius [option] />

以下のオプションが指定可能です。

host Juliusを立ち上げたホストのIPアドレス 必須
port Juliusとの通信に利用するポート 必須
code Juliusとの通信に利用する文字コード 任意(デフォルト”EUC-JP”)

Juliusのモジュールモードでの起動についてはjuliushowtoを参照してください。

OpenRTM,ソケットアダプタ

<agent [option] />

以下のオプションが指定可能です。

name アダプタを区別するID 必須
type アダプタの種類 任意(デフォルト”socket”)
host ソケットサーバを立ち上げたホストのIPアドレス type==“socket”の場合必須
port ソケットサーバとの通信に利用するポート type==“socket”の場合必須
code 各アダプタの通信に利用する文字コード 任意(デフォルト”無変換”)

typeには、”socket”以外にも”rtcout”が指定でき、その場合、OpenRTMを用いた出力ポートが生成されます。 type==“rtcout”で生成されたポートは、RTSystemEditorなどのGUIを使って、容易に他モジュールに接続することができます。

状態定義

スクリプトは、複数の状態からなります。 状態の中にはルールを書きます。 ルールの条件部が真となるとルールのコマンド部が起動します。

スクリプトの例

<state name="main" dict="juliusdict/main.jgram">
  <rule>
    <key>ロボット操作モード[へ変更]</key>
    <statetransition>robotcontrol</statetransition>
    <command host="talk">
        (talk "ロボット操作モードへ変更")
    </command>
  </rule>
</state>
 
<state name="robotcontrol" dict="juliusdict/robotcontrol.jgram">
  <rule>
    <key>1歩前進</key>
    <key>1歩前に進んで</key>
    <key>1歩前へ</key>
    <command host="talk">(talk "1歩前に行きます") </command>
    <command host="control">(robot hwalk :set-target-pos 0.2 0 0)</command>
  </rule>
</state>

このスクリプトでは、”main”と”robotcontrol”の2つの状態が定義されています。 main状態で「ロボット操作モードへ変更」という入力を受けるとrobotcontrol状態へ移行します。 robotcontrol状態で「一歩前に進んで」という入力を受けると、ロボット操作サーバへ一歩前へ進むコマンドを送信します。

オプションの説明

<state [option]>

オプションは以下のものがあります。

name 状態を区別するID 必須
dict この状態で利用する文法モデル 必須

文法モデルは、上のスクリプト例の場合:

[SEATを起動したフォルダ]/juliusdict/main.jgram
[SEATを起動したフォルダ]/juliusdict/robotcontrol.jgram

のファイルが読み込まれます。

Juliusの文法モデルの作成についてはjuliushowtoを参照してください。

nameが以下の値の場合、特殊な制御が行われる。

name=“all” 状態の遷移によらずルールと辞書が全ての状態で有効になる
name=“start” 起動時に最初に選択される状態

ルール定義

オプションの説明

<rule>
  <key>[phrase]</key>
  <command>[command]</command>
  <statetransition>[name]</statetransition>
</rule>

オプションは以下のものがあります。

phrase ルールの一致条件 最低一つは必須
command ルールが一致した場合に実行されるコマンド 任意
statetransition 状態を遷移させるコマンド 任意

phrase, commandともに複数指定することができます。phraseはどれか一致すると真になるOR条件で判定されます。ルールが一致すると複数指定されたコマンドはすべて実行されます。

phraseの指定には以下の形式が利用できます。

[subphrase] subphraseがあってもなくても一致する
(subphrase1|subphrase2) subphrase1かsubphrase2のどちらかがあった場合に一致する

*例1*

一歩前に進んで[ください]

「一歩前に進んで」「一歩前に進んでください」のどちらにも一致します。

*例2*

(一歩前|二歩前|三歩前)に進んで

「一歩前に進んで」「二歩前に進んで」「三歩前に進んで」のどちらにも一致します。

多入力機能の説明

keyタグには以下のオプションを指定することができます。(バージョン1.1.0以上で有効)

<key [option]>[phrase]</key>
source コマンドを受信するアダプタのID 必須

sourceから受信したコマンドがphraseに一致するか判断します。

例えば以下のように使うことができます。

*例1*

<general name="sample1">
  <agent name="socket1" host="localhost" port="11000" />
  <agent name="socket2" host="localhost" port="12000" />
</general>
<state name="start">
  <rule>
    <key source="socket1">hello</key>
    <command host="socket2">received hello from socket1</command>
  </rule>
  <rule>
    <key source="socket2">hello</key>
    <command host="socket1">received hello from socket2</command>
  </rule>
</state>

説明:ポート11000で接続したsocket1から入力「hello」があった場合、socket2に対して「recieved hello from socket1」と出力、ポート12000で接続したsocket2から入力「hello」があった場合、socket1に対して「recieved hello from socket2」と出力します。

*例2*

<rule>
  <key>ハロー</key>
  <key source="stdin">hello</key>
  <command host="stdout">hello!</command>
</rule>

説明:音声入力「ハロー」と、標準入力からのキー入力「hello」のどちらにも一致して、標準出力に「hello!」と出力します。(”stdin”“stdout”はSEATにデフォルトで用意されたアダプタです)

コマンド定義

オプションの説明

<command [option]>[command]</command>

オプションは以下のものがあります。

host コマンドを送信するアダプタのID 必須

[command]で指定される内容が、hostで指定されるサーバに対して送信されます。

状態遷移コマンド定義

オプションの説明

<statetransition>[name]</statetransiton>

オプションは以下のものがあります。

name 遷移する状態のID 必須

pushdown automatonの説明

statetransitionタグには以下のオプションを指定することができます。(バージョン1.1.0以上で有効)

<statetransition [option]>[name]</statetransiton>
func “push”か”pop” 任意

func=“push”と指定した場合、現在の状態を保存し、[name]で指定される状態に遷移します。 func=“pop”と指定した場合、前回pushによって保存された状態に戻ります。

例えば以下のように使うことができます。

*例*

<state name="confirm" dict="confirm.jgram">
  <rule>
    <key>はい</key>
    <commmand host="loopback">confirm-yes</command>
    <statetransition func="pop" />
  </rule>
  <rule>
    <key>いいえ</key>
    <commmand host="loopback">confirm-no</command>
    <statetransition func="pop" />
  </rule>
</state>
 
<state name="start" dict="selectAB.jgram">
  <rule>
    <key>A[を選択]</key>
    <command host="loopback">enter-state</command>
    <statetransition func="push">handleA</statetransition>
  </rule>
  <rule>
    <key>B[を選択]</key>
    <command host="loopback">enter-state</command>
    <statetransition func="push">handleB</statetransition>
  </rule>
</state>
 
<state name="handleA">
  <rule>
    <key source="loopback">enter-state</key>
    <command host="talk">Aでよろしいですか?</command>
    <statetransition func="push">confirm</statetransition>
  </rule>
  <rule>
    <key source="loopback">confirm-yes</key>
    <command host="talk">Aが選択されました</command>
    <statetransition func="pop" />
  </rule>
  <rule>
    <key source="loopback">confirm-no</key>
    <command host="talk">Aが選択されませんでした</command>
    <statetransition func="pop" />
  </rule>
</state>
 
<state name="handleB">
  <rule>
    <key source="loopback">enter-state</key>
    <command host="talk">Bでよろしいですか?</command>
    <statetransition func="push">confirm</statetransition>
  </rule>
  <rule>
    <key source="loopback">confirm-yes</key>
    <command host="talk">Bが選択されました</command>
    <statetransition func="pop" />
  </rule>
  <rule>
    <key source="loopback">confirm-no</key>
    <command host="talk">Bが選択されませんでした</command>
    <statetransition func="pop" />
  </rule>
</state>

解説:AかBの選択を入力しその選択を確認します。状態”confirm”はサブルーチンのようにして、状態”handleA”と状態”handleB”から呼ばれます。(アダプタ”loopback”はSEATにディフォルトで用意されています)

seat/document.txt · 最終更新: 2011/04/16 14:22 (外部編集)
Valid CSS Driven by DokuWiki Recent changes RSS feed Valid XHTML 1.0