5.1.2 走跑控制
走跑控制接口提供了机器人走跑速度控制的核心功能。
控制功能
支持基于横向速度、纵向速度、偏航角速度(YawRate)的走跑控制
支持对多个控制输入源的动态管理、优先级仲裁
注意
走跑控制接口为速度级开环控制,开发者下发的是目标速度指令,由运控模块转换为关节运动。
指令跟踪精度有限:下发的
forward_velocity、lateral_velocity、angular_velocity为目标值,机器人实际线速度/角速度与目标值之间存在偏差,无法精确跟踪,且受步态、地形、负载等因素影响。不保证轨迹精度与终点精度:该接口无法精确控制机器人的运动轨迹与到达点位。
若需要高精度定位(如精确到达某点位),请使用导航接口。
走跑控制话题
话题名称 |
数据类型 |
描述 |
QoS |
频率 |
|---|---|---|---|---|
|
|
走跑控制(稳定站立模式下执行) |
|
用户发送(推荐50Hz) |
McLocomotionVelocityros2-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计算合成, 使用单一控制量时的大致范围参考见下表(具体以实机实测为准)
目标速度类型 |
启动门限(大致范围) |
其他说明 |
|---|---|---|
|
~0.1 m/s 量级 |
绝对值, 前向后退 |
|
~0.5-0.7 m/s 量级 |
绝对值, 左右移均可 |
|
~0.03-0.05 rad/s 量级 |
绝对值, 左右旋均可 |
重要
启动门限等特性由基座模型决定, 不同固件版本可能不同, 务必以实机实测为准。表中数值仅为大致范围参考, 所有门限值均由基座模型内部学习得到,并非常数。
编程示例
详细的编程示例和代码说明请参考:
安全注意事项
警告
运动控制限制
模式切换需要确保机器人处于安全状态
行走控制前需要先注册输入源
建议在仿真环境中先测试运动控制代码
备注
最佳实践
实现运动状态监控和异常处理
建议实现运动控制的安全检查
注意速度控制的平滑性和连续性