[openrtm-users 00144] Re: サービスポートのIDLの継承について

Ando Noriaki n-ando @ aist.go.jp
2007年 6月 27日 (水) 00:16:57 JST


NECシステムテクノロジー 宇田様

産総研 安藤です

いつもお世話になっております。

サービスポートのインターフェースに継承を用いたいとのことですが、
今のところrtc-template自体は継承にはきちんと対応できていません。
従って、BaseService.idlはMyService.idlの中で継承およびincludeするだけでは
生成するコードには反映されません

少なくとも、BaseServiceのスタブとスケルトン(実装SVC_implはいらない)を生成
しないといけないので、以下のように--consumer-idlオプションに指定してください。
(この際--consumerはなにも指定しない。)

--service-idl=MyService.idl --consumer-idl=BaseService.idl

こうすると、BaseServiceのスタブとスケルトンが生成されますので、
makeすると、BaseService.hhも生成されるはずです。

ただし、MyService.hhにおいてBaseService.hhが<>でincludeされているので、
(これは、omniORBが生成するファイルなので、本来修正すべきではない。。。)
以下のようにMakefileを修正して、コンパイル時のインクルードサーチパスに
カレントディレクトリを追加しなければなりません。

CXXFLAGS = `rtm-config --cflags` -I.

一応、これでBaseServiceを継承したMyServiceをプロバイダとして持つ
コンポーネントが作成できるはずです。

MyServiceSVC_implに、MyServiceとBaseServiceのオペレーションを
実装すれば、希望のサービスを持ったコンポーネントが作成できるはずです。


申し訳ございませんが、現在出張中のため詳しくは検証できる環境がなく、
抜けがあるかもしれませんが、とりあえずこれで試していただいて、
問題がありましたらおしらせください。

また、うまくいった場合も今後の参考になりますので
メーリングリストにて紹介していただければと存じます。

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

> OpenRTM-aist-0.4.0のサービスポートのIDL構成についてお伺いします。
>
> 以下のように、複数種類のサービスが共通のベースサービスを取り込む
> よう、IDLに継承関係を持たせたいのですが、rtc-template はこのよう
> なIDLに対応されていますでしょうか?
>
>
>  MyService.idl
> ┌──────────────────┐
> │#include "BaseService.idl"          │
> │typedef sequence<string> EchoList;  │
> │typedef sequence<float> ValueList;  │
> │interface MyService : BaseService   │
> │{                                   │
> │  string echo(in string msg);       │
> │  EchoList get_echo_history();      │
> │  void set_value(in float value);   │
> │  float get_value();                │
> │  ValueList get_value_history();    │
> │};                                  │
> └──────────────────┘
>
>  BaseService.idl
> ┌──────────────────┐
> │interface BaseService               │
> │{                                   │
> │  void base_service0();             │
> │  void base_service1();             │
> │  ...                               │
> │}                                   │
> └──────────────────┘
>
>
> 単純に --service-idl および --consumer-idl スイッチで MyService.idl
> のみを指定し、--idl-include スイッチを BaseService.idl のフォルダに
> 設定すると、rtc-template は通るものの、コンパイル時に BaseService.hh
> が見つからない旨のエラーになるのですが、何か不足しているスイッチ等は
> ございますでしょうか?
>
> zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz
> z  宇田 安規男                                                        z
> z  NECシステムテクノロジー株式会社  システムテクノロジーラボラトリ  z
> z  神奈川県川崎市中原区下沼部 1753  NEC 玉川事業場 N棟30F              z
> z  〒 211-8666   Tel: 044-431-7574  Fax: 044-431-7588                  z
> z  E-mail: uda-axa @ necst.nec.co.jp                                     z
> zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz
>
>
>


-- 
安藤慶昭@独立行政法人産業技術総合研究所 研究員
                   知能システム研究部門 タスクインテリジェンス研究グループ
                   〒305-8568 茨城県つくば市梅園1-1-1 中央第2
                   TEL: 029-861-5981 FAX: 029-861-5971
                   n-ando @ aist.go.jp, n-ando @ ieee.org



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