[openrtm-users 02296] Re: 標準ではない実行コンテキストでの実行

katami fsi-katami @ aist.go.jp
2011年 10月 24日 (月) 12:14:45 JST


米長さま

産総研 片見と申します。

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
片見 剛人 <fsi-katami @ aist.go.jp>




openrtm-users メーリングリストの案内