5.1.4 运控状态查询
机器人以 10Hz 频率发布运控状态话题,包含输入源、动作、姿态、速度等完整状态信息。
运控状态话题
话题名称 |
数据类型 |
描述 |
QoS |
频率 |
|---|---|---|---|---|
|
|
运控状态(输入源、动作、姿态、速度等) |
|
机器人发布(10Hz) |
McCommonStateros2-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 # 走跑速度状态
McInputSourceros2-msg @ mc/motion/msg/McInputSource.msg# 输入源信息 string name # 当前选定的输入源名称, 如rc/vr/app_proxy/... int32 priority # 配置状态:优先级(0-100) int32 timeout # 配置状态:超时时间(单位:ms),默认 1000
McActionInforos2-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 不可中断切换中))
McRuntimeModelros2-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 夹爪))
McMotionStatusros2-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 基座))
McServoStatusros2-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)
McLocomotionSpeedStatusros2-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 字段 |
如何更新 |
说明 |
|---|---|---|
|
发布速度/姿态指令时自动更新(通过 |
当前输入源信息(仅反映速度/姿态指令的控制权。调用 |
动作状态
以下字段为状态反馈,无直接控制接口。如需控制动作,请调用 SetMcPresetMotion / SetMcAction 等服务。
common/state 字段 |
说明 |
|---|---|
|
当前动作(预留) |
|
动作描述(如 “STAND_DEFAULT”) |
|
动作状态(0 (IDLE 空闲), 100 (RUNNING 运行中), 200 (TRANSITION 切换中), 300 (UNINTERRUPTIBLE_TRANSITION 不可中断切换中)) |
|
上肢动作运行状态(0 (IDLE 空闲), 1 (PRE_PLAYING 预播放), 2 (PLAYING 播放中), 3 (INTERRUPTING 打断中), 4 (ERROR 错误)) |
|
有限状态机状态(0 (UNKNOWN 未知), 1 (PREPARE 预备), 2 (START 启动中), 3 (FINISH 结束), 4 (STABLE 稳定), 5 (MOVING 运动中), 6 (SAFE 安全), 7 (SPECIAL 特殊), 8 (TEST 测试)) |
关节伺服状态
以下字段为状态反馈,无直接控制接口。
common/state 字段 |
说明 |
|---|---|
|
是否处于下蹲恢复站立过程 |
|
下蹲高度偏置(0.0=站直, -0.5=蹲到最低) |
|
下蹲限位状态(0 (BEFORE_LIMIT 未到限位), 1 (LOWER_LIMIT 下蹲到下限), 2 (UPPER_LIMIT 下蹲到上限)) |
|
头部偏航/俯仰偏置(单位:rad) |
|
腰部偏航/俯仰/横滚偏置(单位:rad) |
|
手部类型(1 (OMNI_HAND 灵巧手), 2 (OMNI_PICKER 夹爪)) |
备注
其中 runtime_model.waist_status 为内部实现细节,用户无需关心。
走跑速度
common/state 字段 |
对应的控制接口 / 话题 |
说明 |
|---|---|---|
|
速度模式由手机 APP 切换或系统自动切换(安全保护/越野模式/灵动平台群控触发) |
当前走跑速度模式(0 (NONE 无), 1 (LOW 低速), 2 (MEDIUM 中速), 3 (HIGH 高速), 4 (STEP 越野))。默认为低速。越野速度模式不可直接切换,仅在越野模式下自动选定 |
|
|
当前前进速度边界(单位:m/s),由当前速度模式决定 |
|
|
当前左右速度边界(单位:m/s),由当前速度模式决定 |
|
|
当前旋转速度边界(单位:rad/s),由当前速度模式决定 |
用户下发的走跑控制速度指令会被当前速度模式对应的 bounds 限制。用户应结合本章节的速度模式与 bounds 信息与走跑控制章节的速度指令说明,确定当前可用的速度范围。
姿态
以下字段为状态反馈,无直接控制接口。如需控制姿态,请发布姿态控制话题(待开放)。
common/state 字段 |
说明 |
|---|---|
|
当前机器人姿态(0 (UNKNOWN 未知), 1 (STAND 站立), 2 (LIE_FACE_UP 仰卧), 3 (LIE_FACE_DOWN 俯卧), 4 (SIT 坐), 5 (SQUAT 蹲), 6 (FALLING 摔倒)) |