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

5 posts / 0 new
Last post
root
Offline
Last seen: 15 hours 46 min ago
Joined: 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を差し替える際に他にすべきことがあるのでしょうか?

Undefined
root
Offline
Last seen: 15 hours 46 min ago
Joined: 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
Offline
Last seen: 15 hours 46 min ago
Joined: 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
Offline
Last seen: 15 hours 46 min ago
Joined: 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
Offline
Last seen: 15 hours 46 min ago
Joined: 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;
}

Log in or register to post comments

Download

latest Releases : 2.0.0-RELESE

2.0.0-RELESE Download page

Number of Projects

Choreonoid

Motion editor/Dynamics simulator

OpenHRP3

Dynamics simulator

OpenRTP

Integrated Development Platform

AIST RTC collection

RT-Components collection by AIST

TORK

Tokyo Opensource Robotics Association

DAQ-Middleware

Middleware for DAQ (Data Aquisition) by KEK