[openrtm-users 00246] ExecutionContextの差し替え

5 個の投稿 / 0 new
最終投稿
root
オフライン
Last seen: 5日 17時間 前
登録日: 2009-06-23 14:31
[openrtm-users 00246] ExecutionContextの差し替え

金広@産総研です。

OpenRTM-aist-0.4.1を用いて同期複合コンポーネントを作ろうと
しています。

examples/SimpleIOを改造して1つのプロセス内に2つのコンポーネント
ConsoleIn, ConsoleOutを作り、ConsoleOutのExecutionContextを
detach_executioncontext(0)でdetachし、CosoleInのExecutionContextを
attach_executioncontext(ec)でattachしました。

この場合、attachしたExecutionContextのidは1になるので、
ConnectorComp.cppでeclisto[0]としているところをeclisto[1]とすることで
ConsoleIn, ConsoleOutともactivateすることができ、通常どおり実行できる
ことを確認しました。

次にConnectoCompを使うかわりにRTCLinkを使ってコンポーネントを
activateしようと思ったのですが、ConsoleOutの状態がUnknownとなっており、
activateできない状態です。

ExecutionContextを差し替える際に他にすべきことがあるのでしょうか?

未定義
root
オフライン
Last seen: 5日 17時間 前
登録日: 2009-06-23 14:31
[openrtm-users 00251] ExecutionContextの差し替え

金広様

安藤です

> OpenRTM-aist-0.4.1を用いて同期複合コンポーネントを作ろうと
> しています。
>
> examples/SimpleIOを改造して1つのプロセス内に2つのコンポーネント
> ConsoleIn, ConsoleOutを作り、ConsoleOutのExecutionContextを
> detach_executioncontext(0)でdetachし、CosoleInのExecutionContextを
> attach_executioncontext(ec)でattachしました。
>
> この場合、attachしたExecutionContextのidは1になるので、
> ConnectorComp.cppでeclisto[0]としているところをeclisto[1]とすることで
> ConsoleIn, ConsoleOutともactivateすることができ、通常どおり実行できる
> ことを確認しました。

RTObjectとExecutionContext(EC)の関連付けは、
ECに対してRTObjectをaddしてやる必要があります。
RTObjectに対してECをattachしても正しく関連付けられないかもしれません。

このあたりの処理シーケンスについては、OMGの以下のRTC仕様に従っています。
(28ページ目くらい)
http://www.omg.org/cgi-bin/doc?ptc/2007-08-18

ただ、現状ではユーザがここまでいじることを想定していなかったので、
マニュアル、クラスリファレンスなどには記載がありません。

> 次にConnectoCompを使うかわりにRTCLinkを使ってコンポーネントを
> activateしようと思ったのですが、ConsoleOutの状態がUnknownとなっており、
> activateできない状態です。

現在のRtcLinkではidが0のECのみを対象としており、
それ以外のECの状態は見えないようになっています。

残念ながら、現状ではRtcLinkでECの状態をみたり変更したりすることは出来ません。
次期バージョンでは、複数のECを扱えるように改良したいと思います。

ご指摘ありがとうございます。

root
オフライン
Last seen: 5日 17時間 前
登録日: 2009-06-23 14:31
[openrtm-users 00253] ExecutionContextの差し替え

金広@産総研です。

> > examples/SimpleIOを改造して1つのプロセス内に2つのコンポーネント
> > ConsoleIn, ConsoleOutを作り、ConsoleOutのExecutionContextを
> > detach_executioncontext(0)でdetachし、CosoleInのExecutionContextを
> > attach_executioncontext(ec)でattachしました。
> >
> RTObjectとExecutionContext(EC)の関連付けは、
> ECに対してRTObjectをaddしてやる必要があります。
> RTObjectに対してECをattachしても正しく関連付けられないかもしれません。
>
> このあたりの処理シーケンスについては、OMGの以下のRTC仕様に従っています。
> (28ページ目くらい)
> http://www.omg.org/cgi-bin/doc?ptc/2007-08-18

detach, attachしていたところをeclisto[0]->remove(comp->_this()),
eclisti[0]->add(comp->_this())と変更しました。

> 現在のRtcLinkではidが0のECのみを対象としており、
> それ以外のECの状態は見えないようになっています。

了解しました。

ありがとうございました。

root
オフライン
Last seen: 5日 17時間 前
登録日: 2009-06-23 14:31
[openrtm-users 00258] ExecutionContextの差し替え

金広@産総研です。

07/11/09 に Fumio Kanehiro さんは書きました:
> > RTObjectとExecutionContext(EC)の関連付けは、
> > ECに対してRTObjectをaddしてやる必要があります。
> > RTObjectに対してECをattachしても正しく関連付けられないかもしれません。
> >
> > このあたりの処理シーケンスについては、OMGの以下のRTC仕様に従っています。
> > (28ページ目くらい)
> > http://www.omg.org/cgi-bin/doc?ptc/2007-08-18

上記仕様書によると、ExecutionContextをデタッチする際には、同様にECに
対してデタッチの指令を送ると、ECからRTObjectに対してデタッチの
指令が送られるように記述されています。

PeriodicExecutionContext.cppの実装ではECが保持するリストからRTObject
を消しているだけでRTObjectに対するデタッチ要求の送信は行っていない
ようです。そのためRTObjectからECのリストを取得すると外したつもりのECが
含まれたままになっています。

これはバグでしょうか?

root
オフライン
Last seen: 5日 17時間 前
登録日: 2009-06-23 14:31
[openrtm-users 00259] ExecutionContextの差し替え

金広様

安藤です
> 金広@産総研です。
>
> 07/11/09 に Fumio Kanehiro さんは書きました:
> > > RTObjectとExecutionContext(EC)の関連付けは、
> > > ECに対してRTObjectをaddしてやる必要があります。
> > > RTObjectに対してECをattachしても正しく関連付けられないかもしれません。
> > >
> > > このあたりの処理シーケンスについては、OMGの以下のRTC仕様に従っています。
> > > (28ページ目くらい)
> > > http://www.omg.org/cgi-bin/doc?ptc/2007-08-18
>
> 上記仕様書によると、ExecutionContextをデタッチする際には、同様にECに
> 対してデタッチの指令を送ると、ECからRTObjectに対してデタッチの
> 指令が送られるように記述されています。
>
> PeriodicExecutionContext.cppの実装ではECが保持するリストからRTObject
> を消しているだけでRTObjectに対するデタッチ要求の送信は行っていない
> ようです。そのためRTObjectからECのリストを取得すると外したつもりのECが
> 含まれたままになっています。

すみません、これはバグですね。
ご報告ありがとうございます。
バグリストに追加しましたので、次のバージョンでは直します。

修正するとすれば、こんな感じでしょうか?

ReturnCode_t
PeriodicExecutionContext::remove(LightweightRTObject_ptr comp)
{
CompItr it;
it = std::find_if(m_comps.begin(), m_comps.end(),
find_comp(RTC::LightweightRTObject::_duplicate(comp)));
if (it == m_comps.end())
return RTC::BAD_PARAMETER;
// これが抜けてますね
it->_ref->detach_executioncontext(it->_sm.ec_id);

m_comps.erase(it);

return RTC::RTC_OK;
}

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

ダウンロード

最新バージョン : 2.0.1-RELESE

統計

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

Choreonoid

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

OpenHRP3

動力学シミュレータ

OpenRTP

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

産総研RTC集

産総研が提供するRTC集

TORK

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

DAQ-Middleware

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