[openrtm-users 00413] rtc-templateでnamespaceを指定する

8 posts / 0 new
Last post
root
Offline
Last seen: 1 day 4 hours ago
Joined: 2009-06-23 14:31
[openrtm-users 00413] rtc-templateでnamespaceを指定する

産総研の堀内です。

idl ファイル中で、module キーワードでモジュール宣言を使っています。

コマンドライン rtc-template のオプション
--service=[PortName:Name:Type]:
--consumer=[PortName:Name:Type]:
でモジュール宣言した名前 xxx を、
単純に xxx::Type とすると
gen.sh でエラーが出ます。

正しい方法はどうすればよろしいでしょうか?

Undefined
root
Offline
Last seen: 1 day 4 hours ago
Joined: 2009-06-23 14:31
[openrtm-users 00414] rtc-templateでnamespaceを指定する

産総研 堀内様

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

現状の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 でエラーが出ます。
>
> 正しい方法はどうすればよろしいでしょうか?
>
>
>

root
Offline
Last seen: 1 day 4 hours ago
Joined: 2009-06-23 14:31
[openrtm-users 00418] rtc-templateでnamespaceを指定する

栗原様

堀内です。

[openrtm-users 00414]
でご教示いただいた方法で、linux でコンパイルでき
ありがとうございました。

しかしwindows(visual studio 2005) でリンク時に
未解決外部シンボルが出ます。
シンボルはすべてモジュール宣言名に関係するものです。

linux 上で
1) rtc-template -bcxx ....
2) rtc-template -bvcproject 1)と同じオプション
3) ヘッダファイル編集
4) make -f Makefile.xxx
の後、windows 上でコンパイルしておりますが
順番はこれでよろしいでしょうか?

 

root
Offline
Last seen: 1 day 4 hours ago
Joined: 2009-06-23 14:31
[openrtm-users 00419] rtc-templateでnamespaceを指定する

堀内 様

栗原です。

> 1) rtc-template -bcxx ....
> 2) rtc-template -bvcproject 1)と同じオプション
> 3) ヘッダファイル編集
> 4) make -f Makefile.xxx
> の後、windows 上でコンパイルしておりますが
> 順番はこれでよろしいでしょうか?
VC++版コンポーネントを作成するのであれば、4)の "make -f Makefile.xxx"は必
要ありません。
もし、4)を実行されておりましたら、*Skel.[o|cpp|h], *Stub.[o|cpp|h]は削除
してください。
スタブ・スケルトンはVS2005にて"ビルド前のイベント"にて生成されます。

リンク時のエラーに関しましては、プロジェクトのプロパティにて"プリプロセッ
サの定義"を確認して頂けますでしょうか?

手順としましては、
1) <コンポーネント名>.vcprojをダブルクリックし、Visual Studioを起動する。
2) ソリューションエクスプローラーのプロジェクト名を右クリック->プロパティ(R)を選択
3) プロパティダイアログにて、"構成プロパティ" -> "C/C++" -> "プリプロセッサ"の順に
選択
4) プリプロセッサの定義を確認。
※ プリプロセッサの定義に"USE_stub_in_nt_dll"が記述されている場合は、
"USE_stub_in_nt_dll"を削除してください。

なお、同じフォルダにxxxSkel.[cpp|h]または、xxxStub.[cpp|h]が存在するかも確認
をお願い致します。(xxxは IDLファイル名または、interface名 です。)

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

> 栗原様
>
> 堀内です。
>
> [openrtm-users 00414]
> でご教示いただいた方法で、linux でコンパイルでき
> ありがとうございました。
>
> しかしwindows(visual studio 2005) でリンク時に
> 未解決外部シンボルが出ます。
> シンボルはすべてモジュール宣言名に関係するものです。
>
> linux 上で
> 1) rtc-template -bcxx ....
> 2) rtc-template -bvcproject 1)と同じオプション
> 3) ヘッダファイル編集
> 4) make -f Makefile.xxx
> の後、windows 上でコンパイルしておりますが
> 順番はこれでよろしいでしょうか?
>
>
>
>  
>
>

root
Offline
Last seen: 1 day 4 hours ago
Joined: 2009-06-23 14:31
[openrtm-users 00420] rtc-templateでnamespaceを指定する

栗原様

