Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
직접 명령은 검토 Prompt를 거치지 않습니다. 실행하기 전에 소스를 확인하세요.
npx skills add https://github.com/MIUAV/vibe-coding-ros2 --skill state-machine-transition명령은 한 줄로 유지됩니다. 복사하기 전에 가로로 스크롤해 전체 내용을 확인하세요.
로컬 사본을 원하시나요? SkillsMP에서 현재 제공할 수 있는 파일을 다운로드하세요.
SOC 직업 분류 기준
SKILL.md 표시 중
| name | state-machine-transition |
| description | 状态机转换技能 - 状态机设计、转换逻辑、层级状态机、ROS2 状态机 |
| argument-hint | 状态机 OR state machine OR transition OR hierarchical |
| user-invocable | true |
机器人状态机设计
当需要以下帮助时使用此技能:
from enum import Enum
from typing import Callable, Dict, List
import time
class StateMachine:
def __init__(self, initial_state):
self.current_state = initial_state
self.previous_state = None
self.transitions: Dict[tuple, Callable] = {}
self.state_enter_time = {}
def add_transition(self, from_state, to_state, callback=None):
"""添加转换"""
self.transitions[(from_state, to_state)] = callback
def transition_to(self, new_state):
"""执行转换"""
if (self.current_state, new_state) not in self.transitions:
raise ValueError(f"Invalid transition: {self.current_state} -> {new_state}")
# 执行转换回调
callback = self.transitions[(self.current_state, new_state)]
if callback:
callback()
# 更新状态
self.previous_state = self.current_state
self.current_state = new_state
self.state_enter_time[new_state] = time.time()
class RobotState(Enum):
INIT = 'init'
IDLE = 'idle'
NAVIGATING = 'navigating'
MANIPULATING = 'manipulating'
ERROR = 'error'
SHUTDOWN = 'shutdown'
class RobotStateMachine(StateMachine):
def __init__(self):
super().__init__(RobotState.INIT)
# 状态进入/退出回调
self.on_enter_handlers = {}
self.on_exit_handlers = {}
# 定义转换
self.setup_transitions()
def setup_transitions(self):
"""设置所有转换"""
# INIT -> IDLE
self.add_transition(RobotState.INIT, RobotState.IDLE, self.on_init_complete)
# IDLE -> NAVIGATING
self.add_transition(RobotState.IDLE, RobotState.NAVIGATING, self.on_navigation_start)
# NAVIGATING -> IDLE
self.add_transition(RobotState.NAVIGATING, RobotState.IDLE, self.on_navigation_complete)
# ANY -> ERROR
self.add_transition(RobotState.NAVIGATING, RobotState.ERROR, self.on_error)
self.add_transition(RobotState.MANIPULATING, RobotState.ERROR, self.on_error)
.add_transition(RobotState.ERROR, RobotState.IDLE, .on_recovery)
():
()
():
()
():
()
class HierarchicalState:
def __init__(self, name):
self.name = name
self.substates = {}
self.current_substate = None
self.parent = None
def add_substate(self, state, is_initial=False):
"""添加子状态"""
state.parent = self
self.substates[state.name] = state
if is_initial:
self.current_substate = state.name
def handle_event(self, event):
"""处理事件"""
if self.current_substate:
return self.substates[self.current_substate].handle_event(event)
return None
# 示例: 导航子状态机
class NavigatingState(HierarchicalState):
def __init__(self):
super().__init__('navigating')
self.planning = SubState('planning')
self.executing = SubState('executing')
self.recovering = SubState()
.add_substate(.planning, is_initial=)
.add_substate(.executing)
.add_substate(.recovering)