[openrtm-users 00414] Re: rtc-templateでnamespaceを指定する

kurihara shinji shinji.kurihara @ aist.go.jp
2008年 4月 9日 (水) 15:37:29 JST


産総研 堀内様

産総研タスクグループ 栗原です。

現状のrtc-templateでは、ご指摘のようにサービスポート用オプションにてType
に"module名::interface名"とした場合、rtc-template実行時にエラーとなって
しまいます。
これは、rtc-template内でオプションの値を":"でsplitしているためです。

idlファイル中で、名前空間 module を使用する場合、rtc-templateオプションでは
module名は指定せずにrtc-templateを実行し、サービスポートを使用するコンポー
ネントのソースまたはヘッダファイルにて"using namespace module名;"を記述する
事でIDLでの名前空間が使用できます。

<サンプル>
 (ディレクトリ構成)
  SimpleService/
        gen.sh, MyService.idl

 1. gen.shの作成 

  #!/bin/sh
  #file : gen.sh
  rtc-template -bcxx \
    --module-name=MyServiceProvider --module-type='MyServiceProvider' \
    --module-desc='MyService Provider Sample component' \
    --module-version=0.1 --module-vendor=AIST --module-category=Generic \
    --module-comp-type=DataFlowComponent --module-act-type=SPORADIC \
    --module-max-inst=10 \
    --service=MyServicePro:myservice0:MyService \
    --service-idl=MyService.idl

  rtc-template -bcxx \
    --module-name=MyServiceConsumer --module-type='MyServiceConsumer' \
    --module-desc='MyService Consumer Sample component' \
    --module-version=0.1 --module-vendor=AIST --module-category=Generic \
    --module-comp-type=DataFlowComponent --module-act-type=SPORADIC \
    --module-max-inst=10 \
    --consumer=MyServiceCon:myservice0:MyService \
    --consumer-idl=MyService.idl

 2. MyService.idlファイルの作成
  // file: MyService.idl
  module Test {
      interface MyService
      {
         string echo(in string msg);
         void set_value(in float value);
         float get_value();
       };
  };

 3. gen.sh の実行

   $ sh gen.sh
   File "MyServiceSVC_impl.h" was generated.
   File "MyServiceSVC_impl.cpp" was generated.
   File "MyServiceProvider.h" was generated.
   File "MyServiceProvider.cpp" was generated.
   File "MyServiceProviderComp.cpp" was generated.
   File "Makefile.MyServiceProvider" was generated.
   File "README.MyServiceProvider" was generated.
   File "MyServiceConsumer.h" was generated.
   File "MyServiceConsumer.cpp" was generated.
   File "MyServiceConsumerComp.cpp" was generated.
   File "Makefile.MyServiceConsumer" was generated.
   File "README.MyServiceConsumer" was generated.

  4. idlで定義したオペレーションとコンポーネントの実装
    オペレーションとコンポーネントの実装に加え、以下の
     2つの処理も行ってください。

    (1) MyServiceProvider.hの編集
        "MyServiceSVC_impl"を"Test_MyServiceSVC_impl"に
        修正。
        『モジュール名 + _ + interface名 + SVC_impl』と
        します。

     (2) "using namespace モジュール名"の追加
         MyServiceConsumer.hに"using namespace Test;"を追記。


以上、宣しくお願い致します。



> 産総研の堀内です。
> 
> idl ファイル中で、module キーワードでモジュール宣言を使っています。
> 
> コマンドライン rtc-template のオプション
>  --service=[PortName:Name:Type]:
>  --consumer=[PortName:Name:Type]:
> でモジュール宣言した名前 xxx を、
> 単純に xxx::Type とすると
> gen.sh でエラーが出ます。
> 
> 正しい方法はどうすればよろしいでしょうか?
> 
> 
> 


-- 
----------
栗原 眞二
shinji.kurihara @ aist.go.jp
kurihara @ imagination.co.jp



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