OpenRTM-aist 2.1.0
|
状態マシンクラス [詳解]
#include <StateMachine.h>
公開メンバ関数 | |
StateMachine (int num_of_state) | |
コンストラクタ | |
virtual | ~StateMachine () |
StateMachine (const StateMachine &other) | |
StateMachine & | operator= (const StateMachine &other) |
void | swap (StateMachine &other) |
void | setNOP (Callback call_back) |
NOP関数を登録する | |
void | setListener (Listener *listener) |
Listener オブジェクトを登録する | |
bool | setEntryAction (State state, Callback call_back) |
Entry action 関数を登録する | |
bool | setPreDoAction (State state, Callback call_back) |
PreDo action 関数を登録する | |
bool | setDoAction (State state, Callback call_back) |
Do action 関数を登録する | |
bool | setPostDoAction (State state, Callback call_back) |
PostDo action 関数を登録する | |
bool | setExitAction (State state, Callback call_back) |
Exit action 関数を登録する | |
bool | setTransitionAction (Callback call_back) |
State transition action 関数を登録する | |
void | setStartState (States states) |
初期状態をセットする | |
States | getStates () |
状態を取得する | |
State | getState () |
現在の状態を取得する | |
bool | isIn (State state) |
現在状態を確認 | |
void | goTo (State state) |
状態を遷移 | |
void | worker () |
駆動関数 | |
void | worker_pre () |
void | worker_do () |
void | worker_post () |
限定公開メンバ関数 | |
void | setNullFunc (std::vector< Callback > &s, Callback nullfunc) |
NOP関数を設定 | |
限定公開変数類 | |
int | m_num |
状態数 | |
Listener * | m_listener |
コールバック関数用リスナー | |
std::vector< Callback > | m_entry |
Entry action 用コールバック関数 | |
std::vector< Callback > | m_predo |
PreDo action 用コールバック関数 | |
std::vector< Callback > | m_do |
Do action 用コールバック関数 | |
std::vector< Callback > | m_postdo |
PostDo action 用コールバック関数 | |
std::vector< Callback > | m_exit |
Exit action 用コールバック関数 | |
Callback | m_transit |
State transition action 用コールバック関数 | |
States | m_states |
現在の状態情報 | |
bool | m_selftrans |
std::mutex | m_mutex |
状態マシンクラス
StateMachine クラスは状態マシンを実現するクラスである。
例: ActiveObjectは状態マシンを持つアクティブオブジェクトであるとする。 状態は3状態 INACTIVE, ACTIVE, ERROR があり、各状態でのEntryやExit動作を 定義したいとすると、以下のように実現される。
class ActiveObject { public: enum MyState { INACTIVE, ACTIVE, ERROR }; using MyStates = States<MyState>; ActiveObject() : m_sm(3) { m_sm.setNOP(&ActiveObject::nullAction); m_sm.setListener(this); m_sm.setExitAction(INACTIVE, &ActiveObject::inactiveExit); : m_sm.setPostDoAction(ERROR, &ActiveObject::errorPostDo); m_sm.setTransitionAction(&ActiveObject:transition); }; bool nullAction(MyStates st) {}; bool inactiveExit(MyStates st) {}; : bool errorPostDo(MyStates st) {}; bool transition(MyStates st) {}; private: StateMachine<MyState, bool, ActiveObject> m_sm; };
状態を持たせたいクラスは以下の条件を満たすように実装しなければならない。
このクラスは、一つの状態に対して、
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 が繰り返し実行される。
State | 状態の型 |
Listener | アクション用リスナーオブジェクト |
States | 状態ホルダー |
Callback | アクション用コールバック関数 |
|
inlineexplicit |
コンストラクタ
|
virtualdefault |
|
inline |
|
inline |
現在の状態を取得する
|
inline |
状態を取得する
|
inline |
状態を遷移
|
inline |
現在状態を確認
|
inline |
|
inline |
Do action 関数を登録する
|
inline |
Entry action 関数を登録する
|
inline |
Exit action 関数を登録する
|
inline |
Listener オブジェクトを登録する
|
inline |
NOP関数を登録する
|
inlineprotected |
NOP関数を設定
|
inline |
PostDo action 関数を登録する
|
inline |
PreDo action 関数を登録する
|
inline |
初期状態をセットする
|
inline |
State transition action 関数を登録する
|
inline |
参照先 RTC_Utils::StateMachine< State, Listener, States, Callback >::m_do, RTC_Utils::StateMachine< State, Listener, States, Callback >::m_entry, RTC_Utils::StateMachine< State, Listener, States, Callback >::m_exit, RTC_Utils::StateMachine< State, Listener, States, Callback >::m_listener, RTC_Utils::StateMachine< State, Listener, States, Callback >::m_num, RTC_Utils::StateMachine< State, Listener, States, Callback >::m_postdo, RTC_Utils::StateMachine< State, Listener, States, Callback >::m_predo, RTC_Utils::StateMachine< State, Listener, States, Callback >::m_selftrans, RTC_Utils::StateMachine< State, Listener, States, Callback >::m_states, RTC_Utils::StateMachine< State, Listener, States, Callback >::m_transit.
|
inline |
駆動関数
|
inline |
|
inline |
|
inline |
|
protected |
Do action 用コールバック関数
参照元 RTC_Utils::StateMachine< State, Listener, States, Callback >::swap().
|
protected |
Entry action 用コールバック関数
参照元 RTC_Utils::StateMachine< State, Listener, States, Callback >::swap().
|
protected |
Exit action 用コールバック関数
参照元 RTC_Utils::StateMachine< State, Listener, States, Callback >::swap().
|
protected |
コールバック関数用リスナー
参照元 RTC_Utils::StateMachine< State, Listener, States, Callback >::swap().
|
protected |
|
protected |
|
protected |
PostDo action 用コールバック関数
参照元 RTC_Utils::StateMachine< State, Listener, States, Callback >::swap().
|
protected |
PreDo action 用コールバック関数
参照元 RTC_Utils::StateMachine< State, Listener, States, Callback >::swap().
|
protected |
|
protected |
|
protected |
State transition action 用コールバック関数
参照元 RTC_Utils::StateMachine< State, Listener, States, Callback >::swap().