eSEAT2
Simple Wiki Based Contents Management System
Home Topics Projects Software Memo Misc
ソフトウェア関連 >> eSEAT2

eSEAT ver.2

eSEAT ver.2 は、OpenHRIで公開していた簡易対話制御コンポーネントと2013年に公開したSUITを融合させたコンポーネントです。
2013年のSI2013で発表したものと異なりますのでご注意下さい。なお、このコンポーネントはOpenHRIに含める予定です。

eSEAT Ver.1からの拡張ポイント

今回開発したeSEATは、基本的に以前のseatmlで記述したスクリプトファイルも読み込むことが出来るようしていますが、スキーマのタグ名と実現している機能とのギャップが大きくなって来ましたので書き直しをしています。
その他に、データポートで使えるデータ型の拡張、scriptタグで記入していたpythonのコードを外部ファイルで指定可能にしたり、SUITコンポーネントのように簡易な入力パネルの生成機能の統合を行っています。
以前のバージョンでは、ruleタグのkeyに対したボタンの自動生成機能を実装していたのですが、この機能はマルチスレッド対応のmtTkinterという外部ライブラリに依していましたので、安定性、ライセンス等の理由でこの機能を削除しました。今後の改修で復活するかもしれませんが、どうしても利用されたい場合はお問い合わせください。
以下に、今回の改変ポイントを列挙します。
  • 入出力データポートのデータ型の拡張(OpenRTM-aistで標準にサポートしている全ての型への対応。独自データ型については未確認ですが可能だと思います。)
  • scriptタグのpythonコードを外部ファイルで指定可能。(この機能はeSEATの内部ではexefile関数コールで実装しています。そのため、対応するスクリプトがコールされる時に毎回評価されることになりますのでコンポーネントの動作中にファイルを書き換えるとコンポーネントの振る舞いも変更されますのでご注意下さい。)スクリプト内部では、データポートから来たデータは、rtc_in_dataという大域変数に自動的に格納されます。また、スクリプトで処理したデータを出力データポートから送信したい場合は、rtc_resultに代入することでスクリプト実行終了後に送信されます。
  • SUITコンポーネントで実装していた簡易GUI作成機能の統合のため'button,label,brk,spaceの追加と新たに一行入力のためのinputタグと文字列の出力用のtextタグを追加しています。下のようなGUIパネルを生成することができます。

  • スキーマの変更。SEATMLを最初に作成した時と現在の実装がかけ離れて来ました。そのため、SEATMLのスキーマを変更することにしました。今の実装では、以前のスキーマも読み込めるようにはしていますが将来的にはなくすつもりです。
    • 変更されるタグ
      • agentadaptor
      • commandmessage
  • Webアダプターを追加しました(2015-08-10)。この機能は、RTM-REST-APIと似たような機能を提供します。すなわち、これは、eSEATに簡単なCOMET機能をもつWebサーバーを実装したものであり、デフォルトでは、eSEATの起動ディレクトリの下の'html'というディレクトリをドキュメントルートとして動作しています。また、Webアダプタでは、簡単なCOMETインターフェースを実装していますので、PUSH配信可能になっています。Javascriptのコードを独自に実装することで、Webブラウザへコンポーネントの情報の出力、Webブラウザから情報の入力などが可能です。
    詳細は、Webアダプターについてを参照してください。
  • 周期実行のタスク記述ができるように変更しました。(2015-08-19)これによってeSEATのonEecuteで実行するスクリプト定義をseatmlで行うことができますので、ロボットコントローラの実装をしやすくしています。

開発言語

eSEATは、Python2.7上で開発しています。現在は、OpenRTM-aist-1.1.0-RC3を用いています。
また、下記のパッケージを使用していますので、ソースコードを用いて実行させる場合には、各サイトからダウンロードし、インストール後、実行してください。
必要なパッケージ
  • OpenRTM-aist-1.1.0-RC3(ソースコードパッケージからのインストール)
  • lxml:
  • BeautifulSoup:
    • http://www.crummy.com/software/BeautifulSoup/から Beautiful Soup 4のソースコードをダウンロードして展開します。
    • コマンドプロンプトを起動しset_up.py buildとset_up.py installを行いインストールを完了します。(2015.08現在は、Githubのリポジトリで同時配布していますので、別途インストールする必要はありません)
