5.1.4 运控状态查询

机器人以 10Hz 频率发布运控状态话题,包含输入源、动作、姿态、速度等完整状态信息。

运控状态话题

话题名称

数据类型

描述

QoS

频率

/aima/mc/common/state

McCommonState

运控状态(输入源、动作、姿态、速度等)

BEST_EFFORT+TRANSIENT_LOCAL

机器人发布(10Hz)

  • McCommonState ros2-msg @ mc/data/msg/McCommonState.msg

    # 机器人运控状态
    # 话题名称: /aima/mc/common/state
    
    MessageHeader header                 # 公共消息头
    
    McInputSource input_source           # 输入源信息
    McActionInfo action_info             # 当前动作信息
    McRuntimeModel runtime_model         # 运行模型信息
    McMotionStatus motion_status         # 动作运行信息
    McServoStatus servo_status           # 伺服控制运行信息
    McFsmState fsm_state                 # 有限状态机状态(fsm_state.current_state:
                                         #   0 (UNKNOWN 未知)
                                         #   1 (PREPARE 预备)
                                         #   2 (START 启动中)
                                         #   3 (FINISH 结束)
                                         #   4 (STABLE 稳定)
                                         #   5 (MOVING 运动中)
                                         #   6 (SAFE 安全)
                                         #   7 (SPECIAL 特殊)
                                         #   8 (TEST 测试))
    McBodyPoseStatus body_status         # 机器人姿态状态(body_status.value:
                                         #   0 (MC_BODY_POSE_UNKOWN 未知)
                                         #   1 (MC_BODY_POSE_STAND 站立)
                                         #   2 (MC_BODY_POSE_LIE_FACE_UP 仰卧)
                                         #   3 (MC_BODY_POSE_LIE_FACE_DOWN 俯卧)
                                         #   4 (MC_BODY_POSE_SIT 坐)
                                         #   5 (MC_BODY_POSE_SQUAT 蹲)
                                         #   6 (FALLING 摔倒))
    McLocomotionSpeedStatus speed_status # 走跑速度状态
    
    • McInputSource ros2-msg @ mc/motion/msg/McInputSource.msg

      # 输入源信息
      string name                        # 当前选定的输入源名称, 如rc/vr/app_proxy/...
      int32 priority                     # 配置状态:优先级(0-100)
      int32 timeout                      # 配置状态:超时时间(单位:ms),默认 1000
      
    • McActionInfo ros2-msg @ mc/action/msg/McActionInfo.msg

      # 当前运行的Action
      McAction current_action            # 预留
      string action_desc                 # 模式名称, 如 "STAND_DEFAULT"
      McActionStatus status              # Action状态(status.value:0 (IDLE 空闲), 100 (RUNNING 运行中), 200 (TRANSITION 切换中), 300 (UNINTERRUPTIBLE_TRANSITION 不可中断切换中))
      
    • McRuntimeModel ros2-msg @ mc/data/msg/McRuntimeModel.msg

      # 运行模型信息
      bool waist_status                  # 内部实现细节,用户无需关心
      McHandStatus left_hand_status      # 左手手部状态(left_hand_status.value:1 (OMNI_HAND 灵巧手), 2 (OMNI_PICKER 夹爪))
      McHandStatus right_hand_status     # 右手手部状态(right_hand_status.value:1 (OMNI_HAND 灵巧手), 2 (OMNI_PICKER 夹爪))
      
    • McMotionStatus ros2-msg @ mc/data/msg/McMotionStatus.msg

      # 动作运行信息
      McPlayerState player_state         # 动作运行状态(player_state.value:
                                         #   0 (IDLE 空闲)
                                         #   1 (PRE_PLAYING 预播放)
                                         #   2 (PLAYING 播放中)
                                         #   3 (INTERRUPTING 打断中)
                                         #   4 (ERROR 错误))
      McControlArea control_area         # 控制区域(control_area.value:0 (NONE 无), 1 (LEFT_HAND 左手), 2 (RIGHT_HAND 右手), 4 (HEAD 头部), 8 (WAIST 腰部),位掩码可组合)
      string motion                      # 动作名称
      McMotionType type                  # 动作类型(type.value:0 (NONE 无), 1 (ANIMATION 动画), 2 (MIMIC 模仿), 3 (FOUNDATION 基座))
      
    • McServoStatus ros2-msg @ mc/data/msg/McServoStatus.msg

      # 伺服控制运行状态
      bool squat_enable                  # 是否处于下蹲恢复站立过程
      float64 squat_offset               # 下蹲高度偏置(0.0=站直, -0.5=蹲到最低)
      uint32 squat_limit                 # 下蹲限位状态(squat_limit:0 (BEFORE_LIMIT 未到限位), 1 (LOWER_LIMIT 下蹲到下限), 2 (UPPER_LIMIT 下蹲到上限))
      float64 head_yaw_offset            # 头部偏航偏置(单位:rad)
      float64 head_pitch_offset          # 头部俯仰偏置(单位:rad)
      float64 waist_yaw_offset           # 腰部偏航偏置(单位:rad)
      float64 waist_pitch_offset         # 腰部俯仰偏置(单位:rad)
      float64 waist_roll_offset          # 腰部横滚偏置(单位:rad)
      
    • McLocomotionSpeedStatus ros2-msg @ mc/motion/msg/McLocomotionSpeedStatus.msg

      # 走跑速度状态
      McLocomotionSpeedMode speed_mode           # 速度模式(speed_mode.value:0 (MC_LOCOMOTION_NONE_SPEED 无), 1 (MC_LOCOMOTION_LOW_SPEED 低速), 2 (MC_LOCOMOTION_MEIDUM_SPEED 中速), 3 (MC_LOCOMOTION_HIGH_SPEED 高速))
      McLocomotionSpeedBounds forward_bounds     # 前进速度边界(min_value:最大后退速度, max_value:最大前进速度,单位:m/s)
      McLocomotionSpeedBounds lateral_bounds     # 左右速度边界(min_value:最大右移速度, max_value:最大左移速度,单位:m/s)
      McLocomotionSpeedBounds angular_bounds     # 旋转速度边界(min_value:最大右旋速度, max_value:最大左旋速度,单位:rad/s)
      

      速度模式(SpeedMode)决定走跑控制指令的速度边界(bounds)。用户通过 /aima/mc/locomotion/velocity 下发的速度指令会被当前速度模式对应的 bounds 限制。各档位 bounds 的典型值见下表(具体以实机为准):

      速度模式

      值

      forward bounds(m/s)

      lateral bounds(m/s)

      angular bounds(rad/s)

      NONE(无)

      0

      0 ~ 0

      0 ~ 0

      0 ~ 0

      LOW(低速,默认)

      1

      -1.0 ~ +0.8

      -1.0 ~ +1.0

      -1.0 ~ +1.0

      MEDIUM(中速)

      2

      -1.0 ~ +1.2

      -1.0 ~ +1.0

      -1.0 ~ +1.0

      HIGH(高速)

      3

      -1.0 ~ +1.8

      -1.0 ~ +1.0

      -1.0 ~ +1.0

      STEP(越野)

      4

      -2.0 ~ +2.0

      -1.0 ~ +1.0

      -1.0 ~ +1.0

      越野速度模式(STEP,值 4)不可通过服务直接切换,仅在进入越野模式(LOCOMOTION_STEP)时由系统自动选定,退出后恢复原模式。越野模式期间手动切换速度模式的请求会被拒绝。

      速度模式可被以下场景自动切换:

      • 安全保护触发:机器人检测到异常(如摔倒等)时自动切到低速,恢复时切回原模式

      • 越野模式:进入越野模式(LOCOMOTION_STEP)时自动切到越野速度模式(STEP),退出时恢复

      • 灵动平台群控(linkswarm 输入源):linkswarm 输入源启用时自动切到高速,退出时恢复

      默认速度模式为低速(LOW_SPEED)。

      警告

      严禁对内置输入源(特别是 linkswarm,灵动平台专用)进行添加、修改、删除、启用、禁用等任何操作,也不得在控制消息的输入源字段中使用内置输入源。 直接操作或使用内置输入源会导致控制权冲突、机器人失控等不可预期行为,后果自负。详见输入源配置。

