5.1.1 运动模式切换
模式切换与走跑控制接口提供了机器人运动模式切换和走跑控制等核心功能。
核心功能
支持基础运动模式切换进入:
模式 |
取值 |
说明 |
使用场景 |
|---|---|---|---|
零力矩模式 |
|
机器人关节零力矩, 自由状态(不含末端执行器) |
系统启动、维护, 软急停 |
阻尼模式 |
|
关节有阻尼感(不含末端执行器) |
安全移动 |
位控站立 |
|
位置控制站立 |
精确关节位置控制 |
稳定站立 |
|
主动发力确保站立 |
动态平衡控制,行走/动作就绪状态 |
走跑模式 |
|
正常走跑 |
日常移动 |
头部控制 |
|
仅控制头部关节 |
头部独立运动(仅限旗舰版) |
上肢控制 |
|
控制头部+双臂+手部 |
遥操、上肢示教 |
注意: v0.8.0+ 稳定站立与走跑模式采用一体化设计, 会根据运动控制情况内部自动切换
查询运动模式服务
服务名称 |
数据类型 |
描述 |
|---|---|---|
|
|
查询运动模式 |
GetMcActionros2-srv @ mc/action/srv/GetMcAction.srv# 获取运动模式 # 服务名称: /aimdk_5Fmsgs/srv/GetMcAction # 请求 CommonRequest request # 通用请求 --- # 响应 ResponseHeader header # 响应头 McActionInfo info # 当前运动模式信息
McActionInforos2-msg @ mc/action/McActionInfo.msg# 运动模式信息 McAction current_action # 当前运动模式(v0.8.2开始不再使用) string action_desc # 描述 McActionStatus status # 运动模式的状态(status.value:0 (IDLE 空闲), 100 (RUNNING 运行中), 200 (TRANSITION 切换中))
设置运动模式服务
服务名称 |
数据类型 |
描述 |
|---|---|---|
|
|
设置运动模式 |
SetMcActionros2-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 细分)
McActionCommandros2-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 发现会造成通信拥塞、影响运控实时性, 存在机器人失稳摔倒风险
备注
最佳实践
实现运动状态监控和异常处理
建议实现运动控制的安全检查