OpenRTM-aist-Python 2.0.2
OpenRTM_aist.StateMachine.StateMachine クラス

[詳解]

公開メンバ関数

 __init__ (self, num_of_state)
 
 setNOP (self, call_back)
 
 setListener (self, listener)
 
 setEntryAction (self, state, call_back)
 
 setPreDoAction (self, state, call_back)
 
 setDoAction (self, state, call_back)
 
 setPostDoAction (self, state, call_back)
 
 setExitAction (self, state, call_back)
 
 setTransitionAction (self, call_back)
 
 setStartState (self, states)
 
 getStates (self)
 
 getState (self)
 
 isIn (self, state)
 
 goTo (self, state)
 
 worker (self)
 
 setNullFunc (self, s, nullfunc)
 
 sync (self, states)
 
 need_trans (self)
 
 update_curr (self, curr)
 

詳解

状態マシンクラス

StateMachine クラスは状態マシンを実現するクラスである。

例: ActiveObjectは状態マシンを持つアクティブオブジェクトであるとする。 状態は3状態 INACTIVE, ACTIVE, ERROR があり、各状態でのEntryやExit動作を 定義したいとすると、以下のように実現される。

 class ActiveObject:
   class MyState:
     INACTIVE, ACTIVE, ERROR = range(3)

   def __init__(self):
     m_sm = StateMachine(3)
     m_sm.setNOP(nullAction)
     m_sm.setListener(self)

     m_sm.setExitAction(MyState.INACTIVE, self.inactiveExit)
       :
     m_sm.setPostDoAction(MyState.ERROR, self.errorPostDo)
     m_sm.setTransitionAction(self.transition);

   def nullAction(myStates):
     pass
   def inactiveExit(myStates):
     pass
     :
   def errorPostDo(myStates):
     pass
   def transition(myStates:
     pass
 

状態を持たせたいクラスは以下の条件を満たすように実装しなければならない。

  1. 内部クラスで状態を定義
  2. StateMachine のコンストラクタ引数は状態の数
  3. 以下のアクション関数を(Return function_name(States)) の関数として設定
    1. 何もしない関数を必ず定義し、setNOP で与えなければならない
    2. 各状態毎に, set(Entry|PreDo|Do|PostDo|Exit)Action でアクションを設定
    3. 状態遷移時のアクションを setTransitionAction() で設定。
  4. 遷移時のアクションは、与えられた現在状態、次状態、前状態を元に、 ユーザが実装しなければならない。
  5. 状態の変更は goTo() で、状態のチェックは isIn(state) で行う。
  6. goTo()は次状態を強制的にセットする関数であり、遷移の可否は、 ユーザが現在状態を取得し判断するロジックを実装しなければならない。

このクラスは、一つの状態に対して、

  • Entry action
  • PreDo action
  • Do action
  • PostDo action
  • Exit action

5つのアクションが定義することができる。 Transition action はあらゆる状態間遷移で呼び出されるアクションで、 その振る舞いはユーザが定義しなければならない。

このクラスは以下のようなタイミングで各アクションが実行される。

  • 状態が変更され(A->B)状態が遷移する場合
    (A:Exit)->|(状態更新:A->B)->(B:Entry)->(B:PreDo)->(B:Do)->(B:PostDo)

  • 状態が変更されず、B状態を維持する場合 (|はステップの区切りを表す)
    (B(n-1):PostDo)->|(B(n):PreDo)->(B(n):Do)->(B(n):PostDo)->|(B(n+1):PreDo)
    PreDo, Do, PostDo が繰り返し実行される。

  • 自己遷移する場合
    (B(n-1):PostDo)->(B(n-1):Exit)->|(B(n):Entry)->(B(n):PreDo)
    一旦 Exit が呼ばれた後、Entry が実行され、以降は前項と同じ動作をする。
から
0.4.0

構築子と解体子

◆ __init__()

OpenRTM_aist.StateMachine.StateMachine.__init__ ( self,
num_of_state )

コンストラクタ

コンストラクタ

引数
self
num_of_stateステートマシン中の状態数

メソッド詳解

◆ getState()

OpenRTM_aist.StateMachine.StateMachine.getState ( self)

現在の状態を取得する

現在の状態を取得する。

引数
self
戻り値
現在の状態

◆ getStates()

OpenRTM_aist.StateMachine.StateMachine.getStates ( self)

状態を取得する

状態情報を取得する。 現在の状態、1つ前の状態、遷移予定の状態を取得することができる。

引数
self
戻り値
状態情報

◆ goTo()

OpenRTM_aist.StateMachine.StateMachine.goTo ( self,
state )

状態を遷移

指定した状態に状態を遷移する。 本関数は次状態を強制的にセットする関数である。 このため、遷移の可否は、ユーザが現在状態を取得し判断するロジックを 実装しなければならない。 遷移先が現在の状態と同じ場合には、自己遷移フラグをセットする。

引数
self
state遷移先状態

◆ isIn()

OpenRTM_aist.StateMachine.StateMachine.isIn ( self,
state )

現在状態を確認

現在の状態が、引数で指定した状態と一致するか確認する。

引数
self
state確認対象状態
戻り値
状態確認結果

◆ need_trans()

OpenRTM_aist.StateMachine.StateMachine.need_trans ( self)

遷移の必要性チェック

引数
self
戻り値
遷移必要性確認結果

◆ setDoAction()

OpenRTM_aist.StateMachine.StateMachine.setDoAction ( self,
state,
call_back )

Do action 関数を登録する

各状態内で実行される Do action 用コールバック関数を登録する。

引数
self
state登録対象状態
call_backDo action 用コールバック関数
戻り値
アクション実行結果

◆ setEntryAction()

OpenRTM_aist.StateMachine.StateMachine.setEntryAction ( self,
state,
call_back )

Entry action 関数を登録する

各状態に入った際に実行される Entry action 用コールバック関数を登録する。

引数
self
state登録対象状態
call_backEntry action 用コールバック関数
戻り値
アクション実行結果

◆ setExitAction()

OpenRTM_aist.StateMachine.StateMachine.setExitAction ( self,
state,
call_back )

Exit action 関数を登録する

各状態内で実行される Exit action 用コールバック関数を登録する。

引数
self
state登録対象状態
call_backExit action 用コールバック関数
戻り値
アクション実行結果

◆ setListener()

OpenRTM_aist.StateMachine.StateMachine.setListener ( self,
listener )

Listener オブジェクトを登録する

各種アクション実行時に呼び出される Listener オブジェクトを登録する。

引数
self
listenerListener オブジェクト

◆ setNOP()

OpenRTM_aist.StateMachine.StateMachine.setNOP ( self,
call_back )

NOP関数を登録する

NOP関数(何もしない関数)を登録する。

引数
self
call_backコールバック関数

◆ setNullFunc()

OpenRTM_aist.StateMachine.StateMachine.setNullFunc ( self,
s,
nullfunc )

NOP関数を設定

NOP関数(何もしない関数)を登録する。

引数
self
sコールバック関数設定先
nullfuncコールバック関数(NOP関数)

◆ setPostDoAction()

OpenRTM_aist.StateMachine.StateMachine.setPostDoAction ( self,
state,
call_back )

PostDo action 関数を登録する

各状態内で実行される PostDo action 用コールバック関数を登録する。

引数
self
state登録対象状態
call_backPostDo action 用コールバック関数
戻り値
アクション実行結果

◆ setPreDoAction()

OpenRTM_aist.StateMachine.StateMachine.setPreDoAction ( self,
state,
call_back )

PreDo action 関数を登録する

各状態内で実行される PreDo action 用コールバック関数を登録する。

引数
self
state登録対象状態
call_backPreDo action 用コールバック関数
戻り値
アクション実行結果

◆ setStartState()

OpenRTM_aist.StateMachine.StateMachine.setStartState ( self,
states )

初期状態をセットする

ステートマシンの初期状態を設定する。

引数
self
states初期状態

◆ setTransitionAction()

OpenRTM_aist.StateMachine.StateMachine.setTransitionAction ( self,
call_back )

State transition action 関数を登録する

状態遷移時に実行される State transition action 用コールバック関数を 登録する。

引数
self
call_backState transition 用コールバック関数
戻り値
アクション実行結果

◆ sync()

OpenRTM_aist.StateMachine.StateMachine.sync ( self,
states )

状態の同期処理

引数
self
statesOpenRTM_aist.StateHolder<RTC.LifeCycleState>

◆ update_curr()

OpenRTM_aist.StateMachine.StateMachine.update_curr ( self,
curr )

現在状態の更新

引数
self
currRTC.LifeCycleState

◆ worker()

OpenRTM_aist.StateMachine.StateMachine.worker ( self)

駆動関数

ステートマシンの駆動関数。 実際の状態遷移および状態遷移発生時の各アクションの呼びだしを実行する。

引数
self

このクラス詳解は次のファイルから抽出されました: