OpenRTM-aist-Python 1.1.2
公開メンバ関数 | 全メンバ一覧
OpenRTM_aist.StateMachine.StateMachine クラス

状態マシンクラス [詳解]

公開メンバ関数

def __init__ (self, num_of_state)
 コンストラクタ [詳解]
 
def setNOP (self, call_back)
 NOP関数を登録する [詳解]
 
def setListener (self, listener)
 Listener オブジェクトを登録する [詳解]
 
def setEntryAction (self, state, call_back)
 Entry action 関数を登録する [詳解]
 
def setPreDoAction (self, state, call_back)
 PreDo action 関数を登録する [詳解]
 
def setDoAction (self, state, call_back)
 Do action 関数を登録する [詳解]
 
def setPostDoAction (self, state, call_back)
 PostDo action 関数を登録する [詳解]
 
def setExitAction (self, state, call_back)
 Exit action 関数を登録する [詳解]
 
def setTransitionAction (self, call_back)
 State transition action 関数を登録する [詳解]
 
def setStartState (self, states)
 初期状態をセットする [詳解]
 
def getStates (self)
 状態を取得する [詳解]
 
def getState (self)
 現在の状態を取得する [詳解]
 
def isIn (self, state)
 現在状態を確認 [詳解]
 
def goTo (self, state)
 状態を遷移 [詳解]
 
def worker (self)
 駆動関数 [詳解]
 
def setNullFunc (self, s, nullfunc)
 NOP関数を設定 [詳解]
 
def sync (self, states)
 状態の同期処理 [詳解]
 
def need_trans (self)
 遷移の必要性チェック [詳解]
 
def 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()は次状態を強制的にセットする関数であり、遷移の可否は、 ユーザが現在状態を取得し判断するロジックを実装しなければならない。

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

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

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

から
0.4.0

構築子と解体子

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

コンストラクタ

コンストラクタ

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

メソッド詳解

def OpenRTM_aist.StateMachine.StateMachine.getState (   self)

現在の状態を取得する

現在の状態を取得する。

引数
self
戻り値
現在の状態
def OpenRTM_aist.StateMachine.StateMachine.getStates (   self)

状態を取得する

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

引数
self
戻り値
状態情報
def OpenRTM_aist.StateMachine.StateMachine.goTo (   self,
  state 
)

状態を遷移

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

引数
self
state遷移先状態
def OpenRTM_aist.StateMachine.StateMachine.isIn (   self,
  state 
)

現在状態を確認

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

引数
self
state確認対象状態
戻り値
状態確認結果
def OpenRTM_aist.StateMachine.StateMachine.need_trans (   self)

遷移の必要性チェック

引数
self
戻り値
遷移必要性確認結果
def OpenRTM_aist.StateMachine.StateMachine.setDoAction (   self,
  state,
  call_back 
)

Do action 関数を登録する

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

引数
self
state登録対象状態
call_backDo action 用コールバック関数
戻り値
アクション実行結果
def OpenRTM_aist.StateMachine.StateMachine.setEntryAction (   self,
  state,
  call_back 
)

Entry action 関数を登録する

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

引数
self
state登録対象状態
call_backEntry action 用コールバック関数
戻り値
アクション実行結果
def OpenRTM_aist.StateMachine.StateMachine.setExitAction (   self,
  state,
  call_back 
)

Exit action 関数を登録する

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

引数
self
state登録対象状態
call_backExit action 用コールバック関数
戻り値
アクション実行結果
def OpenRTM_aist.StateMachine.StateMachine.setListener (   self,
  listener 
)

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

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

引数
self
listenerListener オブジェクト
def OpenRTM_aist.StateMachine.StateMachine.setNOP (   self,
  call_back 
)

NOP関数を登録する

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

引数
self
call_backコールバック関数
def OpenRTM_aist.StateMachine.StateMachine.setNullFunc (   self,
  s,
  nullfunc 
)

NOP関数を設定

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

引数
self
sコールバック関数設定先
nullfuncコールバック関数(NOP関数)
def OpenRTM_aist.StateMachine.StateMachine.setPostDoAction (   self,
  state,
  call_back 
)

PostDo action 関数を登録する

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

引数
self
state登録対象状態
call_backPostDo action 用コールバック関数
戻り値
アクション実行結果
def OpenRTM_aist.StateMachine.StateMachine.setPreDoAction (   self,
  state,
  call_back 
)

PreDo action 関数を登録する

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

引数
self
state登録対象状態
call_backPreDo action 用コールバック関数
戻り値
アクション実行結果
def OpenRTM_aist.StateMachine.StateMachine.setStartState (   self,
  states 
)

初期状態をセットする

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

引数
self
states初期状態
def OpenRTM_aist.StateMachine.StateMachine.setTransitionAction (   self,
  call_back 
)

State transition action 関数を登録する

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

引数
self
call_backState transition 用コールバック関数
戻り値
アクション実行結果
def OpenRTM_aist.StateMachine.StateMachine.sync (   self,
  states 
)

状態の同期処理

引数
self
statesOpenRTM_aist.StateHolder<RTC.LifeCycleState>
def OpenRTM_aist.StateMachine.StateMachine.update_curr (   self,
  curr 
)

現在状態の更新

引数
self
currRTC.LifeCycleState
def OpenRTM_aist.StateMachine.StateMachine.worker (   self)

駆動関数

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

引数
self

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