堀内です。

ビルド前のイベントが空になってしまいます。
このコマンドラインはどのように指定すればよいでしょうか?

-----Original Message-----
From: kurihara shinji [mailto:shinji.kurihara@aist.go.jp]
Sent: Friday, April 11, 2008 6:05 PM
To: horiuchi eiichi
Cc: openrtm-users@m.aist.go.jp;
Subject: [openrtm-users 00419] Re: rtc-templateでnamespaceを指定する

堀内 様

栗原です。

> 1) rtc-template -bcxx ....
> 2) rtc-template -bvcproject 1)と同じオプション
> 3) ヘッダファイル編集
> 4) make -f Makefile.xxx
> の後、windows 上でコンパイルしておりますが
> 順番はこれでよろしいでしょうか?
VC++版コンポーネントを作成するのであれば、4)の "make -f Makefile.xxx"は必
要ありません。
もし、4)を実行されておりましたら、*Skel.[o|cpp|h], *Stub.[o|cpp|h]は削除
してください。
スタブ・スケルトンはVS2005にて"ビルド前のイベント"にて生成されます。

リンク時のエラーに関しましては、プロジェクトのプロパティにて"プリプロセッ
サの定義"を確認して頂けますでしょうか?

手順としましては、
1) <コンポーネント名>.vcprojをダブルクリックし、Visual Studioを起動する。
2) ソリューションエクスプローラーのプロジェクト名を右クリック->プロパティ
(R)を選択
3) プロパティダイアログにて、"構成プロパティ" -> "C/C++" -> "プリプロセッサ
"の順に
選択
4) プリプロセッサの定義を確認。
※ プリプロセッサの定義に"USE_stub_in_nt_dll"が記述されている場合は、
"USE_stub_in_nt_dll"を削除してください。

なお、同じフォルダにxxxSkel.[cpp|h]または、xxxStub.[cpp|h]が存在するかも確認
をお願い致します。(xxxは IDLファイル名または、interface名 です。)

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

> 栗原様
>
> 堀内です。
>
> [openrtm-users 00414]
> でご教示いただいた方法で、linux でコンパイルでき
> ありがとうございました。
>
> しかしwindows(visual studio 2005) でリンク時に
> 未解決外部シンボルが出ます。
> シンボルはすべてモジュール宣言名に関係するものです。
>
> linux 上で
> 1) rtc-template -bcxx ....
> 2) rtc-template -bvcproject 1)と同じオプション
> 3) ヘッダファイル編集
> 4) make -f Makefile.xxx
> の後、windows 上でコンパイルしておりますが
> 順番はこれでよろしいでしょうか?
>
>
>
>  
>
>

root
Offline
Last seen: 1 day 4 hours ago
Joined: 2009-06-23 14:31
[openrtm-users 00421] rtc-templateでnamespaceを指定する

堀内 様

栗原です。

> ビルド前のイベントが空になってしまいます。
> このコマンドラインはどのように指定すればよいでしょうか?
CUI版RtcTemplate(GUI版はEclipse上のRtcTemplateです。)では、
ビルド前のイベントに関する記述がなされていないようです。
OpenRTMサポートページのバグレポートにアップさせて頂きます。
ご報告有難うございました。

さて、"ビルド前のイベント"の記述についてですが、
下記をコピー&ペーストしてご使用ください。

------------- ここから ------------------------------------
REM @echo off
set PATH=$(rtm_path);%PYTHON_ROOT%\;%PATH%
echo %PATH%
for %%x in (*.idl) do omniidl -bcxx -Wba -nf %%x
for %%x in (*.idl) do rtm-skelwrapper.py --include-dir="" --skel-suffix=Skel --stub-suffix=Stub --idl-file=%%x
------------- ここまで ------------------------------------

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

