5.1.1 运动模式切换

模式切换与走跑控制接口提供了机器人运动模式切换和走跑控制等核心功能。

核心功能

支持基础运动模式切换进入:

模式

取值

说明

使用场景

零力矩模式

PASSIVE_DEFAULT

机器人关节零力矩, 自由状态(不含末端执行器)

系统启动、维护, 软急停

阻尼模式

DAMPING_DEFAULT

关节有阻尼感(不含末端执行器)

安全移动

位控站立

JOINT_DEFAULT

位置控制站立

精确关节位置控制

稳定站立

STAND_DEFAULT

主动发力确保站立

动态平衡控制,行走/动作就绪状态

走跑模式

LOCOMOTION_DEFAULT

正常走跑

日常移动

头部控制

HEAD_ONLY

仅控制头部关节

头部独立运动(仅限旗舰版)

上肢控制

UPPERBODY_REMOTE_SPLIT

控制头部+双臂+手部

遥操、上肢示教

注意: v0.8.0+ 稳定站立与走跑模式采用一体化设计, 会根据运动控制情况内部自动切换

查询运动模式服务

服务名称

数据类型

描述

/aimdk_5Fmsgs/srv/GetMcAction

GetMcAction

查询运动模式

  • GetMcAction ros2-srv @ mc/action/srv/GetMcAction.srv

    # 获取运动模式
    # 服务名称: /aimdk_5Fmsgs/srv/GetMcAction
    
    # 请求
    CommonRequest request            # 通用请求
    
    ---
    
    # 响应
    ResponseHeader header            # 响应头
    McActionInfo info          # 当前运动模式信息
    
    • McActionInfo ros2-msg @ mc/action/McActionInfo.msg

      # 运动模式信息
      McAction current_action  # 当前运动模式(v0.8.2开始不再使用)
      string action_desc  # 描述
      McActionStatus status  # 运动模式的状态(status.value:0 (IDLE 空闲), 100 (RUNNING 运行中), 200 (TRANSITION 切换中))
      

设置运动模式服务

服务名称

数据类型

描述

/aimdk_5Fmsgs/srv/SetMcAction

SetMcAction

设置运动模式

  • SetMcAction ros2-srv @ mc/action/srv/SetMcAction.srv

    # 设置运动模式
    # 服务名称: /aimdk_5Fmsgs/srv/SetMcAction
    
    # 请求
    RequestHeader header             # 请求头
    string source                    # 输入源
    McActionCommand command          # 运动命令
    
    ---
    
    # 响应
    CommonResponse response          # 通用响应, response.status.value为1表成功
    

    response.header.code 为动作切换结果码:0 表示成功,非 0 表示被拒绝,具体原因见下表。

    code

    枚举名

    含义

    0

    None

    成功

    2

    InvalidRequest

    请求非法(如 source 为空)

    3

    UnknownAction

    动作未在配置中登记

    4

    InvalidPosture

    当前姿态不允许该动作

    5

    InRecovery

    系统处于恢复模式

    6

    SecureLevelForbid

    安全保护机制禁止状态切换(如检测到摔倒等异常)

    7

    Starting

    系统启动过程中,不接受运动/稳定动作

    8

    MovingBusy

    正在运动中,不能切换到非稳定动作

    9

    MotionBusy

    动作正在播放

    10

    NoTransitionPath

    动作存在但从当前状态无可达路径

    100

    PositionControlPrepare

    位控准备中(MotionBusy 细分)

    101

    ForceControlPrepare

    力控准备中(MotionBusy 细分)

    102

    Walking

    行走中(MotionBusy 细分)

    103

    Offroad

    越野中(MotionBusy 细分)

    104

    VrTeleop

    VR 遥操中(MotionBusy 细分)

    105

    LieUp

    仰卧起身中(MotionBusy 细分)

    106

    ProneUp

    俯卧起身中(MotionBusy 细分)

    107

    SitDown

    坐下中(MotionBusy 细分)

    108

    SitUp

    坐起中(MotionBusy 细分)

    109

    DataCollection

    数据采集中(MotionBusy 细分)

    110

    WholeBodyTeleop

    全身遥操中(MotionBusy 细分)

    • McActionCommand ros2-msg @ mc/action/McActionCommand.msg

      # McActionCommand
      McAction action  # v0.8.2开始不再使用
      string action_desc  # 模式名称, 如 "STAND_DEFAULT"
      

安全保护机制

警告

运动模式命令不受输入源优先级保护,但受安全保护机制约束。机器人检测到异常(如摔倒)时会自动进入安全保护,禁止状态切换,此时所有运动模式请求都会返回 SecureLevelForbid 被拒绝。安全保护由系统自动触发,用户无法通过 SDK 主动触发或解除。

允许切换的情况:

  • 切换到零力矩或阻尼模式(PASSIVE_DEFAULT、DAMPING_DEFAULT):始终允许(操作员切入安全态视为接管信号,系统自动解除安全保护)

  • 切换到位控站立模式(JOINT_DEFAULT):允许,但有姿态限制(如坐姿时无法切换)

  • 其他模式:若机器人处于安全保护中,所有请求都会被拒绝

注意: 安全保护机制与输入源优先级是两套独立的机制。安全保护侧重于系统安全性,优先级侧重于控制权限管理。

编程示例

详细的编程示例和代码说明请参考:

安全注意事项

警告

  • 请勿使用本节未提及的运动模式和模式描述设置

  • 模式切换需要确保机器人处于安全状态

  • 建议在仿真环境中先测试运动控制代码

  • 运控计算单元(PC1,10.0.1.40)上切勿部署二开程序, 以免影响运控等高实时要求的任务

小心

ROS的服务(service)机制在跨板通信时存在一些待优化问题, 二次开发时请参考例程添加异常处理、快速重试等保护机制

机器人处于稳定站立 / 走跑模式时, 请勿批量快速启动 ROS 节点(建议不超过 2 个/秒), 短时间内大量节点参与 DDS 发现会造成通信拥塞、影响运控实时性, 存在机器人失稳摔倒风险

备注

最佳实践

  • 实现运动状态监控和异常处理

  • 建议实现运动控制的安全检查