1.1 接口概述
机体速度控制接口用于控制机器人本体的运动速度,包括前后、左右的线速度和偏航角速度。这是比关节命令更高层级的控制接口——开发者不需要关心每个关节的位置,只需指定机体期望的运动速度,机器人内部的行走控制器会自动完成关节级的运动规划。
该接口需要以固定频率持续发布速度命令才能维持运动,适用于机器人行走过程中的方向和速度控制。
1.2 消息字段与坐标系
通信接口:
| 话题名称 | 消息类型 | 方向 | 说明 |
|---|---|---|---|
/motion/body_vel_cmd | BodyVelCmd.msg | 客户端 → 行走服务 | 发送速度控制消息 |
坐标系定义(右手坐标系,原点在机体中心):
| 轴 | 方向 |
|---|---|
| X 轴 | 机体前进方向 |
| Y 轴 | 机体左侧方向 |
| Z 轴 | 机体向上方向 |
消息字段:
| 字段 | 类型 | 单位 | 说明 |
|---|---|---|---|
linear_velocity[0] | float64 | m/s | X 方向速度,正值前进,负值后退 |
linear_velocity[1] | float64 | m/s | Y 方向速度,正值左移,负值右移 |
yaw_velocity | float64 | rad/s | 偏航角速度,正值逆时针,负值顺时针 |
header | std_msgs/Header | — | 时间戳和帧 ID(frame_id 设为 "body") |
速度限制如下表所示:
| 参数 | 最小值 | 最大值 |
|---|---|---|
| X 轴线速度(前进/后退,单位 m/s) | -1 | 1 |
| Y 轴线速度(左右平移,单位 m/s) | -1 | 1 |
| 偏航角速度(旋转,单位 rad/s) | -1 | 1 |
1.3 控制频率与速度限制
| 项目 | 要求 |
|---|---|
| 推荐频率 | 100 Hz(10ms 周期) |
| 最低频率 | 50 Hz,频率过低可能导致运动不连续 |
| 停止方式 | 显式发送零速度命令(所有字段设为 0) |
| 超时保护 | 接收端 2 秒未收到消息后自动停下 |
建议实现速度渐变而非突变,速度超出限制可能被自动裁剪或导致错误。
1.4 前置条件
必须进入行走类运动模式,机体速度控制接口才会生效。可通过手柄切换运动模式:
| 运动模式 | 手柄按键 | 适用机型 |
|---|---|---|
| 自然步态(rl_basic) | [LB, B] | PM01 / T800 |
| 机械步态(rl_amp) | [LB, X] | 仅 PM01 |
| 地形步态(rl_terrain) | [LB, Y] | 仅 PM01 |
| 下肢平衡步态(lower_body_balance) | [LB, CROSS_X_DOWN] | PM01 / T800 |
在某些运动模式下该接口可能被禁用,使用前确保机器人处于可接受速度命令的状态。
1.5 示例:速度控制流程
文件名:body_velocity_control_example.py
本示例展示了如何通过定时发布 BodyVelCmd 消息控制机器人移动,包括前进、平移和旋转。
运行命令:
Bash |
核心代码:
Python |
修改 linear_velocity 和 yaw_velocity 的值即可控制方向。停止时将所有值设为 0。完整脚本包含键盘交互和优雅退出,见 GitHub。
1.6 注意事项
- 确保运动控制器节点已启动并处于适当的行走类运动状态
- 必须持续发送速度命令以保持运动(机器人不会记忆上次的速度)
- 停止时需要显式发送零速度命令
- 速度超出限制可能被自动裁剪或导致错误
- 建议实现速度渐变而非突变
- 此示例不包含避障功能,实际使用时需要配合传感器和避障算法
- 建议先从小速度开始测试,逐步增加到期望速度
- 在受限空间内谨慎使用高速度
- 使用 Ctrl+C 可以安全退出程序,机器人会停止
📎 本章涉及的开源仓库源码文件(点击文件名跳转 GitHub):BodyVelCmd.msg · body_velocity_control_example.py
