[openrtm-users 01156] コンポーネントの実行周期に関して

2 個の投稿 / 0 new
最終投稿
root
オフライン
Last seen: 4日 2時間 前
登録日: 2009-06-23 14:31
[openrtm-users 01156] コンポーネントの実行周期に関して

OpenRTM-aist MLの皆さま:
早大の菅です.お世話になっております.
いつもお騒がせしてすみません.

今回はOpenRTM-aist1.0 C++リリース版の実行周期についてです.

RTCにPERIODICな実行コンテクストを設定した場合
(いまはこの場合がほぼすべてですが)
rtc.confの設定が強く反映されるべきだと思いますが,
自分の環境だとrtc.confの変更を行っても実行周期が変更されません.
(WinXP Pro, WinVista, Win7x64で確認)

現状での優先順位として,
rtc.conf < デフォルトの値
になっていますが,本来は
rtc.conf > コード内のデフォルトの値
でなくては,バイナリで配信する際に不便です.

C++版のコード状では,RTC::Manager::createComponentで
下記のようにデフォルトpropertyが空の場合に,
m_configで上書きするようになっていますが,
おそらくこの部分が良くないのではないかと思っています.

if (prop[inherit_prop[i]] == "")
prop[inherit_prop[i]] = m_config[inherit_prop[i]];
}
(propはregisterFactoryメソッド時に渡した構造体の値,
m_configはrtc.confからの値)

本来のコードの流れとしては,
if (m_config[inherit_prop[i]] != "")
prop[inherit_prop[i]] = m_config[inherit_prop[i]];
}
ではないでしょうか?
std::stringのoperator!=演算子をあまり使ったことがないので
よくわかりませんが,とりあえず狙い通りの動作はしました.

ほかに現状ではデフォルトの値をバイナリに含めない方法が有効ですが,
その場合は,rtc.confの設定が不足していた場合に
動作を保証できず危険だと思います.

それともほかの問題回避方法がありますか?
それともこういう仕様になったのでしょうか?
お教えいただけますでしょうか.

お忙しい中とは存じますがよろしくお願いします.

未定義
root
オフライン
Last seen: 4日 2時間 前
登録日: 2009-06-23 14:31
[openrtm-users 01160] コンポーネントの実行周期に関して

菅様

お世話になっております。
産総研 栗原です。

ご連絡、有難うございます。

ご指摘の通り、RELEASE版では実行コンテキストの実行周期をrtc.confで
指定しても反映されません。
(RTCBuilderで生成されたコンポーネントのソースに"exec_cxt.periodic.rate"が
埋め込まれているため、 上書きされてしまいます。)

> 現状での優先順位として,
> rtc.conf < デフォルトの値
> になっていますが,本来は
> rtc.conf > コード内のデフォルトの値
> でなくては,バイナリで配信する際に不便です.
ご指摘の通りです。
最新版(リポジトリ上)での優先順位としましては、
component.conf > rtc.conf > コード内のデフォルト値
となります。
リポジトリ上のソースでは既に修正しておりますので、最新版をご使用頂けますと
幸いです。
(リビジョン1929にて修正致しました。)
http://openrtp.jp/openrtm/svn/OpenRTM-aist/branches/RELENG_1_0/OpenRTM-aist

ただし、”コード内のデーフォルト値”で指定した値が、rtc.confで指定されていない
場合、DefaultConfiguration.hで設定された値が使用されますので注意が必要です。
仮に、"exec_cxt.periodic.rate", "1.0"がソースコードで指定されていて、かつ、
rtc.confにてこの値を指定していない場合、DefaultConfiguration.hで指定されてい
るrate:1000が有効になってしまいます。

実は、この問題(ソースコードでは、"1.0Hz"と指定しているのにも関わらず、実際は、
"1000Hz"で実行されてしまうため混乱を招く)を解消するために、下記でご指摘頂きま
した「if (m_config[inherit_prop[i]] != "")」の処理を入れておりました。
この処理は、OpenRTM-aist-1.0.0-RC1では入れておりませんでした。

> それともほかの問題回避方法がありますか?
RTM本体に手を加えない方法といたしましては、コード内のデフォルト値
"exec_cxt.periodic.rate", "1.0"の行を削除する。がよろしいかと思います。
次期リリース版のRTCBuilderでは、この行を入れないようになっております。

> それともこういう仕様になったのでしょうか?
Manager.cppに下記の記載がありますが、これらの属性については、コンポーネントの
ソースコードにデフォルト値として指定しない事が推奨されております。
(上で述べたように、ソースコードで指定した場合でも、rtc.confで指定しない限り、
DefaultConfiguration.hで指定された値が有効になるため、ソースコードで指定しな
い事が推奨されています。)

const char* inherit_prop[] = {
"exec_cxt.periodic.type",
"exec_cxt.periodic.rate",
"exec_cxt.evdriven.type",
"logger.enable",
"logger.log_level",
"naming.enable",
"naming.type",
"naming.formats",
""
};

以上、長文になり、申し訳ございません。
宜しくお願い致します。

On Thu, 11 Mar 2010 23:41:30 +0900
ysuga wrote:

> OpenRTM-aist MLの皆さま:
> 早大の菅です.お世話になっております.
> いつもお騒がせしてすみません.
>
>
> 今回はOpenRTM-aist1.0 C++リリース版の実行周期についてです.
>
> RTCにPERIODICな実行コンテクストを設定した場合
> (いまはこの場合がほぼすべてですが)
> rtc.confの設定が強く反映されるべきだと思いますが,
> 自分の環境だとrtc.confの変更を行っても実行周期が変更されません.
> (WinXP Pro, WinVista, Win7x64で確認)
>
> 現状での優先順位として,
> rtc.conf < デフォルトの値
> になっていますが,本来は
> rtc.conf > コード内のデフォルトの値
> でなくては,バイナリで配信する際に不便です.
>
>
> C++版のコード状では,RTC::Manager::createComponentで
> 下記のようにデフォルトpropertyが空の場合に,
> m_configで上書きするようになっていますが,
> おそらくこの部分が良くないのではないかと思っています.
>
> if (prop[inherit_prop[i]] == "")
> prop[inherit_prop[i]] = m_config[inherit_prop[i]];
> }
> (propはregisterFactoryメソッド時に渡した構造体の値,
> m_configはrtc.confからの値)
>
>
> 本来のコードの流れとしては,
> if (m_config[inherit_prop[i]] != "")
> prop[inherit_prop[i]] = m_config[inherit_prop[i]];
> }
> ではないでしょうか?
> std::stringのoperator!=演算子をあまり使ったことがないので
> よくわかりませんが,とりあえず狙い通りの動作はしました.
>
>
> ほかに現状ではデフォルトの値をバイナリに含めない方法が有効ですが,
> その場合は,rtc.confの設定が不足していた場合に
> 動作を保証できず危険だと思います.
>
>
> それともほかの問題回避方法がありますか?
> それともこういう仕様になったのでしょうか?
> お教えいただけますでしょうか.
>
> お忙しい中とは存じますがよろしくお願いします.
>

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

ダウンロード

最新バージョン : 2.0.1-RELESE

統計

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

Choreonoid

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

OpenHRP3

動力学シミュレータ

OpenRTP

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

産総研RTC集

産総研が提供するRTC集

TORK

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

DAQ-Middleware

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