状态字段说明

common/state 各字段按功能分组,说明其更新方式及含义:

输入源

common/state 字段

如何更新

说明

input_source

发布速度/姿态指令时自动更新(通过 /aima/mc/locomotion/velocity / 姿态控制话题)

当前输入源信息(仅反映速度/姿态指令的控制权。调用 SetMcPresetMotion / SetMcMotion / SetMcAction 等动作服务不会更新此字段。可通过 GetCurrentInputSource 服务查询)

动作状态

以下字段为状态反馈,无直接控制接口。如需控制动作,请调用 SetMcPresetMotion / SetMcAction 等服务。

common/state 字段

说明

action_info.current_action

当前动作(预留)

action_info.action_desc

动作描述(如 “STAND_DEFAULT”)

action_info.status

动作状态(0 (IDLE 空闲), 100 (RUNNING 运行中), 200 (TRANSITION 切换中), 300 (UNINTERRUPTIBLE_TRANSITION 不可中断切换中))

motion_status.player_state

上肢动作运行状态(0 (IDLE 空闲), 1 (PRE_PLAYING 预播放), 2 (PLAYING 播放中), 3 (INTERRUPTING 打断中), 4 (ERROR 错误))

fsm_state.current_state

有限状态机状态(0 (UNKNOWN 未知), 1 (PREPARE 预备), 2 (START 启动中), 3 (FINISH 结束), 4 (STABLE 稳定), 5 (MOVING 运动中), 6 (SAFE 安全), 7 (SPECIAL 特殊), 8 (TEST 测试))

