ロボット用スクリプトエンジン モジュールマニュアル 1.0 版 九州工業大学 株式会社セック
改版履歴 版数改版日改版内容備考 1.0 2012/02/29 初版作成 -i-
目次 1 総則... 1 1.1. 目的...1 1.2. 適用範囲...1 1.3. 関連文書等...1 1.3.1. 適用文書...1 1.3.2. 関連文書...1 1.3.3. 参考文書...1 1.4. 定義...2 1.4.1. 用語...2 1.4.2. 座標系...2 2 コンポーネント構成... 3 2.1. コンポーネント概要...3 2.2. 動作環境...3 2.3. ハードウェア仕様...4 2.4. 利用ソフトウェア仕様...4 3 コンポーネント仕様... 5 3.1. コンポーネント一覧...5 3.2. データ型一覧...5 3.3. コンポーネント仕様 (SDLENGINE)...5 3.3.1. 基本情報...5 3.3.2. アクティビティ...6 3.3.3. インタフェース仕様...7 4 取扱手順...11 4.1. 環境構築... 11 4.1.1. インストール準備... 11 4.1.2. インストール...13 4.2. 設定 カスタマイズ手順...14 4.3. 起動 終了手順...16 5 制限事項...21 6 付録...22 6.1. メッセージ一覧...22 -ii-
6.1.1. メッセージ一覧 (SDLEngine)...22 6.1.2. メッセージ一覧 (ConsoleIn)...23 6.1.3. メッセージ一覧 (ConsoleIn2)...24 6.1.4. メッセージ一覧 (ConsoleOut)...25 6.2. トラブルシューティング...26 -iii-
表目次表 1-1 関連文書一覧...1 表 1-2 参考文書一覧...1 表 1-3 ロボット用スクリプトエンジン用語一覧...2 表 2-1 動作環境...3 表 2-2 動作に必要なソフトウェア...4 表 2-3 インストールされていることが望ましいソフトウェア...4 表 3-1 コンポーネント一覧...5 表 3-2 SDLEngineコンポーネントプロファイル...5 表 3-3 アクティビティ一覧...6 表 3-4 rtc.conf 設定項目...10 表 4-1 JDKのダウンロードURL... 11 表 4-2 環境変数の設定項目 (JDK 関連 )... 11 表 4-3 OpenRTM-aist-Java 1.0.0-RELEASEのダウンロードURL...12 表 4-4 OpenRTM Eclipse tools 1.0-RELEASEのダウンロードURL...12 表 4-5 ANTのURL...13 表 4-6 環境変数の設定項目 (ANT 関連 )...13 表 4-7 SDLEngineのダウンロードURL...13 表 4-8 rtc.envオブジェクトの主要メソッド...17 表 4-9 rtc.local_componentオブジェクトの主要メソッド...18 図目次図 4-1 SDLEngineコンソール...16 -iv-
1 総則 1.1. 目的 本書は 作業計画モジュールの利用方法について 記述した文書である 1.2. 適用範囲本書は SDLEngine に対して適用する 1.3. 関連文書等本書の適用文書 関連文書 参考文書について記述する 1.3.1. 適用文書なし 1.3.2. 関連文書本書の関連文書を表 1-2に示す 表 1-1 関連文書一覧 No 文書名版数発行元 1 次世代ロボット知能化技術開発プロジェクト施設内生活支援ロボット知能の研究開発作業計画モジュール ( S D L E n g i n e ) マニュアル 2 BeanShell サイト (http://www.beanshell.org) Ver.3.0 - 九州工業大学 Pat Niemeyer 1.3.3. 参考文書 本書の参考文書を表 1-2 に示す 表 1-2 参考文書一覧 No 文書名版数発行元 1 Web OpenRTM aist Web サイト (http://www.openrtm.org/openrtm/ja/content/ openrtm-aist-official-website) - 独立行政法人産業技術総合研究所 -1-
1.4. 定義 1.4.1. 用語 表 1-3 ロボット用スクリプトエンジン用語一覧 No 用語 説明 1 RTM RT ミドルウェア 2 RTC RT コンポーネント 3 アクティビティ RTC のロジック 4 コンフィギュレーション 設定 1.4.2. 座標系 ロボット用スクリプトエンジンモジュールで使用する座標系はない 1.5. ライセンス 本書は クリエイティブ コモンズ表示 2.1 ライセンス (http://creativecommons.org/licenses/by-sa/2.1/jp/) の下に提供される -2-
2 コンポーネント構成 2.1. コンポーネント概要ロボット用スクリプトエンジンモジュールは 様々な RTC と接続して作業計画のアプリケーションを実行するためのモジュールである Java のインタプリタである BeanShell を組み込んでおり Java 及びそのインタプリタであるスクリプトを用いてアプリケーションを記述することができる 2.2. 動作環境 作業対象認識モジュールの動作環境を表 2-1 に記述する 表 2-1 動作環境 Windows Linux Windows XP professional 32bit Windows Vista Business 32bit/64bit Windows 7 Professional/Enterprise 32bit/64bit Ubuntu -3-
2.3. ハードウェア仕様 ロボット用スクリプトエンジンモジュールは 特定のハードウェアに対応するものではない 2.4. 利用ソフトウェア仕様ロボット用スクリプトエンジンモジュールの動作に必要なソフトウェアを表 2-2に記す また 本モジュールでは使用していないが インストールされていることが望ましいソフトウェアを表 2-3に記す 表 2-2 動作に必要なソフトウェア 名称 / バージョン説明参考 URL Java Deveroper Kit (JDK) /1.6.0_23 (32bit 版 ) OpenRTM-aist-Java/ 1.0.0-RELEASE OpenRTM Eclipse tools / 1.0-RELEASE Apache Ant 1.8.2 プログラミング言語 Eclipse の動作に必要 http://java.sun.com/javase/ja/6/download. html RT ミドルウェア本体 (Java) http://www.openrtm.org/openrtm/ja RT コンポーネントを扱う RTCBuilder および RTSystemEditor が組み込まれた Eclipse 統合開発環境 SDLEngine のビルドを行う 環境変数 ANT_HOME を設定し 環境年数 PATH に %ANT_HOME% bin; を追加すること http://www.openrtm.org/openrtm/ja/conte nt/openrtm-eclipse-tools-10-release#toc0 http://ant.apache.org/ 表 2-3 インストールされていることが望ましいソフトウェア 名称 / バージョン説明参考 URL OpenRTM-aist_C++/ 1.0.0-RELEASE Microsoft Visual Studio 2008 Professional Edition RT ミドルウェア本体 (C++/ VC++) C++/VC++ のビルドを行う OpenCV 1.0 画像処理ソフトウェア http://opencv.jp/ http://www.openrtm.org/openrtm/ja http://www.microsoft.com/japan/msdn/vst udio/2008/product/overview.aspx Python-2.6.4 プログラミング言語 http://www.python.jp/ PyYAML-3.0.9 Python の YAML ライブラリです http://pyyaml.org/wiki/pyyaml -4-
3 コンポーネント仕様 3.1. コンポーネント一覧ロボット用スクリプトエンジンモジュールの一覧を表 3-1に記述する 本モジュールは 作業計画を実行させる他のRTCとの接続を前提としている 表 3-1 コンポーネント一覧 No. RTC 名説明 1 SDLEngine ロボット用スクリプトエンジン 3.2. データ型一覧 ロボット用スクリプトエンジンモジュール固有のデータ型は存在しない 3.3. コンポーネント仕様 (SDLEngine) 3.3.1. 基本情報 表 3-2 SDLEngine コンポーネントプロファイル 種別提供元動作 OS RT ミドルウェア開発言語依存ライブラリ実行周期 RTC 九州工業大学 Windows(XP, Vista,7) Ubuntu OpenRTM-aist-1.0.0 (Windows) OpenRTM-aist-1.0.0 (Linux) Java (OpenRTM-aist-1.0.0) なし 4.0(Hz) -5-
3.3.2. アクティビティ 表 3-3 アクティビティ一覧 No. アクション関数名 処理概要 1 oninitialize 以下の処理を行う インポートの設定アウトポートの設定プロバイダーポートの設定コンシューマポートの設定サービスポートの設定 2 onactivated - 3 onexecute 以下の処理を行う インポートよりデータを取得するアウトポートへデータを出力する コンシューマポートを実行する 4 ondeactivated - 5 onaborting - 6 onreset 以下の処理を行う アウトポートをクリアする コンシューマポートをクリアする 7 onerror - 8 onfinalize - 9 onstateupdate - 10 onratechanged - 11 onstartup - 12 onshutdown - -6-
3.3.3. インタフェース仕様 SDLEngine は 様々な RTC との接続を前提としており インタフェースは buld.xml での定義に依る なお 定義に使用する <arg> タグの value 属性は rtc-template のコマンドライン引数となる (1) データポート bulid.xml の gen-rtc-sdl-engine ターゲット (<target name="gen-rtc-sdl-engine">) に <arg> タグの value 属性の値として 以下を定義する インポート :-- inport =[ ポート名 ]:[ データ型 ] アウトポート :-- outport =[ ポート名 ]:[ データ型 ] 独自データ型のデータポートを定義する場合 IDL ファイル ( ファイル名 :[ 当該データ型 ].idl) を SDLEngine/main/idl に配置する リスト 3-1にデータポートの定義例を示す リスト 3-1 データポート定義例 <target name="gen-rtc-sdl-engine" description="generate SDL Engine RTC code."> <!-- ポート名 in データ型 RTC::TImedLong のインポート --> <arg value="--inport=in:rtc::timedlong" /> <!-- ポート名 out データ型 RTC::TImedLong のアウトポート --> <arg value="--outport=out:rtc::timedlong" /> <!-- 独自データ型 SDLEngine/main/idl/MyData.idl を定義 --> <!-- ポート名 mydatain データ型 jp::ac::kyutech::srp::demo::mydata のインポート --> <arg value="--inport=mydatain:jp::ac::kyutech::srp::demo::mydata" /> <!-- ポート名 mydataout データ型 jp::ac::kyutech::srp::demo::mydata のアウトポート --> <arg value="--outport=mydataout:jp::ac::kyutech::srp::demo::mydata" /> </target> -7-
(2) サービスポートサービスポートに対応する IDL ファイルを用意し bulid.xml の gen-rtc-sdl-engine ターゲット (<target name="gen-rtc-sdl-engine">) に <arg> タグの value 属性の値として 以下を定義する プロバイダーポート --service=[ ポート名 ]:[ インスタンス名 ]:[ サービス型 ] --service-idl=[idl ファイル名 ] --idl-include=[idl ファイルパス ] コンシューマポート --consumer=[ ポート名 ]:[ インスタンス名 ]:[ サービス型 ] --consumer-idl=[idl ファイル名 ] --idl-include=[idl ファイルパス ] リスト 3-1 にサービスポートの定義例を示す リスト 3-2 サービスポート定義例 <target name="gen-rtc-sdl-engine" description="generate SDL Engine RTC code."> <!-- ポート名 MyServiceConsumer インスタンス名 myservice サービス型 myservice:jp::ac::kyutech::srp::demo::myservice のコンシューマポート --> <arg value="--consumer=myserviceconsumer:myservice:jp::ac::kyutech::srp::demo::myservice" /> <!-- コンシューマポートの IDL は SDLEngine/main/idl/MyService.idl --> <arg value="--consumer-idl=${main.idl.dir}/myservice.idl" /> <!-- ポート名 SRResultListenerProvider インスタンス名 RecognitionResult サービス型 RecognitionResult:SRResultListener のサービスポート --> <arg value="--service=srresultlistenerprovider:recognitionresult:srresultlistener" /> <!-- サービスポートの IDL は SDLEngine/main/idl/SRResultListener.idl --> <arg value="--service-idl=${main.idl.dir}/srresultlistener.idl" /> <!-- IDL のファイルパスは SDLEngine/main/idl --> <arg value="--idl-include=${main.idl.dir}" /> </target> -8-
(3) 設定ファイル SDLEngine 独自の設定ファイルはない コンポーネントマネージャの設定ファイルである rtc.confのみを使用しており SDLEngineフォルダにリスト 3-3のrtc.confが用意されている 本設定項目について 表 3-4に記載する その他の設定項目 詳細については OpenRTM-aistのマニュアルのrtc.conf 設定項目一覧を参照のこと リスト 3-3 rtc.conf corba.nameservers: localhost:5005 corba.endpoint: 127.0.0.1: naming.formats: %n.rtc logger.enable: YES logger.log_level: PARANOID exec_cxt.periodic.rate: 10.0-9-
表 3-4 rtc.conf 設定項目 No. パラメタ名説明 1 corba.nameservers ネーミングサーバを指定する 指定フォーマット :host_name:port_number デフォルトポート :2809(omniORB のデフォルト ) 2 corba.endpoint NIC が複数あるとき ORB をどちらで listen させるかを指定する 指定フォーマット :IP_Addr:Port(Port を指定しない場合でも : が必要 ) 3 naming.formats ネームサーバに登録する際のフォーマットを指定する 指定子 : %n RTC のインスタンス名 %t RTC のタイプ名 %m RTC のモジュール名 %v RTC のバージョン %V RTC のベンダ名 %c RTC のカテゴリ名 %h ホスト名 %M マネージャ名 %p プロセス ID 指定フォーマット :<name>.<kind>/<name>.<kind>/... デフォルト値 : %h.host_cxt/%n.mgr 4 logger.enable ログ出力の有効 (Yes)/ 無効 (No) を指定する 5 logger.log_level ログレベルを指定する SILENT( 何も出力しない ), ERROR, WARN, NORMAL, INFO, DEBUG, TRACE, VERBOSE, PARANOID( 全出力 ) 6 exec_cxt.periodic.rate 実行コンテキストの周波数 [Hz] を 0~1000000. で指定する デフォルト値 :1000.0-10-
4 取扱手順 4.1. 環境構築 4.1.1. インストール準備ロボット用スクリプトエンジンモジュールを動作させるために 以下のソフトウェアパッケージをインストールする Java Deveroper Kit JDK 1.6.0_23 (32bit 版 ) OpenRTM-aist-Java 1.0.0-RELEASE OpenRTM Eclipse tools 1.0-RELEASE Apache Ant 1.8.2 (1) Java Deveroper Kit (JDK )1.6.0_23 (32bit 版 ) (a) インストール JDK ダウンロードページにアクセスし JDK ダウンロード をクリックする Java SE Development Kit 6u23 ブロックにある Oracle Binary Code License Agreement for Java SE と書かれたリンクをクリックするとライセンスが表示される 内容を確認し 同意できる場合 Accept License Agreement を選択し jdk-6u23-windows-i586.exe をクリックして ダウンロード 実行する 表 4-1 JDK のダウンロード URL ダウンロードページ http://www.oracle.com/technetwork/java/javasebusiness/downloads/jav a-archive-downloads-javase6-419409.html#jdk-6u23-oth-jpr (b) 環境変数の設定 インストール後 表 4-2 にある環境変数を設定する 表 4-2 環境変数の設定項目 (JDK 関連 ) JAVA_HOME PATH 環境変数 JDK のインストール先 %PATH%;%JAVA_HOME% bin; 設定内容 -11-
(2) OpenRTM-aist-Java 1.0.0-RELEASE (a) インストール表 4-3のURLよりインストーラをダウンロードし 実行する インストーラを実行するとウィザードが起動するので ウィザードに従って インストールする 表 4-3 OpenRTM-aist-Java 1.0.0-RELEASE のダウンロード URL ダウンロードページ ダウンロードファイル http://www.openrtm.org/openrtm/ja/node/933 http://www.openrtm.org/pub/windows/openrtm-aist/java/openrtmaist-java-1.0.0.msi (3) OpenRTM Eclipse tools 1.0-RELEASE (a) インストール表 4-4のURLよりファイルをダウンロードし 展開する 展開するとeclipsというディレクトリができる 表 4-4 OpenRTM Eclipse tools 1.0-RELEASE のダウンロード URL ダウンロードページ ダウンロードファイル http://www.openrtm.org/openrtm/ja/content/openrtm-eclipse-tools-10-r elease#toc0 http://www.openrtm.org/pub/openrtm-aist/tools/1.0.0/eclipse342_rtm tools100release_win32_ja.zip (4) Apache Ant 1.8.2 (a) インストールの URL にアクセスし 左側メニューの中の Download ブロックの中にある Binary Distributions と書かれたリンクをクリックする -12-
ページ中段付近の Current Release of Ant と書かれたブロックにある apache-ant-1.8.0-bin.zip と書かれたリンクをクリックし ダウンロードを行う ダウンロードしたファイルを展開する 展開すると apache ant-1.8.2 というディレクトリができる 表 4-5 ANT の URL Apache ANT http://ant.apache.org/ (b) 環境変数の設定インストール後 表 4-2にある環境変数を設定する 表 4-6 環境変数の設定項目 (ANT 関連 ) ANT_HOME PATH 環境変数 ANT のインストール先 %PATH%;%ANT_HOME% bin; 設定内容 4.1.2. インストール (1) インストール表 4-7のRTC 再利用センターへアクセスし 登録されているzip ファイルをダウンロードし 以下の手順でeclipse にプロジェクトをインポートする 1. SDLEngine.3.0.zip を展開する 2. eclipse を起動する 3. Java パースペクティブにする 4. ファイルメニューの 新規 から Java プロジェクト を選択し プロジェクト名を SRPCommon として作成する 5. ファイルメニューから インポート を選択し 一般 の ファイル システム を選ぶ 6. 次に進み 参照 で SDLEngine.3.0 の中の SRPCommon を選択する 7. プロジェクトをワークスペースにコピー を選択し その後 終了 を選択する 8. SDLEngine も 4.~7. の手順でインポートする 9. SDLEngine 以下に lib と rtc/java のディレクトリを作成する 表 4-7 SDLEngine のダウンロード URL ダウンロードページ http://www.openrtp.jp/reuse_web/comp_detail.php -13-
(2) ビルド Eclipse あるいは Ant を用いて ビルドを実行する (a) Eclipseによるビルド Eclipse 上でビルドを実行する 自動的にビルド が有効になっていれば 特に行うことはない ビルド後に問題が発生していなければ ビルドは完了である (b) Antによるビルドビルドファイルである SDLEngine/build.xml 中の compile ターゲットを起動する 4.2. 設定 カスタマイズ手順 (1) 設定 3.3.3(3) 設定ファイル を参照のこと (2) カスタマイズ build.xml にて インタフェースのカスタマイズおよび SDLEngine と同じ VM 上で動作するコンポーネントの作成等を実施することができる インタフェースのカスタマイズに関しては 3.3.3 インタフェース仕様 を参照のこと コンポーネントを作成する場合は <target> を追加し build.xmlのrtc.all ターゲットに追加したターゲットを追加する その後 Ant の clean ターゲットと rtc.compile ターゲットを起動する ( リスト 4-3) $ ant clean rtc.compileリスト 4-1にbuild.xmlの定義例を リスト 4-2にbuild.xmlの例を記載する リスト 4-1 追加 RTC 定義例 <target name="gen-rtc-myservice-blank-provider" description="myservice Blank Provider."> <java classname="jp.go.aist.rtm.rtctemplate.cuirtctemplate" fork="true" failonerror="true"> <classpath refid="libs.path" /> <classpath refid="libs.rtctemplate.sdl.path" /> <!-- RTC のソース言語 (JAVA 固定 ) --> <arg value="--backend=java" /> <!-- RTC のソースファイル出力先 --> <arg value="--output=${rtc.java.dir}" /> <!-- RTC 名称 --> <arg value="--module-name=myserviceblankprovider" /> <!-- RTC の説明 --> <arg value="--module-desc='myservice Blank Provider'" /> <!-- RTC の開発元 --> <arg value="--module-vender='kyushu Institute of Technology'" /> <!-- RTC のカテゴリー --> -14-
<arg value="--module-category=example" /> <!-- RTC のコンポーネントタイプ --> <arg value="--module-comp-type=dataflowcomponent" /> <!-- RTC のアクティビティタイプ --> <arg value="--module-act-type=sporadic" /> <!-- RTC の最大インスタンス数 --> <arg value="--module-max-inst=1" /> <!-- ポート名 MyServiceBlankProvider インスタンス名 myservice サービス型 myservice:jp::ac::kyutech::srp::demo::myservice のサービスポート --> <arg value="--service=myserviceblankprovider:myservice:jp::ac::kyutech::srp::demo::mys ervice" /> <!-- IDL は SDLEngine/main/idl/MyService.idl --> <arg value="--service-idl=${main.idl.dir}/myservice.idl" /> </java> </target> リスト 4-2 build.xml 定義例 <target name="rtc.all" description="generate RTComponents code."> <!-- Append rtc generation target --> <antcall target="gen-rtc-sdl-engine" /> <antcall target="gen-rtc-myservice-blank-provider" /> <!-- Append rtc generation target --> </target> リスト 4-3 Ant の clean ターゲットと rtc.compile ターゲットの起動 $ ant clean rtc.compile -15-
4.3. 起動 終了手順ロボット用スクリプトエンジンモジュールの起動 終了方法について記述する (1) 起動あらかじめ CORBA のネーミングサービスを起動しておく SDLEngine/rtc.conf のネームサーバの指定を確認したうえで 以下のいずれかの方法で起動する SDLEngine/build.xml 中の run-console ターゲットを起動する Eclipse より jp.ac.kyutech.srp.console クラスを起動する Ant を利用した bat ファイル (SDLEngine/doc/SDLEngine.bat) を起動する正常に起動すると SDLEngine のコンソールウィンドウが表示される 図 4-1 SDLEngine コンソール (2) 終了 SDLEngineコンソール上でリスト 4-4を入力するか コンソールウィンドウの終了ボタン ( ) を押下する リスト 4-4 SDLEngine の終了 bsh% exit(); -16-
(3) SDLEngineスクリプト SDLEngine スクリプトは BeanShell を基盤とする 主に以下の機能を有する Java1.4 に準拠したインタプリタ 既存の Java クラスのインスタンス化と実行 BeanShell で用意された関数群の利用 (a) RTC 操作オブジェクト RTC を操作するにあたって重要となるオブジェクトについて説明する 1 rtc.envオブジェクト RTCオブジェクト群を操作するために 必要な情報を保持し 便利なメソッドを提供する Bsh Objectである 表 4-8に主なメソッドや変数を リスト 4-5に使用例を記載する 表 4-8 rtc.envオブジェクトの主要メソッド No メソッド / 変数説明 1 コンストラクタ ネーミングサーバのホスト名とポート番号を引数で指定するこ と 2 get_names() ネーミングサーバに接続されている全オブジェクト名を取得す る 3 get_handles() ネーミングサーバに接続されているオブジェクトのハンドルを 取得する connect() メソッドや handles 変数を使用する前に呼 び出すこと 4 connect() 引数で指定された 2 つのポートを接続する 5 handles 変数 RTC の名前をキーに rtc.handle オブジェクトを保持する RtcLink RTSystemEditor などで表示されるコンポーネントの インスタンス名を名前として指定すること リスト 4-5 rtc.env 使用例 // ネーミングサーバ指定 env = rtc.env("localhost", 5005); // SDLEngine をローカルオブジェクトとして起動 sdlengine = rtc.local_component("sdlengine", "SDLEngine"); // ネーミングサーバに登録されているオブジェクトのハンドラを取得 handles = env.get_handles(); // SDLEngine を Activate env.handles{"sdlengine0.rtc"}.activate(); 2 rtc. local_componentオブジェクト SDLEngine と同じJVM 上 ( ローカル ) で動作するRTC オブジェクトを操作するために ラッピングするBsh Object である RTC オブジェクトと一対一となる 表 4-9 rtc.local_componentオブジェクトの主要メソッドに主なメソッドや変数を リスト 4-6に使 -17-
用例を記載する 表 4-9 rtc.local_component オブジェクトの主要メソッド No メソッド / 変数説明 1 コンストラクタ RTC の名前とクラス名を引数で指定すること 2 get_ports() ポートオブジェクトのリストを取得する 3 local_ports 変数 ポートを操作するためのオブジェクトを 名前をキーにして保持 する これにより 各ポートに対応する RTC の Java メソッド を SDLEngine スクリプトから直接起動できる リスト 4-6 rtc.local_component 使用例 // ネーミングサーバ指定 env = rtc.env("localhost", 5005); // SDLEngine をローカルオブジェクトとして起動 sdlengine = rtc.local_component("sdlengine", "SDLEngine"); // ネーミングサーバに登録されているオブジェクトのハンドラを取得 handles = env.get_handles(); // vehicleservice ポートに対応する RTC オブジェクトの setservo メソッドを起動 sdlengine.local_ports{"vehicleservice"}.setservo(true); (b) サンプル 1 サービスポートの操作リスト 4-7に以下の処理を行うスクリプトの例を記載する 1.RT コンポーネントを 2 つ作成する 2.SDLEngine のから MyServiceBlankProvider に対して echo("hello world") のメッセージを送信する 3.MyServiceBlankProvider がコンソールに受信した文字を出力する Method: echo invoked: [hello world] リスト 4-7 サービスポート利用例 // ネーミングサーバ指定 env = rtc.env("localhost", 5005); // MyServiceBlankProvider をローカルオブジェクトとして起動 myserviceprovider = rtc.local_component("myserviceblankprovider", "MyServiceBlankProvider"); // SDLEngine をローカルオブジェクトとして起動 sdlengine = rtc.local_component("sdlengine", "SDLEngine"); // ネーミングサーバに登録されているオブジェクトのハンドラを取得 handles = env.get_handles(); // myserviceblankprovider のポートと SDLEngine のポートを接続 env.connect(env.handles{"myserviceblankprovider0.rtc"}.ports {"MyServiceBlankProvider0.MyServiceBlankProvider"}, -18-
env.handles{"sdlengine0.rtc"}.ports{"sdlengine0.myserviceconsumer"}); // MyServiceBlankProvider を Activate env.handles{"myserviceblankprovider0.rtc"}.activate(); // SDLEngine を Activate env.handles{"sdlengine0.rtc"}.activate(); // myserviceprovider に対し myservice に対応するリスナーを設定 myserviceprovider.local_ports{"myservice"}.addlistener (new jp.ac.kyutech.srp.scripting.providerlistener() { invoke(name, args) { print("method:" + name + "invoked:" + java.util.arrays.aslist(args)); } }); // SDLEngine の myservie にある echo( hello world ) を起動 print(sdlengine.local_ports{"myservice"}.echo("hello world")); 2 データポートの操作リスト 4-8に以下の処理を行うスクリプトの例をリスト 4-9からリスト 4-12に実行例を記載する 1.RT コンポーネントを 2 つ作成する 2.SDLConsoleIn にて コンソールから受け付けた入力内容を SDLEngine に対して 送信する 3.SDLEngine が受信した内容をコンソールに出力する リスト 4-8 データポート利用例 // ネーミングサーバ指定 env = rtc.env("localhost", 5005); // SDLEngine をローカルオブジェクトとして起動 sdlengine = rtc.local_component("sdlengine", "SDLEngine"); // コンソールから入力を受け付けるローカルコンポーネントを起動 sdlconsolein = rtc.local_component("sdlconsolein", "SDLConsoleIn"); // ネーミングサーバに登録されているオブジェクトのハンドラを取得 handles = env.get_handles(); // SDLEngine の in ポートと SDLConsoleIn の out ポートを接続 env.connect(env.handles{"sdlengine0.rtc"}.ports{"sdlengine0.in"}, env.handles{"sdlconsolein0.rtc"}.ports{"sdlconsolein0.out"}); // SDLEngine を Activate env.handles{"sdlengine0.rtc"}.activate(); // SDLConsoleIn を Activate env.handles{"sdlconsolein0.rtc"}.activate(); // sdlengine の in ポートに対応するリスナーを設定 sdlengine.local_ports{"sdlengine0.in"}.addlistener (new jp.ac.kyutech.srp.scripting.inportlistener() { datareceived(event) { value = event.getvalue(); print("received:"+value.data+"("+value.tm.sec+","+value.tm.nsec+")"); } }); -19-
リスト 4-9 実行例 1( 入力例 ) sdlconsolein.local_ports{" SDLConsoleIn0.out"}.put(1); リスト 4-10 実行例 1( 表示例 ) Received: 1 (1295249314, 3400000000) リスト 4-11 実行例 2( 入力例 ) // 時刻指定をして送信 sdlconsolein.local_ports{"sdlconsolein0.out"}.put(1, new RTC.Time(1234,0)); リスト 4-12 実行例 2( 表示例 ) Received: 1 (1234, 0) 3 既存のRTCを利用した操作リスト 4-8では ローカルのコンポーネントを利用したが サンプルとして提供されている ConsoleInと接続し 動作させることも可能である 先にConsoleInを起動しておき リスト 4-13のスクリプトを実行する ConsoleInのコンソール画面より数値を入力するとSDLEngine コンソール上に入力された数値が表示される リスト 4-13 データポート利用例 // ネーミングサーバ指定 env = rtc.env("localhost", 5005); // SDLEngine をローカルオブジェクトとして起動 sdlengine = rtc.local_component("sdlengine", "SDLEngine"); // コンソールから入力を受け付けるローカルコンポーネントを起動 sdlconsolein = rtc.local_component("sdlconsolein", "SDLConsoleIn"); // ネーミングサーバに登録されているオブジェクトのハンドラを取得 handles = env.get_handles(); // SDLEngine の in ポートと ConsoleIn の out ポートを接続 env.connect(env.handles{"sdlengine0.rtc"}.ports{"sdlengine0.in"}, env.handles{"consolein0.rtc"}.ports{"consolein0.out"}); // SDLEngine を Activate env.handles{"sdlengine0.rtc"}.activate(); // ConsoleIn を Activate env.handles{"consolein0.rtc"}.activate(); // sdlengine の in ポートに対応するリスナーを設定 sdlengine.local_ports{"sdlengine0.in"}.addlistener (new jp.ac.kyutech.srp.scripting.inportlistener() { datareceived(event) { value = event.getvalue(); print("received:"+value.data); } }); -20-
5 制限事項特になし -21-
6 付録 6.1. メッセージ一覧 6.1.1. メッセージ一覧 (SDLEngine) No. レベル メッセージ 説明 1 info Initialized: 初期化処理を行った際に出力する 2 trace Execute inportsupport: returncode=[ 戻り値 ] 3 error Failure inport onexecute: トレース指示がある場合のみ インポートよりデータを取得した際に出力する インポートからのデータ取得でエラーが発生した場合 出力する 4 trace Execute outportsupport: returncode=[ 戻り値 ] 5 error Failure outport onexecute: トレース指示がある場合のみ アウトポートへデータを出力した際に出力する アウトポートへのデータ出力でエラーが発生した場合 出力する 6 trace Execute consumersupport: returncode=[ 戻り値 ] 7 error Failure consumer onexecute: トレース指示がある場合のみ コンシューマポートを実行した際に出力する コンシューマポートの実行でエラーが発生した場合 出力する 8 warn ReturnCode is null: コンシューマポートの実行結果が NULL の場合 出力する 9 info Reset the outportsupport: アウトポートをリセットした際に出力する 10 info Reset the consumersupport: コンシューマポートをリセットした際に出力する -22-
6.1.2. メッセージ一覧 (ConsoleIn) No. レベルメッセージ説明 1 info Initialized: 初期化処理を行った際に出力する 2 trace Execute inportsupport: returncode=[ 戻り値 ] 3 error Failure inport onexecute: トレース指示がある場合のみ インポートよりデータを取得した際に出力する インポートからのデータ取得でエラーが発生した場合 出力する 4 trace Execute outportsupport: returncode=[ 戻り値 ] 5 error Failure outport onexecute: トレース指示がある場合のみ アウトポートへデータを出力した際に出力する アウトポートへのデータ出力でエラーが発生した場合 出力する 6 trace Execute consumersupport: returncode=[ 戻り値 ] 7 error Failure consumer onexecute: トレース指示がある場合のみ コンシューマポートを実行した際に出力する コンシューマポートの実行でエラーが発生した場合 出力する 8 warn ReturnCode is null: コンシューマポートの実行結果が NULL の場合 出力する 9 info Reset the outportsupport: アウトポートをリセットした際に出力する 10 info Reset the consumersupport: コンシューマポートをリセットした際に出力する -23-
6.1.3. メッセージ一覧 (ConsoleIn2) No. レベルメッセージ説明 1 info Initialized: 初期化処理を行った際に出力する 2 trace Execute inportsupport: returncode=[ 戻り値 ] 3 error Failure inport onexecute: トレース指示がある場合のみ インポートよりデータを取得した際に出力する インポートからのデータ取得でエラーが発生した場合 出力する 4 trace Execute outportsupport: returncode=[ 戻り値 ] 5 error Failure outport onexecute: トレース指示がある場合のみ アウトポートへデータを出力した際に出力する アウトポートへのデータ出力でエラーが発生した場合 出力する 6 trace Execute consumersupport: returncode=[ 戻り値 ] 7 error Failure consumer onexecute: トレース指示がある場合のみ コンシューマポートを実行した際に出力する コンシューマポートの実行でエラーが発生した場合 出力する 8 warn ReturnCode is null: コンシューマポートの実行結果が NULL の場合 出力する 9 info Reset the outportsupport: アウトポートをリセットした際に出力する 10 info Reset the consumersupport: コンシューマポートをリセットした際に出力する -24-
6.1.4. メッセージ一覧 (ConsoleOut) No. レベルメッセージ説明 1 info Initialized: 初期化処理を行った際に出力する 2 trace Execute inportsupport: returncode=[ 戻り値 ] 3 error Failure inport onexecute: トレース指示がある場合のみ インポートよりデータを取得した際に出力する インポートからのデータ取得でエラーが発生した場合 出力する -25-
6.2. トラブルシューティング (1) ビルドエラー以下を確認し 誤りがあった場合 正しく設定する コンパイラー準拠レベルが 1.5 に設定されているか JAVA_HOME にインストールされている JDK が正しく設定されているか JAVA_HOME/bin にパスが設定されているか SDLEngine/build.xml 中の clean ターゲットを実行してから再度ビルドしてみる (2) 起動エラー以下を確認し 誤りがあった場合 正しく設定する JAVA_HOME にインストールされている JDK が正しく設定されているか JAVA_HOME/bin にパスが設定されているか Eclipse のデフォルト JavaVM が JDK になっているか -26-