OpenRTM-aist-Python 1.1.2
|
状態マシンクラス [詳解]
公開メンバ関数 | |
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
状態を持たせたいクラスは以下の条件を満たすように実装しなければならない。
このクラスは、一つの状態に対して、
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 が繰り返し実行される。
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 | |||
) |
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 |