关节伺服状态

以下字段为状态反馈,无直接控制接口。

common/state 字段

说明

servo_status.squat_enable

是否处于下蹲恢复站立过程

servo_status.squat_offset

下蹲高度偏置(0.0=站直, -0.5=蹲到最低)

servo_status.squat_limit

下蹲限位状态(0 (BEFORE_LIMIT 未到限位), 1 (LOWER_LIMIT 下蹲到下限), 2 (UPPER_LIMIT 下蹲到上限))

servo_status.head_*_offset

头部偏航/俯仰偏置(单位:rad)

servo_status.waist_*_offset

腰部偏航/俯仰/横滚偏置(单位:rad)

runtime_model.left/right_hand_status

手部类型(1 (OMNI_HAND 灵巧手), 2 (OMNI_PICKER 夹爪))

备注

其中 runtime_model.waist_status 为内部实现细节,用户无需关心。

走跑速度

common/state 字段

对应的控制接口 / 话题

说明

speed_status.speed_mode

速度模式由手机 APP 切换或系统自动切换(安全保护/越野模式/灵动平台群控触发)

当前走跑速度模式(0 (NONE 无), 1 (LOW 低速), 2 (MEDIUM 中速), 3 (HIGH 高速), 4 (STEP 越野))。默认为低速。越野速度模式不可直接切换,仅在越野模式下自动选定

speed_status.forward_bounds

/aima/mc/locomotion/velocity.forward_velocity

当前前进速度边界(单位:m/s),由当前速度模式决定

speed_status.lateral_bounds

/aima/mc/locomotion/velocity.lateral_velocity

当前左右速度边界(单位:m/s),由当前速度模式决定

speed_status.angular_bounds

/aima/mc/locomotion/velocity.angular_velocity

当前旋转速度边界(单位:rad/s),由当前速度模式决定

用户下发的走跑控制速度指令会被当前速度模式对应的 bounds 限制。用户应结合本章节的速度模式与 bounds 信息与走跑控制章节的速度指令说明,确定当前可用的速度范围。

姿态

以下字段为状态反馈,无直接控制接口。如需控制姿态,请发布姿态控制话题(待开放)。

common/state 字段

说明

body_status.value

当前机器人姿态(0 (UNKNOWN 未知), 1 (STAND 站立), 2 (LIE_FACE_UP 仰卧), 3 (LIE_FACE_DOWN 俯卧), 4 (SIT 坐), 5 (SQUAT 蹲), 6 (FALLING 摔倒))