运动控制状态接口
基本状态切换接口
Section titled “基本状态切换接口”机器人基本状态之间的切换通过发送相应指令实现,如下图所示(括号中标注的对应代码为状态值)。

部分指令如下表所示:
| 指令 | 代码 | 值 | 类型 | 功能 |
|---|---|---|---|---|
| 站立/坐下 | 0x21010202 | - | 0 | 在坐姿状态与站姿状态之间切换 |
| 停止 STOP | 0x21020C0E | - | 0 | 触发软件急停 |
| 回零位 | 0x21010C05 | - | 0 | 初始化机器人关节 |
轴指令是手柄左右摇杆 X 轴和 Y 轴输出的指令,其取值范围为 [-32767, 32767]。轴指令下发的频率应不低于 20Hz。轴指令超时时间为 250ms,当机器人超过 250ms 未收到轴指令时,将自动停止运动。
原地模式下的轴指令
Section titled “原地模式下的轴指令”原地模式下,客户端发送轴指令给运动主机,可以控制机器人改变身体姿势。如果运动主机超过一秒未收到任何轴指令,系统会认为指令失效,机器人将恢复正常站立姿势。若轴指令值在死区范围内,则视轴指令值为 0。
| 指令名称 | 指令码 | 指令类型 | 死区 | 指令功能 |
|---|---|---|---|---|
| 调整横滚角 | 0x21010131 | 0 | [-12553, 12553] | 取正值时向右翻滚 |
| 调整俯仰角 | 0x21010130 | 0 | [-6553, 6553] | 取正值时低头 |
| 调整身体高度 | 0x21010102 | 0 | [-20000, 20000] | 取正值时抬高身体 |
| 调整偏航角 | 0x21010135 | 0 | [-9553, 9553] | 取正值时向右旋转 |
移动模式下的轴指令
Section titled “移动模式下的轴指令”移动模式下,下发轴指令给运动主机,可以控制机器人改变移动方向和速度。当轴指令取值在死区范围内时,视其值为 0,机器人停止移动。轴指令值的正负确定速度方向。
| 指令名称 | 指令码 | 指令类型 | 死区 | 指令功能 |
|---|---|---|---|---|
| 左右平移 | 0x21010131 | 0 | [-12553, 12553] | 指定机器人 y 轴上的期望线速度,正值向右 |
| 前后平移 | 0x21010130 | 0 | [-6553, 6553] | 指定机器人 x 轴上的期望线速度,正值向前 |
| 左右转弯 | 0x21010135 | 0 | [-9553, 9553] | 指定机器人的期望角速度,正值向右转 |
机器人在运动过程中,若下发轴指令为 0,机器人将停止运动。
运动模式切换接口
Section titled “运动模式切换接口”| 指令名称 | 指令代码 | 指令值 | 指令类型 |
|---|---|---|---|
| 姿态模式 | 0x21010D05 | - | 0 |
| 运动模式 | 0x21010D06 | - | 0 |
步态切换接口
Section titled “步态切换接口”机器人处于运动模式时可以调整步态。
| 指令 | 代码 | 值 | 类型 | 功能 |
|---|---|---|---|---|
| 慢速挡平地步态 | 0x21010300 | - | 0 | 将机器人从当前步态切换到低速步态 |
| 中速挡平地步态 | 0x21010307 | - | 0 | 将机器人从当前步态切换到中速步态 |
| 快速挡平地步态 | 0x21010303 | - | 0 | 将机器人从当前步态切换到高速步态 |
| 爬行挡平地步态 | 0x21010406 | - | 0 | 将机器人从当前步态切换到低速爬行步态,或从低速爬行步态切换到普通低速步态 |
| 抓地挡 RUG 步态 | 0x21010402 | - | 0 | 将机器人从当前步态切换到抓地步态 |
| 普通挡 RUG 步态 | 0x21010401 | - | 0 | 将机器人从当前步态切换到普通步态 |
| 高抬腿挡 RUG 步态 | 0x21010407 | - | 0 | 将机器人从当前步态切换到高抬腿步态 |
机器人当前步态可通过 robot_gait_state 字段读取,状态值定义详见状态机概述与实现。
速度指令是复杂指令,每条速度指令所携带的数据值均为双精度浮点型,需要在机器人处于导航模式时发送。
| 指令名称 | 指令代码 | 指令类型 | 取值范围 |
|---|---|---|---|
| 角速度 (rad/s) | 0x0141 | 1 | [-1.5, 1.5] |
| 机器人 x 轴线速度 (m/s) | 0x0140 | 1 | [-1.0, 1.0] |
| 机器人 y 轴线速度 (m/s) | 0x0145 | 1 | [-0.5, 0.5] |
机器人状态信息
Section titled “机器人状态信息”机器人状态信息的指令码如下:
| 指令码 | 指令类型 | 数据内容 | 发送频率 |
|---|---|---|---|
| 0x0901 | 1 | 结构体 RobotStateUpload(具体见下) | 50 Hz |
struct RobotStateUpload{ int robot_basic_state; int robot_gait_state; double rpy[3]; double rpy_vel[3]; double xyz_acc[3]; double pos_world[3]; double vel_world[3]; double vel_body[3]; unsigned touch_down_and_stair_trot; bool is_charging; unsigned error_state; int robot_motion_state; double battery_level; int task_state; bool is_robot_need_move; bool zero_position_flag; double ultrasound[2];};各字段含义如下:
| 字段 | 类型 | 含义 |
|---|---|---|
| robot_basic_state | int | 机器人基本运动状态 |
| robot_gait_state | int | 机器人当前步态 |
| rpy[3] | double | IMU 角度信息 |
| rpy_vel[3] | double | IMU 角速度信息 |
| xyz_acc[3] | double | IMU 加速度信息 |
| pos_world[3] | double | 机器人在世界坐标系下的位姿信息 |
| vel_world[3] | double | 机器人在世界坐标系下的速度信息 |
| vel_body[3] | double | 机器人在身体坐标系下的速度信息 |
| touch_down_and_stair_trot | unsigned | 无效数据,仅作占位用 |
| is_charging | bool | 无效数据,仅作占位用 |
| error_state | unsigned | 无效数据,仅作占位用 |
| robot_motion_state | int | 机器人动作状态 |
| battery_level | double | 电池电量百分比的小数形式 |
| task_state | int | 无效数据,仅作占位用 |
| is_robot_need_move | bool | 机器人受外力影响时的平衡状态 |
| zero_position_flag | bool | 回零标志位 |
| ultrasound[2] | double | 超声波数据 |
机器人基本运动状态
Section titled “机器人基本运动状态”| 变量值 | 机器人基本运动状态 |
|---|---|
| 1 | 趴下状态 |
| 4 | 准备起立状态 |
| 5 | 正在起立状态 |
| 6 | 力控状态 |
| 7 | 正在趴下状态 |
| 8 | 失控保护状态 |
| 9 | 姿态调整状态 |
| 11 | 执行翻身动作 |
| 17 | 回零状态 |
| 18 | 执行后空翻动作 |
| 20 | 执行打招呼动作 |
注意: 机器人基本状态的转换关系可参考基本状态切换接口。
| 变量值 | 步态 |
|---|---|
| 0 | 平地低速步态 |
| 2 | 通用越障步态 |
| 4 | 平地中速步态 |
| 5 | 平地高速步态 |
| 6 | 抓地越障步态 |
| 12 | 太空步步态 |
| 13 | 高踏步越障步态 |
IMU 角度信息
Section titled “IMU 角度信息”double rpy[3] = {roll, pitch, yaw};
| 元素名称 | 含义 |
|---|---|
| roll | IMU 在世界坐标系下的 roll 角(°) |
| pitch | IMU 在世界坐标系下的 pitch 角(°) |
| yaw | IMU 在世界坐标系下的 yaw 角(°) |
IMU 角速度信息
Section titled “IMU 角速度信息”double rpy_vel[3] = {roll_vel, pitch_vel, yaw_vel};
| 元素名称 | 含义 |
|---|---|
| roll_vel | IMU 在世界坐标系下的 roll 角速度(rad/s) |
| pitch_vel | IMU 在世界坐标系下的 pitch 角速度(rad/s) |
| yaw_vel | IMU 在世界坐标系下的 yaw 角速度(rad/s) |
IMU 加速度信息
Section titled “IMU 加速度信息”double xyz_acc[3] = {x_acc, y_acc, z_acc};
| 元素名称 | 含义 |
|---|---|
| x_acc | IMU 在世界坐标系 x 轴上的加速度(m/s²) |
| y_acc | IMU 在世界坐标系 y 轴上的加速度(m/s²) |
| z_acc | IMU 在世界坐标系 z 轴上的加速度(m/s²) |
世界坐标系下位姿
Section titled “世界坐标系下位姿”double pos_world[3] = {x, y, yaw};
| 元素名称 | 含义 |
|---|---|
| x | 机器人在世界坐标系下的 x 轴坐标值(m) |
| y | 机器人在世界坐标系下的 y 轴坐标值(m) |
| yaw | 机器人在世界坐标系下的 yaw 角(rad) |
世界坐标系下速度
Section titled “世界坐标系下速度”double vel_world[3] = {x_vel, y_vel, yaw_vel};
| 元素名称 | 含义 |
|---|---|
| x_vel | 机器人在世界坐标系 x 轴上的速度(m/s) |
| y_vel | 机器人在世界坐标系 y 轴上的速度(m/s) |
| yaw_vel | 机器人在世界坐标系下的 yaw 角速度(rad/s) |
身体坐标系下速度
Section titled “身体坐标系下速度”double vel_body[3] = {x_vel, y_vel, yaw_vel};
| 元素名称 | 含义 |
|---|---|
| x_vel | 机器人在身体坐标系 x 轴上的速度(m/s) |
| y_vel | 机器人在身体坐标系 y 轴上的速度(m/s) |
| yaw_vel | 机器人在身体坐标系下的 yaw 角速度(rad/s) |
机器人动作状态
Section titled “机器人动作状态”| 变量值 | 机器人动作状态 |
|---|---|
| 0 | 机器人处于 robot_basic_state 的值对应的状态中 |
| 1 | 机器人正在以 robot_gait_state 的值对应的步态踏步 |
| 2 | 机器人正在执行扭身体 |
| 4 | 机器人正在执行扭身跳 |
| 11 | 机器人正在执行向前跳 |
注意: 机器人基本运动状态 robot_basic_state、机器人步态 robot_gait_state、机器人动作状态 robot_motion_state 共同表示机器人状态。
| 变量值 | 平衡状态 |
|---|---|
| 0 | 可保持平衡 |
| 1 | 无法保持平衡,踏步调整姿态 |
| 变量值 | 回零状态 |
|---|---|
| 0 | 未完成回零或已退出回零状态 |
| 1 | 已完成回零 |
double ultrasound[2] = {forward_distance, backward_distance};
| 元素名称 | 含义 |
|---|---|
| forward_distance | 机器人前方障碍物的距离(m) |
| backward_distance | 机器人后方障碍物的距离(m) |
注意: 超声波有效量程为 [0.28m, 4.50m],当障碍物距离小于 0.28m 时显示为 0.28m,当障碍物距离大于 4.50m 时显示为 4.50m。