標準ではない実行コンテキストでの実行

4 posts / 0 new
Last post
11t0033
Offline
Last seen: 12 years 6 months ago
Joined: 2011-08-09 17:47
標準ではない実行コンテキストでの実行

法政大学 米長慎介と申します。

現在、Javaで作成したRTCをOpenHRPが提供する実行コンテキストである、SynchExtTriggerECで実行しようと試みているのですが、コンポーネントが実行コンテキストを見つけることが出来ず、起動ができない状況が続いています。お力を貸していただけないでしょうか。質問は複数ですが、どれか1つの解答でも助かります。

rtc.confは以下の内容となっています。

corba.nameservers: localhost
naming.formats: %n.rtc
exec_cxt.periodic.type: SynchExtTriggerEC

この状況でRTCを実行すると、ログファイルに以下のような結果が出力され、コンポーネントの生成に失敗してしまいます。

Oct 23 23:15:26 Manager ERROR    : Factory not found: SynchExtTriggerEC
Oct 23 23:15:26 Manager TRACE    : RTC initialization failed:
Oct 23 23:15:26 RTObject_impl TRACE    : RTObject_impl.exit()

とはいっても、現在OpenRTM-aistが対応する標準の実行コンテキストは PeriodicExecutionContextと ExtTrigExecutionContextの2つだけなので、存在するはずのないSynchExtTriggerECを指定すれば、対応できないエラーが出て当然だと感じました。

しかし、他のOpenHRPのサンプルは、rtc.confに特別な記述を行ったり、ソース内にSynchExtTriggerECに関わるオブジェクトを保持している様子がないにも関わらず、当たり前のように起動することができているようです。また、困っている人もいないようです。

サンプルのコンポーネントと自分のコンポーネントの違いは、プログラミング言語が違うということです。

しかし、言語が違うとしても、rtc.confやソース内で特別なことをしていないことを考えると、C言語だから標準で対応していないSynchExtTriggerECを当たり前のように利用できるというのは自分の中で納得することができません。

また、他の方が作成したオリジナルの実行コンテキスト(.dll形式のファイル)をインターネットから取得し、ローカルの任意の場所に配置した後、SynchExtTriggerECを当たり前のように呼び出していたコンポーネントにその実行コンテキストを指定したところ、上記と同じエラーがログファイルに出力されました。ということは、どこか特定の場所から実行コンテキストを探しているということになります。

以上の結果から、私はJava製のコンポーネントも、C言語製のコンポーネントも、同じようにある特定の場所に登録、または格納されたSynchExtTriggerECを参照しているが、その実行コンテキストがJava製のコンポーネントには対応していないためにうまく動作しないのではないかと考えています。

そこで質問があります。

コンポーネント起動時、実行コンテキストを検索する場所
コンポーネントを起動する際(C言語なら○○○Comp.exe, Javaなら○○○Comp.classにコンフィグファイルを引数に渡して起動する際)、コンフィグファイルで指定された実行コンテキストが標準のものではない場合、どこを探してくれるのでしょうか。

実行コンテキストの実体
実行コンテキストは、コンポーネントにスレッドを割り当て管理するようなものだと思っています。この実行コンテキストは、CORBAサーバーのどこかに登録され、複数のコンポーネントを管理しているのでしょうか。それとも、RTCが登録されるたびに実行コンテキストのローダブルモジュールが読み込まれ、各コンポーネントと1対1の関係になっているのでしょうか。

実行コンテキストの互換性
実行コンテキストはどのプログラミング言語もローダブルモジュールで提供されているのでしょうか。また、実行コンテキストはどのプログラミング言語でも共通して利用することができるのでしょうか。

よろしくお願いします。また上記の質問の他にも、(OpenRTMのフォーラムとしては不適切かもしれませんが…)OpenHRPで利用するコンポーネントをC言語で作成する際に通常のOpenRTMで利用するコンポーネントの作成方法と異なる部分や、SynchExtTriggerECの実体など、関連する情報を知っていましたら教えていただけると幸いです。

Japanese
fsi-katami
Offline
Last seen: 6 years 1 month ago
Joined: 2010-08-02 13:37
[openrtm-users 02296] 標準ではない実行コンテキストでの実行

米長さま

産総研 片見と申します。

Java 版では rtc.conf の設定は以下のように行います。
exec_cxt.periodic.type:jp.go.aist.rtm.RTC.executionContext.OpenHRPExecutionContext

# リフレクションを使ってインスタンスを生成しているため、
# このような指定となっています。

