5.1.4 Motion Control Status Query
The robot publishes motion control status topics at 10 Hz, including input source, action, pose, velocity, and other comprehensive status information.
Motion Control Status Topic
Topic Name |
Message Type |
Description |
QoS |
Frequency |
|---|---|---|---|---|
|
|
Motion control status (input source, action, pose, velocity, etc.) |
|
Robot-published (10 Hz) |
McCommonStateros2-msg @ mc/data/msg/McCommonState.msg# Robot motion control status # Topic: /aima/mc/common/state MessageHeader header # Common message header McInputSource input_source # Input source information McActionInfo action_info # Current action information McRuntimeModel runtime_model # Runtime model information McMotionStatus motion_status # Action execution information McServoStatus servo_status # Servo control status McFsmState fsm_state # FSM state (fsm_state.current_state: # 0 (UNKNOWN unknown) # 1 (STARTING starting) # 2 (STABLE stable) # 3 (MOVING moving) # 4 (SAFE safe) # 5 (SPECIAL special) # 6 (TEST test)) McBodyPoseStatus body_status # Robot pose status (body_status.value: # 0 (MC_BODY_POSE_UNKOWN unknown) # 1 (MC_BODY_POSE_STAND standing) # 2 (MC_BODY_POSE_LIE_FACE_UP face-up) # 3 (MC_BODY_POSE_LIE_FACE_DOWN face-down) # 4 (MC_BODY_POSE_SIT sitting) # 5 (MC_BODY_POSE_SQUAT squatting)) McLocomotionSpeedStatus speed_status # Locomotion speed status
McInputSourceros2-msg @ mc/motion/msg/McInputSource.msg# Input source information string name # Name of currently selected input source, e.g. rc/vr/app_proxy/... int32 priority # Configured priority (0-100) int32 timeout # Configured timeout (unit: ms), default 1000
McActionInforos2-msg @ mc/action/msg/McActionInfo.msg# Currently running action McAction current_action # Reserved string action_desc # Mode name, e.g. "STAND_DEFAULT" McActionStatus status # Action status (status.value: 0 (IDLE idle), 100 (RUNNING running), 200 (TRANSITION switching), 300 (UNINTERRUPTIBLE_TRANSITION uninterruptible switching))
McRuntimeModelros2-msg @ mc/data/msg/McRuntimeModel.msg# Runtime model information bool waist_status # Internal implementation detail, not user-facing McHandStatus left_hand_status # Left hand status (left_hand_status.value: 1000 (OMNI_HAND dexterous hand), 2000 (OMNI_PICKER gripper)) McHandStatus right_hand_status # Right hand status (right_hand_status.value: 1000 (OMNI_HAND dexterous hand), 2000 (OMNI_PICKER gripper))
McMotionStatusros2-msg @ mc/data/msg/McMotionStatus.msg# Action execution information McPlayerState player_state # Action execution status (player_state.value: # 0 (IDLE idle) # 1 (PRE_PLAYING pre-playing) # 2 (PLAYING playing) # 3 (INTERRUPTING interrupting) # 4 (ERROR error)) McControlArea control_area # Control area (control_area.value: 0 (NONE none), 1 (LEFT_HAND left hand), 2 (RIGHT_HAND right hand), 4 (HEAD head), 8 (WAIST waist), bitmask combinable) string motion # Action name McMotionType type # Action type (type.value: 0 (NONE none), 1 (ANIMATION animation), 2 (MIMIC mimic), 3 (FOUNDATION foundation))
McServoStatusros2-msg @ mc/data/msg/McServoStatus.msg# Servo control status bool squat_enable # Whether recovering from squat to stand float64 squat_offset # Squat height offset (0.0=standing, -0.5=lowest squat) uint32 squat_limit # Squat limit status (squat_limit: 0 (BEFORE_LIMIT not at limit), 1 (LOWER_LIMIT at lower limit), 2 (UPPER_LIMIT at upper limit)) float64 head_yaw_offset # Head yaw offset (unit: rad) float64 head_pitch_offset # Head pitch offset (unit: rad) float64 waist_yaw_offset # Waist yaw offset (unit: rad) float64 waist_pitch_offset # Waist pitch offset (unit: rad) float64 waist_roll_offset # Waist roll offset (unit: rad)
McLocomotionSpeedStatusros2-msg @ mc/motion/msg/McLocomotionSpeedStatus.msg# Locomotion speed status McLocomotionSpeedMode speed_mode # Speed mode (speed_mode.value: 0 (MC_LOCOMOTION_NONE_SPEED none), 1 (MC_LOCOMOTION_LOW_SPEED low), 2 (MC_LOCOMOTION_MEIDUM_SPEED medium), 3 (MC_LOCOMOTION_HIGH_SPEED high)) McLocomotionSpeedBounds forward_bounds # Forward speed bounds (min_value: max reverse speed, max_value: max forward speed, unit: m/s) McLocomotionSpeedBounds lateral_bounds # Lateral speed bounds (min_value: max right speed, max_value: max left speed, unit: m/s) McLocomotionSpeedBounds angular_bounds # Angular speed bounds (min_value: max clockwise speed, max_value: max counterclockwise speed, unit: rad/s)
The speed mode (SpeedMode) determines the speed bounds of locomotion commands. Velocity commands sent by the user via
/aima/mc/locomotion/velocityare limited by the bounds of the current speed mode. Typical bounds for each mode are shown in the table below (subject to the actual robot):Speed mode
Value
forward bounds (m/s)
lateral bounds (m/s)
angular bounds (rad/s)
NONE (none)
0
0 ~ 0
0 ~ 0
0 ~ 0
LOW (low speed, default)
1
-1.0 ~ +0.8
-1.0 ~ +1.0
-1.0 ~ +1.0
MEDIUM (medium speed)
2
-1.0 ~ +1.2
-1.0 ~ +1.0
-1.0 ~ +1.0
HIGH (high speed)
3
-1.0 ~ +1.8
-1.0 ~ +1.0
-1.0 ~ +1.0
STEP (off-road)
4
-2.0 ~ +2.0
-1.0 ~ +1.0
-1.0 ~ +1.0
The off-road speed mode (STEP, value 4) cannot be switched directly via a service. It is auto-selected only when entering off-road mode (LOCOMOTION_STEP), and the previous speed mode is restored on exit. Manual speed mode switch requests are rejected during off-road mode.
The speed mode can be auto-switched in the following scenarios:
Safety protection triggered: automatically switches to low speed when the robot detects an anomaly (e.g. falling), and restores the original mode on recovery
Off-road mode: automatically switches to the off-road speed mode (STEP) when entering off-road mode (LOCOMOTION_STEP), and restores on exit
Linkswarm swarm control (
linkswarminput source): automatically switches to high speed when thelinkswarminput source is enabled, and restores on exit
The default speed mode is low speed (LOW_SPEED).
Warning
Do not add, modify, delete, enable, or disable any built-in input source (especially
linkswarm, which is Linkswarm-dedicated), nor use a built-in input source in the input source field of control messages. Directly operating or using built-in input sources may cause control conflicts, robot loss of control, and other unpredictable behavior. Users bear all consequences. See Input Source Configuration.
Status Field Description
Fields in common/state are grouped by function, describing how they are updated and their meaning:
Input Source
common/state Field |
How Updated |
Description |
|---|---|---|
|
Automatically updated when velocity/pose commands are published (via |
Current input source information (reflects only velocity/pose command control. Calling action services such as |
Action Status
The following fields are status feedback with no direct control interface. To control actions, call services such as SetMcPresetMotion / SetMcAction.
common/state Field |
Description |
|---|---|
|
Current action (reserved) |
|
Action description (e.g. “STAND_DEFAULT”) |
|
Action status (0 (IDLE idle), 100 (RUNNING running), 200 (TRANSITION switching), 300 (UNINTERRUPTIBLE_TRANSITION uninterruptible switching)) |
|
Upper limb action execution status (0 (IDLE idle), 1 (PRE_PLAYING pre-play), 2 (PLAYING playing), 3 (INTERRUPTING interrupting), 4 (ERROR error)) |
|
FSM state (0 (UNKNOWN unknown), 1 (STARTING starting), 2 (STABLE stable), 3 (MOVING moving), 4 (SAFE safe), 5 (SPECIAL special), 6 (TEST test)) |
Joint Servo Status
The following fields are status feedback with no direct control interface.
common/state Field |
Description |
|---|---|
|
Whether recovering from squat to stand |
|
Squat height offset (0.0=standing, -0.5=lowest squat) |
|
Squat limit status (0 (BEFORE_LIMIT not at limit), 1 (LOWER_LIMIT at lower limit), 2 (UPPER_LIMIT at upper limit)) |
|
Head yaw/pitch offset (unit: rad) |
|
Waist yaw/pitch/roll offset (unit: rad) |
|
Hand type (1000 (OMNI_HAND dexterous hand), 2000 (OMNI_PICKER gripper)) |
Note
runtime_model.waist_status is an internal implementation detail and does not need user attention.
Locomotion Speed
common/state Field |
Corresponding Control Interface / Topic |
Description |
|---|---|---|
|
Speed mode is switched by the mobile app or automatically by the system (triggered by safety protection / off-road mode / Linkswarm swarm control) |
Current locomotion speed mode (0 (NONE none), 1 (LOW low), 2 (MEDIUM medium), 3 (HIGH high), 4 (STEP off-road)). Default is low speed. The off-road speed mode cannot be switched directly; it is auto-selected only in off-road mode. |
|
|
Current forward speed bounds (unit: m/s), determined by the current speed mode |
|
|
Current lateral speed bounds (unit: m/s), determined by the current speed mode |
|
|
Current angular speed bounds (unit: rad/s), determined by the current speed mode |
Locomotion velocity commands sent by the user are limited by the bounds of the current speed mode. Users should combine the speed mode and bounds information in this section with the velocity command description in the Locomotion Control section to determine the currently available speed range.
Pose
The following fields are status feedback with no direct control interface. To control pose, publish to the pose control topic (to be released).
common/state Field |
Description |
|---|---|
|
Current robot pose (0 (UNKNOWN unknown), 1 (STAND standing), 2 (LIE_FACE_UP face-up), 3 (LIE_FACE_DOWN face-down), 4 (SIT sitting), 5 (SQUAT squatting), 6 (FALLING falling)) |