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

8 個の投稿 / 0 new
最終投稿
root
オフライン
Last seen: 5日 11時間 前
登録日: 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 でエラーが出ます。

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

未定義
root
オフライン
Last seen: 5日 11時間 前
登録日: 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
オフライン
Last seen: 5日 11時間 前
登録日: 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
オフライン
Last seen: 5日 11時間 前
登録日: 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
オフライン
Last seen: 5日 11時間 前
登録日: 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
オフライン
Last seen: 5日 11時間 前
登録日: 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
オフライン
Last seen: 5日 11時間 前
登録日: 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
オフライン
Last seen: 5日 11時間 前
登録日: 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
> となります。
> これは正常な動作とみてよろしいでしょうか?
>
>
>

コメントを投稿するにはログインまたはユーザー登録を行ってください

ダウンロード

最新バージョン

初めての方へ

Windows msi(インストーラ) パッケージ (サンプルの実行ができます。)

C++,Python,Java,
Toolsを含む
1.2.1-RELEASE

RTコンポーネントを開発するためには開発環境のインストールが必要です。詳細はダウンロードページ

統計

Webサイト統計
ユーザ数:1840
プロジェクト統計
RTコンポーネント297
RTミドルウエア28
ツール22
文書・仕様書1

Choreonoid

モーションエディタ/シミュレータ

OpenHRP3

動力学シミュレータ

OpenRTP

統合開発プラットフォーム

産総研RTC集

産総研が提供するRTC集

TORK

東京オープンソースロボティクス協会

DAQ-Middleware

ネットワーク分散環境でデータ収集用ソフトウェアを容易に構築するためのソフトウェア・フレームワーク