コンポーネント起動時、実行コンテキストを検索する範囲ですが、
これはRTMが起動時に登録される実行コンテキストから検索されます。
logger.log_level:TRACE
で設定すると以下のようなログが記述されます。
Manager TRACE : Manager.initExecContext()
Manager TRACE : Manager.registerECFactory(jp.go.aist.rtm.RTC.executionContext.PeriodicExecutionContext)
Manager TRACE : Manager.registerECFactory(jp.go.aist.rtm.RTC.executionContext.ExtTrigExecutionContext)
Manager TRACE : Manager.registerECFactory(jp.go.aist.rtm.RTC.executionContext.OpenHRPExecutionContext)
この registerECFactory で登録される実行コンテキストから検索されます。

実行コンテキストを、
manager.modules.preload で
ロードすることは可能です。
実行コンテキストにクラスを準備します。
実行コンテキストにクラスには、registerModule() を準備して、
登録する実行コンテキストのクラス名を引数にして registerECFactory をコールします。
# RTM はロード後に
# ロードしたモジュールの registerModule() という method をコールする仕組みになっています。

例)

import jp.go.aist.rtm.RTC.Manager;
import org.omg.CORBA.SystemException;

public class xxxxxxExecutionContext
extends PeriodicExecutionContext implements Runnable{

public xxxxxxExecutionContext() {
super();
}

public int svc() {
return 0;
}

public void registerModule() {
final Manager manager = Manager.instance();
manager.registerECFactory("xxxxxxExecutionContext");
}

}

# 後で、サンプルを送付いたしますので、
# しばらくお待ちください。

よろしくお願いいたします。

On Mon, 24 Oct 2011 00:25:49 +0900 (JST)
shinsuke79fake@gmail.com wrote:

> 法政大学 米長慎介と申します。
> 現在、Javaで作成したRTCをOpenHRPが提供する実行コンテキストである、SynchExtTriggerECで実行しようと試みているのですが、コンポーネントが実行コンテキストを見つけることが出来ず、起動ができない状況が続いています。お力を貸していただけないでしょうか。
> rtc.confは以下の内容となっています。
> >corba.nameservers: localhostnaming.formats: %n.rtcexec_cxt.periodic.type:
> >SynchExtTriggerEC
> この状況でRTCを実行すると、ログファイルに以下のような結果が出力され、コンポーネントの生成に失敗してしまいます。
> >Oct 23 23:15:26 Manager ERROR ? ?: Factory not found: SynchExtTriggerEC
> >Oct 23 23:15:26 Manager TRACE ? ?: RTC initialization failed:
> >Oct 23 23:15:26 RTObject_impl TRACE ? ?: RTObject_impl.exit()
> とはいっても、現在OpenRTM-aistが対応する標準の実行コンテキストは?PeriodicExecutionContextと
> ExtTrigExecutionContextの2つだけなので、存在するはずのないSynchExtTriggerECを指定すれば、対応できないエラーが出て当然だと感じました。
> しかし、他のOpenHRPのサンプルは、rtc.confに特別な記述を行ったり、ソース内にSynchExtTriggerECに関わるオブジェクトを保持している様子がないにも関わらず、当たり前のように起動することができているようです。また、困っている人もいないようです。
> サンプルのコンポーネントと自分のコンポーネントの違いは、プログラミング言語が違うということです。
> しかし、言語が違うとしても、rtc.confやソース内で特別なことをしていないことを考えると、C言語だから標準で対応していないSynchExtTriggerECを当たり前のように利用できるというのは自分の中で納得することができません。
> そこで質問が2つあります。
> *コンポーネント起動時、実行コンテキストを検索する範囲*
> コンポーネントを起動する際(C言語なら○○○Comp.exe,
> Javaなら○○○Comp.classにコンフィグファイルを引数に渡して起動する際)、コンフィグファイルで指定された実行コンテキストが標準のものではない場合、どこを探してくれるのでしょうか。
> *実行コンテキストの互換性*
> ある個人のホームページで、オリジナルの実行コンテキストを作成している方がいました。その方は実行コンテキストをローダブルモジュールとして作成し、その実行コンテキストを実行するコンポーネントのコンフィグファイルに以下の文を追加していました。
> >manager.modules.preload: 実行コンテキスト名.dll
> 実行コンテキストはどのプログラミング言語もローダブルモジュールで提供されているのでしょうか。また、実行コンテキストはどのプログラミング言語でも共通して利用することができるのでしょうか。
> よろしくお願いします。また上記の質問の他にも、(OpenRTMのフォーラムとしては不適切かもしれませんが…)OpenHRPで利用するコンポーネントをC言語で作成する際に通常のOpenRTMで利用するコンポーネントの作成方法と異なる部分など、関連する情報を知っていましたら教えていただけると幸いです。
>
> _______________________________________________
> openrtm-users mailing list
> openrtm-users@openrtm.org
> http://www.openrtm.org/mailman/listinfo/openrtm-users

