クラス OpenRTM_aist.StateMachine.StateMachine

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

すべてのメンバ一覧

Public メソッド

def __init__
 コンストラクタ
def setNOP
 NOP関数を登録する.
def setListener
 Listener オブジェクトを登録する.
def setEntryAction
 Entry action 関数を登録する.
def setPreDoAction
 PreDo action 関数を登録する.
def setDoAction
 Do action 関数を登録する.
def setPostDoAction
 PostDo action 関数を登録する.
def setExitAction
 Exit action 関数を登録する.
def setTransitionAction
 State transition action 関数を登録する.
def setStartState
 初期状態をセットする
def getStates
 状態を取得する
def getState
 現在の状態を取得する
def isIn
 現在状態を確認
def goTo
 状態を遷移
def worker
 駆動関数
def setNullFunc
 NOP関数を設定.
def sync
 状態の同期処理
def need_trans
 遷移の必要性チェック
def update_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_back Do action 用コールバック関数
戻り値:
アクション実行結果
def OpenRTM_aist.StateMachine.StateMachine.setEntryAction (   self,
  state,
  call_back 
)

Entry action 関数を登録する.

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

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

Exit action 関数を登録する.

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

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

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

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

引数:
self 
listener Listener オブジェクト
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_back PostDo action 用コールバック関数
戻り値:
アクション実行結果
def OpenRTM_aist.StateMachine.StateMachine.setPreDoAction (   self,
  state,
  call_back 
)

PreDo action 関数を登録する.

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

引数:
self 
state 登録対象状態
call_back PreDo 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_back State transition 用コールバック関数
戻り値:
アクション実行結果
def OpenRTM_aist.StateMachine.StateMachine.sync (   self,
  states 
)

状態の同期処理

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

現在状態の更新

引数:
self 
curr RTC.LifeCycleState
def OpenRTM_aist.StateMachine.StateMachine.worker (   self  ) 

駆動関数

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

引数:
self 

このクラスの説明は次のファイルから生成されました:
OpenRTM-aist-1.1.0-Pythonに対してMon Mar 2 14:14:09 2015に生成されました。  doxygen 1.6.3