跳到主要内容

FSM 控制

set_fsm_state()​

Python
set_fsm_state(state: int) -> bool

切换整机 FSM 状态。返回 True 仅表示 Aurora 已接收并受理该请求;它不等于目标任务已经启动。超时或参数不合法时返回 False。

参数类型说明
stateint目标状态的 DDS 映射值,见下表

可用状态参见 状态和任务概览。UserController_* 到实际算法的映射由机器人上的 user_runner_config.yaml 定义。

示例

Python
import os
import time

os.environ.setdefault("FASTDDS_BUILTIN_TRANSPORTS", "UDPv4") # 机器人上运行必须设置

from fourier_aurora_client import AuroraClient

client = AuroraClient.get_instance(domain_id=123, robot_name="grw")
try:
time.sleep(1.0)
target_state = 3
if not client.set_fsm_state(target_state):
raise RuntimeError("Aurora 未受理状态切换请求")

deadline = time.monotonic() + 4.0
while client.get_fsm_state() != target_state:
if time.monotonic() >= deadline:
raise RuntimeError("状态未在规定时间内切换到 UserController_A")
time.sleep(0.05)
print(f"current state: {client.get_fsm_state()} ({client.get_fsm_name()})")
finally:
client.close()

get_fsm_state()​

Python
get_fsm_state() -> int

返回当前整机 FSM 状态的 DDS 映射值。


get_fsm_name()​

Python
get_fsm_name() -> str

返回当前整机 FSM 状态的名称字符串,例如 "UserController_A"。

示例

Python
import os
import time

os.environ.setdefault("FASTDDS_BUILTIN_TRANSPORTS", "UDPv4") # 机器人上运行必须设置

from fourier_aurora_client import AuroraClient

client = AuroraClient.get_instance(domain_id=123, robot_name="grw")
try:
time.sleep(1.0) # 等待状态数据到达
print(client.get_fsm_state()) # 3
print(client.get_fsm_name()) # "UserController_A"
finally:
client.close()

set_upper_fsm_state()​

Python
set_upper_fsm_state(state: int) -> bool

切换上半身 FSM 状态。GR-W 当前任务映射不使用独立的上半身 FSM;请通过 set_fsm_state(3) 或 set_fsm_state(4) 选择 grw_policy_task 或 upper_body_tele_task。

GR-W 说明

GR-W 不需要调用此接口。在整机状态 3 下向当前上半身默认值 0 发起请求,服务返回 False,上半身状态保持 Default。上半身遥操作直接映射到整机状态 4,不要将本接口用作其替代。


get_upper_fsm_state()​

Python
get_upper_fsm_state() -> int

返回上半身 FSM 状态的 DDS 映射值。GR-W 当前工作流不使用该值。


get_upper_fsm_name()​

Python
get_upper_fsm_name() -> str

返回上半身 FSM 状态名称。GR-W 当前工作流不使用该值。