--

独立行政法人産業技術総合研究所
知能システム研究部門 統合知能研究グループ
〒305-8568 茨城県つくば市梅園1-1-1 中央第2
片見 剛人

_______________________________________________
openrtm-users mailing list
openrtm-users@openrtm.org
http://www.openrtm.org/mailman/listinfo/openrtm-users

fsi-katami
Offline
Last seen: 6 years 1 month ago
Joined: 2010-08-02 13:37
[openrtm-users 02297] 標準ではない実行コンテキストでの実行

米長さま

産総研 片見です。

実行コンテキストクラスのサンプル(テンプレート)を送付します。

添付ファイルは TRACEレベルのログを出力するだけのものです。
必要は処理は、svc() 内に記述してください。

また、rtc.conf では以下の記述が追加になります。

manager.modules.preload:SampleExecutionContext
exec_cxt.periodic.type:SampleExecutionContext

よろしくお願いいたします。

On Mon, 24 Oct 2011 12:14:45 +0900
katami wrote:

> 米長さま
>
> 産総研 片見と申します。
>
> Java 版では rtc.conf の設定は以下のように行います。
> exec_cxt.periodic.type:jp.go.aist.rtm.RTC.executionContext.OpenHRPExecutionContext
>
> # リフレクションを使ってインスタンスを生成しているため、
> # このような指定となっています。
>
> コンポーネント起動時、実行コンテキストを検索する範囲ですが、
> これはRTMが起動時に登録される実行コンテキストから検索されます。
> logger.log_level:TRACE
> で設定すると以下のようなログが記述されます。
> Manager TRACE : Manager.initExecContext()
> Manager TRACE : Manager.registerECFactory(jp.go.aist.rtm.RTC.executionContext.PeriodicExecutionContext)
> Manager TRACE : Manager.registerECFactory(jp.go.aist.rtm.RTC.executionContext.ExtTrigExecutionContext)
> Manager TRACE : Manager.registerECFactory(jp.go.aist.rtm.RTC.executionContext.OpenHRPExecutionContext)
> この registerECFactory で登録される実行コンテキストから検索されます。
>
> 実行コンテキストを、
> manager.modules.preload で
> ロードすることは可能です。
> 実行コンテキストにクラスを準備します。
> 実行コンテキストにクラスには、registerModule() を準備して、
> 登録する実行コンテキストのクラス名を引数にして registerECFactory をコールします。
> # RTM はロード後に
> # ロードしたモジュールの registerModule() という method をコールする仕組みになっています。
>
> 例)
>
> import jp.go.aist.rtm.RTC.Manager;
> import org.omg.CORBA.SystemException;
>
> public class xxxxxxExecutionContext
> extends PeriodicExecutionContext implements Runnable{
>
> public xxxxxxExecutionContext() {
> super();
> }
>
> public int svc() {
> return 0;
> }
>
> public void registerModule() {
> final Manager manager = Manager.instance();
> manager.registerECFactory("xxxxxxExecutionContext");
> }
>
> }
>
> # 後で、サンプルを送付いたしますので、
> # しばらくお待ちください。
>
> よろしくお願いいたします。
>
>
>
> On Mon, 24 Oct 2011 00:25:49 +0900 (JST)
> shinsuke79fake@gmail.com wrote:
>
> > 法政大学 米長慎介と申します。
> > 現在、Javaで作成したRTCをOpenHRPが提供する実行コンテキストである、SynchExtTriggerECで実行しようと試みているのですが、コンポーネントが実行コンテキストを見つけることが出来ず、起動ができない状況が続いています。お力を貸していただけないでしょうか。
> > rtc.confは以下の内容となっています。
> > >corba.nameservers: localhostnaming.formats: %n.rtcexec_cxt.periodic.type:
> > >SynchExtTriggerEC
> > この状況でRTCを実行すると、ログファイルに以下のような結果が出力され、コンポーネントの生成に失敗してしまいます。
> > >Oct 23 23:15:26 Manager ERROR ? ?: Factory not found: SynchExtTriggerEC
> > >Oct 23 23:15:26 Manager TRACE ? ?: RTC initialization failed:
> > >Oct 23 23:15:26 RTObject_impl TRACE ? ?: RTObject_impl.exit()
> > とはいっても、現在OpenRTM-aistが対応する標準の実行コンテキストは?PeriodicExecutionContextと
> > ExtTrigExecutionContextの2つだけなので、存在するはずのないSynchExtTriggerECを指定すれば、対応できないエラーが出て当然だと感じました。
> > しかし、他のOpenHRPのサンプルは、rtc.confに特別な記述を行ったり、ソース内にSynchExtTriggerECに関わるオブジェクトを保持している様子がないにも関わらず、当たり前のように起動することができているようです。また、困っている人もいないようです。
> > サンプルのコンポーネントと自分のコンポーネントの違いは、プログラミング言語が違うということです。
> > しかし、言語が違うとしても、rtc.confやソース内で特別なことをしていないことを考えると、C言語だから標準で対応していないSynchExtTriggerECを当たり前のように利用できるというのは自分の中で納得することができません。
> > そこで質問が2つあります。
> > *コンポーネント起動時、実行コンテキストを検索する範囲*
> > コンポーネントを起動する際(C言語なら○○○Comp.exe,
> > Javaなら○○○Comp.classにコンフィグファイルを引数に渡して起動する際)、コンフィグファイルで指定された実行コンテキストが標準のものではない場合、どこを探してくれるのでしょうか。
> > *実行コンテキストの互換性*
> > ある個人のホームページで、オリジナルの実行コンテキストを作成している方がいました。その方は実行コンテキストをローダブルモジュールとして作成し、その実行コンテキストを実行するコンポーネントのコンフィグファイルに以下の文を追加していました。
> > >manager.modules.preload: 実行コンテキスト名.dll
> > 実行コンテキストはどのプログラミング言語もローダブルモジュールで提供されているのでしょうか。また、実行コンテキストはどのプログラミング言語でも共通して利用することができるのでしょうか。
> > よろしくお願いします。また上記の質問の他にも、(OpenRTMのフォーラムとしては不適切かもしれませんが…)OpenHRPで利用するコンポーネントをC言語で作成する際に通常のOpenRTMで利用するコンポーネントの作成方法と異なる部分など、関連する情報を知っていましたら教えていただけると幸いです。
> >
> > _______________________________________________
> > openrtm-users mailing list
> > openrtm-users@openrtm.org
> > http://www.openrtm.org/mailman/listinfo/openrtm-users
>
>
> --
>
> 独立行政法人産業技術総合研究所
> 知能システム研究部門 統合知能研究グループ
> 〒305-8568 茨城県つくば市梅園1-1-1 中央第2
> 片見 剛人
>
>

