[openrtm-users 00807] createComponentでのRTCのインスタンス名上書きについて

Yasuaki Odagiri odagiri @ sec.co.jp
2009年 5月 29日 (金) 13:23:30 JST


OpenRTM-aist開発者各位

お世話になっております。
セック 小田桐です。

先日、安藤様から、1.0.0ではManager::createComponent()の引数で
RTCのプロパティを与えることができるため、NumberingPolicyに
関係なくインスタンス名を強制的に上書きできる、とお聞きしました。
そこで、早速試してみたですが、一部うまく動作していない箇所が
ございましたので、ご報告いたします。

SimpleIOのConsoleInComp.cppにて、以下のように、
Manager::createComponent()呼び出し時にインスタンス名を与えました。
  manager->createComponent("ConsoleIn?instance_name=Test");

RTCを生成した後、Manager::configureComponent()内で、与えられた
プロパティをRTCに上書き(追加)することで、インスタンス名が
上書きされるようにしているのだと思います。

しかし、この後、RTObject_impl::getInstanceName()を呼び出すと、
上書きしたインスタンス名(Test)ではなく、FactoryCXX::create内で
設定されたインスタンス名(ConsoleIn0)が返ってきます。

原因は、Manager::configureComponent()で上書きされるのは
RTObject_implクラスのメンバ変数m_propertiesですが、
RTObject_impl::getInstanceName()で取得できるインスタンス名は
別なメンバ変数m_profileから取得していることです。
m_profileは、Manager::configureComponent()では上書きされません。

RTObject_impl::get_component_profile()では、m_propertiesから
インスタンス名を取得しているため正しく動作します。

RTObject_implクラスからm_profileを削除し、getInstanceName()や
getTypeName()などのメソッドも全てm_propertiesから値を
取得するようにしてはいかがでしょうか?

以上、ご検討をよろしくお願いいたします。

-----------------------------------------------------------
 株式会社セック 開発本部 第一開発部
   〒150-0031 東京都渋谷区桜丘町 22-14 NESビル
   TEL: 03-5458-7741    FAX : 03-5458-7726
   URL: http://www.sec.co.jp

 小田桐 康暁 (Yasuaki ODAGIRI)
   E-Mail: odagiri @ sec.co.jp
-----------------------------------------------------------




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