複数の ROS 2 LifecycleNode をまとめて状態管理し、システム全体の状態を
SemanticState として扱う検証用パッケージです。
状態遷移は TransitionRecipe(複数ノードに対する操作手順)として定義し、
Graph で得られる state_id と遷移戦略に基づいて実行します。
- 複数 LifecycleNode の状態取得と
SemanticState化 SemanticStateから state_id を引く状態グラフ (Graph)- state_id 間の遷移を
TransitionRecipeとして定義 - 遷移判定ロジック(時間/位置など)を戦略クラスとして分離
- 動作確認用のサンプル LifecycleNode(A/B/C)と簡易シミュレータ
multiple_node_managerがnode_idsの各ノードにGetStateを送信- 取得した状態を
SemanticStateに集約しGraphで state_id を決定 SwitchingStrategyが遷移条件を判定して target state を決定recipe_generatorがTransitionRecipeを生成ChangeStateを順番に呼び出してレシピを実行
include/transition_judge_node/common_types.hpp
SemanticState/TransitionRecipe/ActionStepなどの共通型include/transition_judge_node/graph.hpp/graph_generator.hpp
状態グラフの辞書と YAML からの初期化include/transition_judge_node/recipe_generator.hpp/src/recipe_generator.cpp
state_id 間の遷移レシピ(手書きで定義)include/transition_judge_node/switching_strategy.hpp/src/switching_strategy.cpp
遷移発火判定(時間・位置など)src/multiple_node_manager.cpp
状態取得、Graph マッチ、遷移判定、レシピ実行を統合するメインノードsrc/sample/a_node.cpp/b_node.cpp/c_node.cpp
LifecycleNode のサンプル。active 時にcmd_velを出力src/sample/simulator_node.cpp
cmd_velを簡易積分し、odom/current_pose/ TF / Marker を配信
colcon build --packages-select transition_judge_node
source install/setup.bashros2 launch transition_judge_node test_multiple_target.launch.pyconfig/sample/multiple_nodes.yaml
管理対象のnode_idsを列挙config/sample/state_graph.yaml
state_id と各ノードの状態定義config/sample/sim_params.yaml
シミュレータの初期位置・更新レート
graph_yaml_path
状態グラフ YAML を上書きするための引数
例:
ros2 launch transition_judge_node test_multiple_target.launch.py \
graph_yaml_path:=/path/to/state_graph.yamlswitching_strategy.cppの判定ロジックを差し替えて遷移条件を変更recipe_generator.cppに遷移レシピを追加して組み合わせを拡充state_graph.yamlを増やしてシステム状態を追加
recipe_generator.cppに未定義の遷移は空レシピ(description のみ)になります。graph_yaml_pathが空の場合、multiple_node_managerは例外を投げます。multiple_node_managerはcurrent_poseを利用します(シミュレータや実機側で publish が必要)。