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

/aima/mc/common/state

McCommonState

Motion control status (input source, action, pose, velocity, etc.)

BEST_EFFORT+TRANSIENT_LOCAL

Robot-published (10 Hz)

  • McCommonState ros2-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
    
    • McInputSource ros2-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
      
    • McActionInfo ros2-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))
      
    • McRuntimeModel ros2-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))
      
    • McMotionStatus ros2-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))
      
    • McServoStatus ros2-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)
      
    • McLocomotionSpeedStatus ros2-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/velocity are 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 (linkswarm input source): automatically switches to high speed when the linkswarm input 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

input_source

Automatically updated when velocity/pose commands are published (via /aima/mc/locomotion/velocity / pose control topic)

Current input source information (reflects only velocity/pose command control. Calling action services such as SetMcPresetMotion / SetMcMotion / SetMcAction does not update this field. Query via GetCurrentInputSource service)

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

action_info.current_action

Current action (reserved)

action_info.action_desc

Action description (e.g. “STAND_DEFAULT”)

action_info.status

Action status (0 (IDLE idle), 100 (RUNNING running), 200 (TRANSITION switching), 300 (UNINTERRUPTIBLE_TRANSITION uninterruptible switching))

motion_status.player_state

Upper limb action execution status (0 (IDLE idle), 1 (PRE_PLAYING pre-play), 2 (PLAYING playing), 3 (INTERRUPTING interrupting), 4 (ERROR error))

fsm_state.current_state

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

servo_status.squat_enable

Whether recovering from squat to stand

servo_status.squat_offset

Squat height offset (0.0=standing, -0.5=lowest squat)

servo_status.squat_limit

Squat limit status (0 (BEFORE_LIMIT not at limit), 1 (LOWER_LIMIT at lower limit), 2 (UPPER_LIMIT at upper limit))

servo_status.head_*_offset

Head yaw/pitch offset (unit: rad)

servo_status.waist_*_offset

Waist yaw/pitch/roll offset (unit: rad)

runtime_model.left/right_hand_status

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_status.speed_mode

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.

speed_status.forward_bounds

/aima/mc/locomotion/velocity.forward_velocity

Current forward speed bounds (unit: m/s), determined by the current speed mode

speed_status.lateral_bounds

/aima/mc/locomotion/velocity.lateral_velocity

Current lateral speed bounds (unit: m/s), determined by the current speed mode

speed_status.angular_bounds

/aima/mc/locomotion/velocity.angular_velocity

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

body_status.value

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))