--

独立行政法人産業技術総合研究所
知能システム研究部門 統合知能研究グループ
〒305-8568 茨城県つくば市梅園1-1-1 中央第2
片見 剛人

11t0033
Offline
Last seen: 12 years 6 months ago
Joined: 2011-08-09 17:47
[openrtm-users 02297] 標準ではない実行コンテキストでの実行

片見様、早速のアドバイスとサンプルソース、ありがとうございます。

コンポーネント起動時、実行コンテキストを検索する場所
Manager.registerECFactory()で登録されている実行コンテキスト

実行コンテキストの実体
実行コンテキストクラスを継承したオブジェクト。
C言語なら.dllや.so、Javaなら.classやjar(パッケージ宣言を含む)

実行コンテキストの互換性
プログラミング言語間での互換性はない

ということですね。
また、頂いたサンプルソースをコンパイルして、コンポーネントと同じ階層に置いた後、rtc.confを以下のように指定することで、うまく動作しました。

manager.modules.load_path:.\\
manager.modules.preload:SampleExecutionContext
exec_cxt.periodic.type:SampleExecutionContext

 ロードモジュールに関してはパスのデリミタやカレントディレクトリの指定方法がわからなかったり、manager.modules.abs_path_allowedをNoにすると○○○Comp.classのmain関数内でNullPointerExceptionが発生したりなど、いつも悩まされています。

頂いたサンプルソースやOpenRTM-aistのライブラリを参照し、Javaにおける実行コンテキストの構成もなんとなくわかった気がします。ありがとうございました。

Log in or register to post comments

Download

latest Releases : 2.0.0-RELESE

2.0.0-RELESE Download page

Number of Projects

Choreonoid

Motion editor/Dynamics simulator

OpenHRP3

Dynamics simulator

OpenRTP

Integrated Development Platform

AIST RTC collection

RT-Components collection by AIST

TORK

Tokyo Opensource Robotics Association

DAQ-Middleware

Middleware for DAQ (Data Aquisition) by KEK