[openrtm-users 01061] Re: Configulationパラメータの設定
Ando Noriaki
n-ando @ aist.go.jp
2009年 12月 26日 (土) 11:29:26 JST
皆様
産総研 安藤です
configurationについて混乱を招いているようで申し訳ございません。
ご希望の機能ですが、実装しかけたのですが検証するのを忘れておりまして
1.0.0-RC1ではバグのため機能しません。
> そこで、ツールでApplyしなくても良いようにするやり方を調べたところ
> bindParameter("int_param0", m_int_param0,
> m_properties["conf.default.int_param0"].c_str() );
> と初期値をプロパティから与えてやるとconfの内容が反映されます。
> この作法で初期化してやると、インスタンス別にconfファイルを分けても
> 読み込まれます。
>
> この作法は推奨されるものでしょうか?
現状では、こうしていただくか、栗原が示したようなやり方で
default値をファイルから読み込ませたければonActivated()で
m_configsets.update("default");
でconfigurationパラメータに反映させる方法しかありません。
#少々恰好悪いですが。。。
ただし、bindParameter() の第3引数で与えているものはデフォルトの
パラメータでして、これをm_propertiesから取るのは若干問題があります。
というのも、この引数で渡された文字列は、外部からコンフィギュレーション
パラメータの値の文字列を、各変数の型への変換時に、万一変換に
失敗した場合の値になる文字列だからです。
コンフィギュレーションパラメータに正しい文字列の値が指定されている
限りは問題になりませんが。。。
で、上記のバグの件ですが、RTObject.cpp の on_initialize() 関数は現在
以下のようになっていますが、コメントで示したonInitialize() を std::string active_config
のすぐ上に持ってくることでご希望の動作を実現できるのではないかと思います。
ReturnCode_t RTObject_impl::on_initialize()
throw (CORBA::SystemException)
{
RTC_TRACE(("on_initialize()"));
ReturnCode_t ret(RTC::RTC_ERROR);
try
{
// onInitialize() をここに持ってくる
std::string active_config;
active_config = m_properties["active_config"];
if (active_config.empty())
{
m_configsets.update("default");
}
else
{
if (m_configsets.haveConfig(active_config.c_str()))
m_configsets.update(active_config.c_str());
else
m_configsets.update("default");
}
ret = onInitialize(); // この関数を↑に持っていく
}
catch (...)
{
return RTC::RTC_ERROR;
}
return ret;
}
また、これにより起動時のアクティブなコンフィギュレーションを
active_config で指定できます。
#active_config では名前空間的に上位すぎるので、最新版のソースでは
#configuration.active_config になっております。
ConfigSample のサンプルで configsample.conf ファイル内に
configuration.active_config: mode0
と記入することで起動時にmode0のパラメータセットがセットされます。
以上、よろしくお願いいたします。
--
安藤慶昭@独立行政法人産業技術総合研究所 知能システム研究部門
統合知能研究グループ 主任研究員, 博士(工学)
〒305-8568 つくば市梅園1-1-1 中央第2
e-mail: n-ando @ aist.go.jp, web: http://staff.aist.go.jp/n-ando
OpenRTM-aist: http://www.openrtm.org
openrtm-users メーリングリストの案内