また、eSEATをWindowsの実行ファイルにするには、下記のパッケージもインストールする必要があります。

使用方法

eSEATの起動オプションは、ほぼSEATと同じです。
python.exe eSEAT.py <seatml file>
とすれば、指定したスクリプトファイルを読み込みコンポーネントが起動します。また、eSEATコンポーネントのネームサーバーへの登録名を変更したい場合には、"-n"オプションを使うと便利です。
python.exe eSEAT.py -n eSEAT1 sample.seatml
上記のように起動させると、sample.seatml の定義をお読み込んだコンポーネントが、eSEAT1という名前で起動します。このオプションを使うことで、複数のeSEATコンポーネントを同じシステムで利用することができます。

ライセンス

OpenHRIに含まれているSEATは、EPL-1.0で配布しておりましたが、eSEATは、MITライセンスでの配布に変更しております。

eSEATのスクリプト

eSEATでは、SEATと同じようにseatmlの拡張しをもったXMLのファイルをスクリプトファイルとして用います。現在のところ、オリジナルのSEATで定義していたタグも使えるようになっており、今まで作成したSEATのスクリプトファイルをそのまま利用することが可能です。(まだ、すべてを確認したわけではありませんが)
eSEAT用のスクリプトファイルで利用可能なタグ、属性に関しては、こちらの
を参照してください。
eSEATスクリプトは、独自のスキーマが定義されたXMLファイルです。そのため、下記のような文書構造になっています。
 <?xml version="1.0" encoding="UTF-8" ?>
 <seatml>
   <general>
     - データポートの定義
     - preload scripts
   </general>
   <state name="st1">
     - ruleの定義
     - GUI部品の定義
   </state>
   <state name="st2">
       ...
       ...
   </state>
      ....
      ....
 </seatml>
eSEATのスクリプトの具体的な記述方法については、以下の例を参考にしてください。

バグ? いえいえ、仕様です

eSEATは、GUIと統合したためにいくつかの制限がある。実は、GUIを定義した時にイベントハンドリングによっては、セグメンテ違反が起こる可能性があります。
これは、TEXTやEntryの場合にデフォルトでキーボード入力によるイベントハンドリングが定義されており、入力ポートからのデータでTEXTやEntryの変更ができるようにしていると、eSEATが強制終了する場合があります。
これは、PythonのTkinterの仕様によるものなので、eSEATでは対処が難しい状況です。対処方法としては、TEXTやEntryを使う場合に、キー入力をなるべく行いわないようにしてください。(ただし、入力ポートからのデータで書き換えなどを行っていない場合は大丈夫のようです)

変更履歴

  • 2014/07/09 MLに公開のアナウンス
  • 2014/07/10 状態遷移時に実行するはずのコマンドが実行されないバグを修正
  • 2014/07/18 TimedXXSeqの型の出力ポート利用時にエラーがでて送信できないバグを修正
  • 2014/07/23 ボタンの色を変更するメソッドの追加とMutex Lockの追加。
  • 2014/07/23 seatml.xsd があるディレクトリをSEAT_ROOTで設定できるように修正
  • 2014/07/23 eSEATバイナリ版でrtc_handleが使えるように修正
  • 2014/07/24 独自データ型の入出力ポート生成時のバグを修正, Label、Buttonの色変更を実装とアクセス方法の変更
  • 2014/07/29 GUI以外のイベントで状態遷移するときのバグを修正
  • 2014/07/30 Mutex Lockを付けたことによるデッドロックのバグを修正
  • 2014/08/07 JuliusRTCでまったく動作していなかったバグの修正
  • 2015/07/24 WebAdaptorの追加
  • 2015/08/17 ruleタグで外部seatmlファイルの包含機能を追加、onExecuteの実装のために<onexec>タグの追加
  • 2015/08/19 eSEATのクラス構造の見直しで、RTMの依存部分の切り離し

資料