5.1.2 走跑控制

走跑控制接口提供了机器人走跑速度控制的核心功能。

控制功能

  • 支持基于横向速度、纵向速度、偏航角速度(YawRate)的走跑控制

  • 支持对多个控制输入源的动态管理、优先级仲裁

注意

走跑控制接口为速度级开环控制,开发者下发的是目标速度指令,由运控模块转换为关节运动。

  • 指令跟踪精度有限:下发的 forward_velocity、lateral_velocity、angular_velocity 为目标值,机器人实际线速度/角速度与目标值之间存在偏差,无法精确跟踪,且受步态、地形、负载等因素影响。

  • 不保证轨迹精度与终点精度:该接口无法精确控制机器人的运动轨迹与到达点位。

若需要高精度定位(如精确到达某点位),请使用导航接口。

走跑控制话题

话题名称

数据类型

描述

QoS

频率

/aima/mc/locomotion/velocity

McLocomotionVelocity

走跑控制(稳定站立模式下执行)

BEST_EFFORT+VOLATILE

用户发送(推荐50Hz)

  • McLocomotionVelocity ros2-msg @ mc/motion/msg/McLocomotionVelocity.msg

    # 走跑控制
    # 话题名称: /aima/mc/locomotion/velocity
    
    MessageHeader header             # 消息头
    string source                    # 输入源名称,二开自定义, 注意不要和其他模块使用同一名称, 见下方说明
    float64 forward_velocity         # 前进/后退速度(单位:m/s),前进为正
    float64 lateral_velocity         # 左右侧移速度(单位:m/s),左为正
    float64 angular_velocity         # 偏航角速度(单位:rad/s),逆时针为正
    

    注意此处开发者为走跑控制消息的发布者, 和原生系统内其他模块发出的走跑控制信号(如遥控等)存在竞争冲突的可能。

    当遥控器正在操作时,其优先级高于多数二次开发输入源,SDK 用户的走跑指令会被运控仲裁机制丢弃;遥控器停止操作后需等待其输入源超时(见 输入源仲裁),SDK 指令才能重新抢占控制权。可通过 GetCurrentInputSource 查询当前活跃输入源。

    运控体系提供了针对多输入源的管理机制, 通过优先级实时仲裁控制冲突。

    开发者需注册自定义的输入源并用于走跑控制指令的source域

    详见下节MC控制信号设置

速度模式与速度边界

用户下发的速度指令会被当前速度模式(SpeedMode)对应的速度边界(bounds)限制。速度模式可由手机 APP 通过 SetMcLocomotionSpeedMode 服务切换,也可由系统自动切换。

各速度模式的典型 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)不可通过 SetMcLocomotionSpeedMode 服务直接切换。 越野速度模式仅在进入越野模式(LOCOMOTION_STEP)时由系统自动选定,退出越野模式后自动恢复切换前的速度模式。越野模式期间,任何手动切换速度模式的请求都会被拒绝。

速度模式可被以下场景自动切换:

  • 安全保护触发:机器人检测到异常(如摔倒等)时自动切到低速,恢复时切回原模式

  • 越野模式:进入越野模式(LOCOMOTION_STEP)时自动切到越野速度模式(STEP),退出时恢复

  • 灵动平台群控(linkswarm 输入源):linkswarm 输入源启用时自动切到高速,退出时恢复

警告

严禁对内置输入源(特别是 linkswarm,灵动平台专用)进行添加、修改、删除、启用、禁用等任何操作,也不得在控制消息的输入源字段中使用内置输入源。 直接操作或使用内置输入源会导致控制权冲突、机器人失控等不可预期行为,后果自负。详见输入源配置。

当前速度模式及 bounds 可通过订阅 /aima/mc/common/state 话题的 speed_status 字段查询,详见运控状态查询。

指令超时机制:

  • 走跑控制指令超过 200ms 未收到新指令时,指令自动清零(速度归零),机器人停止运动

  • 机器人处于走跑状态时,若超过 2000ms 未收到走跑控制指令,将自动切换回稳定站立模式

走跑控制启动门限制说明:

当机器人静止时, 初始迈步需要开发者下发的目标速度值高于一定门限, 其后保持运动阶段才可以使用更小的目标速度值。目标速度值由forward_velocity, lateral_velocity, angular_velocity计算合成, 使用单一控制量时的大致范围参考见下表(具体以实机实测为准)

目标速度类型

启动门限(大致范围)

其他说明

forward_velocity

~0.1 m/s 量级

绝对值, 前向后退

lateral_velocity

~0.5-0.7 m/s 量级

绝对值, 左右移均可

angular_velocity

~0.03-0.05 rad/s 量级

绝对值, 左右旋均可

重要

启动门限等特性由基座模型决定, 不同固件版本可能不同, 务必以实机实测为准。表中数值仅为大致范围参考, 所有门限值均由基座模型内部学习得到,并非常数。

编程示例

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

安全注意事项

警告

运动控制限制

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

  • 行走控制前需要先注册输入源

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

备注

最佳实践

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

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

  • 注意速度控制的平滑性和连续性