[openrtm-users 01378] Re: RTの状態遷移に関して

Ando Noriaki n-ando @ aist.go.jp
2010年 8月 2日 (月) 15:56:59 JST


$BCf1{Bg3X(B $B>.;3$5$s(B

$B;:Am8&(B $B0BF#$G$9(B

> $BCf1{Bg3X$N>.;3$H?=$7$^$9!#(B
>
> RTC$B$N>uBVA+0\$K4X$7$F$*J9$-$7$?$$$3$H$,$"$j$^$9!#(B
>
>
> $B8=:_!"(BonInitlize(),onActivate()$B!"(BonExecute(),onDeactivate()$B$N#4$D$N>uBVA+0\$r;H$C$F%W%m%0%i%`$r=q$$$F$^$9!#(B
>
> $B<B9T$NN.$l$H$7$F$O!"$^$:!"(B
>
> $B-!(B    onInitlize()$B$G=i4|2==hM}$r$7$F!"(B
> $B-"(B    $B%f!<%6$,(BRTSystemEditer$B$J$I$N(BGUI$BA`:n$K$h$j!"(BonInitlize()$B$+$i!"(BonActivate()$B$X>uBVA+0\$5$;$k!#(B
> $B-#(B    onActivate$B>uBV$,$*$o$C$?$i!"%f!<%6$N;X<($,$"$k$^$G(BonExecute()$B>uBV$G%k!<%W$5$;$k!#(B
> $B-$(B    $B%f!<%6$,(BRTSystemEditer$B$J$I$N(BGUI$BA`:n$K$h$j!"(BonExecute()$B$+$i!"(BonDeactivate()$B$X>uBVA+0\$5$;$k!#(B
>
> $B$H$$$&$h$&$JN.$l$K$J$C$F$$$^$9!#(B
>
> $B$G$9$,!">e5-$NN.$l$G$O$J$/!"(BonExecute()$B4X?t$rH4$$$F!"(BonActivate()$B$,=*$o$C$?$i!"(BonExecute()$B$XA+0\$9$k$N$G$O$J$/!"D>@\(BonDeactivate()$B4X?t$XA+0\$9$k$h$&$J;EAH$_$r9=C[$7$?$$$N$G$9!#!J(BonActivate()$B$+$i!"(BOnDeactivate()$B$XD>@\8~$+$o$;$?$$!K(B
>
> $B$3$N$h$&$JN.$l$KJQ99$9$k$K$O$I$N$h$&$K$9$l$P$h$$$G$9$+!)(B

$B>uBVA+0\$N;EMM$rJQ$($F$7$^$&$N$G!"B>$N(BRTC$B$H6(D4$7$FF0:n$9$k:]$K$O(B
$BLdBj$,$"$j$=$&$G$9$,!"$d$jJ}$O$$$/$D$+$"$j$^$9!#(B

onExecute() $B$KF~$C$F$O%@%a$G$7$g$&$+!)(BonExecute()$B4X?t$KF~$C$F$h$$$N$G$"$l$P!"(B

RTC::ReturnCode_t YourComponent::onExecute(RTC::UniqueId ec_id)
{
  ExecutionContext_var ec = get_context(ec_id);
  ec->deactivate_component(RTC::RTObject::_duplicate(getObjRef()));
  // duplicate $B$O$$$i$J$$$+$b$7$l$J$$!#!#!#!#(B
  std::cout << "I'm going to Inactive state." <<std::endl;
  return RTC::RTC_OK;
}

$B$3$l$G!"(BonExecute $B$O(B1$B2s$GH4$1$F(BInactive$B>uBV$KA+0\$7$^$9!#(B

$B$I$&$7$F$b(BonExecute$B$rDL$j$?$/$J$$$N$G$"$l$P!"0lC6(BError$B>uBV$KA+0\$5$;(B
(onActivated $B$G(B ERROR$B$r(Breturn$B$9$k(B) onError$B$G(Breset_component$B$r>e5-$N(B
$B$h$&$K8F$Y$P!"(BError$B>uBV7PM3$G(BInactive$B>uBV$KA+0\$7$^$9!#(B

> $B$^$?!"%W%m%0%i%`$NCf$G-!!A-$$N;EAH$_$r5-=R$7$F$$$k$N$O$I$3$G$9$+!)(B

PeriodicExecutionContext.h $B$NCf$K0J2<$N$h$&$J5-=R$,$"$j$^$9!#(B
      DFPBase(RTC::ExecutionContextHandle_t id)
        : ec_id(id), m_sm(NUM_OF_LIFECYCLESTATE)
      {
        m_sm.setListener(this);
        m_sm.setEntryAction (ACTIVE_STATE, &DFPBase::on_activated);
        m_sm.setDoAction    (ACTIVE_STATE, &DFPBase::on_execute);
        m_sm.setPostDoAction(ACTIVE_STATE, &DFPBase::on_state_update);
        m_sm.setExitAction  (ACTIVE_STATE, &DFPBase::on_deactivated);
        m_sm.setEntryAction (ERROR_STATE,  &DFPBase::on_aborting);
        m_sm.setDoAction    (ERROR_STATE,  &DFPBase::on_error);
        m_sm.setExitAction  (ERROR_STATE,  &DFPBase::on_reset);

        ECStates st;
        st.prev = INACTIVE_STATE;
        st.curr = INACTIVE_STATE;
        st.next = INACTIVE_STATE;
        m_sm.setStartState(st);
        m_sm.goTo(INACTIVE_STATE);
      }
$B$3$l$G!"3F>uBVA+0\%"%/%7%g%s$N%3!<%k%P%C%/$r @ _Dj$7$F$$$^$9!#(B
$B$^$?!"(BPeriodicExecutionContext.cpp|h $BFb$K!"(B

m_sm.goTo(ACTIVE_STATE);

$B$N$h$&$K(BgoTo() $B4X?t$,$"$j!"$3$3$G3F%$%Y%s%H$4$H$NA+0\@h(B
$B$r5-=R$7$F$$$^$9!#$?$@$7!"(BPeriodicExecutionContext $B$K(B
$B<j$rF~$l$k$N$O$"$^$j$*4+$a$7$^$;$s$,!#(B

> $B3+H/4D6-$O(BOpenRTM-aist1.0.0$B!!(BOS$B$O(Bubuntu10.04$B!!#c!\!\8 @ 8l$G$9!#(B
> RT$B$N4pK\E*$J9=B$$OGD0.$G$-$F$$$^$9!#(B
> $B$h$m$7$/$*4j$$$$$?$7$^$9!#(B

$B0J>e$G2sEz$K$J$C$F$^$9$G$7$g$&$+!)(B

-- 
$B0BF#7D><!wFHN)9T@/K!?M;:6H5;=QAm9g8&5f=j(B $BCNG=%7%9%F%`8&5fItLg(B
    $BE}9gCNG=8&5f%0%k!<%W(B $B<gG$8&5f0w(B, $BGn;N(B($B9)3X(B)
    $B")(B305-8568 $B$D$/$P;TG_1`(B1-1-1 $BCf1{Bh(B2
    e-mail: n-ando @ aist.go.jp, web: http://staff.aist.go.jp/n-ando
    OpenRTM-aist: http://www.openrtm.org




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