> 栗原様
>
> 堀内です。
>
> ビルド前のイベントが空になってしまいます。
> このコマンドラインはどのように指定すればよいでしょうか?
>
> -----Original Message-----
> From: kurihara shinji [mailto:shinji.kurihara@aist.go.jp]
> Sent: Friday, April 11, 2008 6:05 PM
> To: horiuchi eiichi
> Cc: openrtm-users@m.aist.go.jp;
> Subject: [openrtm-users 00419] Re: rtc-templateでnamespaceを指定する
>
>
> 堀内 様
>
> 栗原です。
>
> > 1) rtc-template -bcxx ....
> > 2) rtc-template -bvcproject 1)と同じオプション
> > 3) ヘッダファイル編集
> > 4) make -f Makefile.xxx
> > の後、windows 上でコンパイルしておりますが
> > 順番はこれでよろしいでしょうか?
> VC++版コンポーネントを作成するのであれば、4)の "make -f Makefile.xxx"は必
> 要ありません。
> もし、4)を実行されておりましたら、*Skel.[o|cpp|h], *Stub.[o|cpp|h]は削除
> してください。
> スタブ・スケルトンはVS2005にて"ビルド前のイベント"にて生成されます。
>
> リンク時のエラーに関しましては、プロジェクトのプロパティにて"プリプロセッ
> サの定義"を確認して頂けますでしょうか?
>
> 手順としましては、
> 1) <コンポーネント名>.vcprojをダブルクリックし、Visual Studioを起動する。
> 2) ソリューションエクスプローラーのプロジェクト名を右クリック->プロパティ
> (R)を選択
> 3) プロパティダイアログにて、"構成プロパティ" -> "C/C++" -> "プリプロセッサ
> "の順に
> 選択
> 4) プリプロセッサの定義を確認。
> ※ プリプロセッサの定義に"USE_stub_in_nt_dll"が記述されている場合は、
> "USE_stub_in_nt_dll"を削除してください。
>
> なお、同じフォルダにxxxSkel.[cpp|h]または、xxxStub.[cpp|h]が存在するかも確認
> をお願い致します。(xxxは IDLファイル名または、interface名 です。)
>
>
> 以上、宣しくお願い致します。
>
>
>
> > 栗原様
> >
> > 堀内です。
> >
> > [openrtm-users 00414]
> > でご教示いただいた方法で、linux でコンパイルでき
> > ありがとうございました。
> >
> > しかしwindows(visual studio 2005) でリンク時に
> > 未解決外部シンボルが出ます。
> > シンボルはすべてモジュール宣言名に関係するものです。
> >
> > linux 上で
> > 1) rtc-template -bcxx ....
> > 2) rtc-template -bvcproject 1)と同じオプション
> > 3) ヘッダファイル編集
> > 4) make -f Makefile.xxx
> > の後、windows 上でコンパイルしておりますが
> > 順番はこれでよろしいでしょうか?
> >
> >
> >
> >  
> >
> >
>
>

root
Offline
Last seen: 1 day 4 hours ago
Joined: 2009-06-23 14:31
[openrtm-users 00422] rtc-templateでnamespaceを指定する

栗原様

堀内です。

[openrtm-users 00421] の方法で実行ファイル
作成に成功でき、ありがとうございました。

しかし、RTCLink でアクティベートしたところ
gen.sh で以下を指定していても
--module-act-type=SPORADIC
プロパティが
State:RUNNING
Kind:PERIODIC
Rate:1000.0
となります。
これは正常な動作とみてよろしいでしょうか?

root
Offline
Last seen: 1 day 4 hours ago
Joined: 2009-06-23 14:31
[openrtm-users 00424] rtc-templateでnamespaceを指定する

堀内 様

栗原です。

> しかし、RTCLink でアクティベートしたところ
> gen.sh で以下を指定していても
> --module-act-type=SPORADIC
> プロパティが
> State:RUNNING
> Kind:PERIODIC
> Rate:1000.0
> となります。
> これは正常な動作とみてよろしいでしょうか?
RTCLinkのプロパティで表示される"Kind:PERIODIC"はExecutionContextに関する
情報ですので、"--module-act-type="で指定した値とは別の値です。
現状では、"--module-act-type="で指定した値は使用されておりませんので、
RtcLinkにも表示されません。

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

>
> 堀内です。
>
> [openrtm-users 00421] の方法で実行ファイル
> 作成に成功でき、ありがとうございました。
>
> しかし、RTCLink でアクティベートしたところ
> gen.sh で以下を指定していても
> --module-act-type=SPORADIC
> プロパティが
> State:RUNNING
> Kind:PERIODIC
> Rate:1000.0
> となります。
> これは正常な動作とみてよろしいでしょうか?
>
>
>

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