GO2 机器狗高层运动服务接口
一、接口架构概览
高层运动服务分为两部分:
-
高层控制接口:通过
SportClient发送速度、轨迹、姿态等运动指令 -
高层状态接口:订阅
SportModeState消息获取位姿、速度、IMU等状态反馈
适用范围:Go2 Edu 型号,软件版本 < V1.1.6(新版请参考 V2.0 文档)
二、核心控制接口(强化学习相关)
1. 基础运动控制
| 接口 | 功能 | 参数范围 | 强化学习应用建议 |
|---|---|---|---|
Move(vx, vy, vyaw) |
速度控制 | vx: [-2.5, 3.8] m/s vy: [-1.0, 1.0] m/s vyaw: [-4, 4] rad/s |
主要动作输出,可映射为策略网络输出的速度指令 |
Euler(roll, pitch, yaw) |
姿态控制 | roll/pitch: [-0.75, 0.75] rad yaw: [-0.6, 0.6] rad |
可用于调整机身姿态,适应复杂地形 |
BodyHeight(height) |
机身高度 | [-0.18, 0.03] m(相对默认0.33m) | 自适应地形,越障时动态调整 |
FootRaiseHeight(height) |
抬腿高度 | [-0.06, 0.03] m(相对默认0.09m) | 控制步幅高度,影响能耗与越障能力 |
2. 步态模式切换
| 接口 | 功能 | 说明 |
|---|---|---|
SwitchGait(d) |
切换步态 | 0: idle, 1: trot, 2: trot running, 3: 正向爬楼, 4: 逆向爬楼 |
ContinuousGait(flag) |
持续移动模式 | true 时保持踏步状态(即使速度为0),适合RL训练避免频繁启停 |
SpeedLevel(level) |
速度档位 | -1: 慢速, 0: 正常, 1: 快速 |
3. 高级运动模式(适合RL探索)
| 接口 | 功能 | 强化学习价值 |
|---|---|---|
FreeWalk() |
灵动模式 | 推荐作为RL基础模式,自由度最高,底层控制开放 |
FreeBound(flag) |
并腿跑 | 特殊步态,可用于特定任务训练 |
FreeJump(flag) |
跳跃模式 | 离散动作空间,适合技能学习 |
HandStand(flag) |
倒立行走 | 高阶技能,需先进入可移动状态 |
三、状态反馈接口(观测空间)
订阅话题:rt/sportmodestate
关键状态量(建议作为RL观测)
// 位姿与运动状态
std::array<float, 3> position(); // 三维位置 (x, y, z)
std::array<float, 3> velocity(); // 三维速度 (vx, vy, vz)
float yawSpeed(); // 偏航角速度
float bodyHeight(); // 当前机身高度
// IMU数据(高频,适合状态估计)
std::array<float, 4> quaternion(); // 姿态四元数 (w, x, y, z)
std::array<float, 3> gyroscope(); // 角速度 (rad/s)
std::array<float, 3> accelerometer(); // 加速度 (m/s²)
std::array<float, 3> rpy(); // 欧拉角 (roll, pitch, yaw)
// 足端信息(可用于接触检测)
std::array<int16_t, 4> footForce(); // 四个足端力(力传感器)
std::array<float, 12> footPositionBody(); // 足端相对机体位置
std::array<float, 12> footSpeedBody(); // 足端相对机体速度
// 环境与规划
std::array<float, 4> rangeObstacle(); // 障碍物距离(超声波/激光)
uint8_t gaitType(); // 当前步态类型
四、强化学习应用建议
1. 动作空间设计
推荐方案:使用 Move() + BodyHeight() + FootRaiseHeight() 组合
-
连续动作:
[vx, vy, vyaw, body_height_offset, foot_raise_offset] -
离散动作:
SwitchGait()切换 +ContinuousGait()保持
2. 观测空间设计
核心观测(18维):
-
IMU:
rpy(3) +gyroscope(3) +accelerometer(3) = 9维 -
速度:
velocity(3) +yawSpeed(1) = 4维 -
足端:
footForce(4) 或二值化接触信号 = 4维 -
指令: 上一个动作指令(用于时序一致性)= 1维
扩展观测:
-
rangeObstacle(4):避障任务 -
footPositionBody(12):足端轨迹跟踪
3. 训练流程建议
// 初始化阶段
sport_client.BalanceStand(); // 进入平衡站立(解除锁定)
sport_client.ContinuousGait(true); // 开启持续步态,避免频繁启停
sport_client.SwitchGait(1); // 切换至trot步态(最稳定)
// RL控制循环(建议频率:50-100Hz)
while (training) {
// 1. 获取观测
HighStateHandler(state);
// 2. 策略网络推理 -> 输出动作
auto action = policy_network(observation);
// 3. 发送控制指令
sport_client.Move(action.vx, action.vy, action.vyaw);
sport_client.BodyHeight(action.height);
// 4. 计算奖励、存储经验
compute_reward(state, action);
}
4. 安全与复位机制
| 接口 | 用途 |
|---|---|
Damp() |
紧急停止,所有关节进入阻尼状态(最高优先级) |
RecoveryStand() |
翻倒后自动恢复站立,建议作为episode终止后的复位动作 |
StopMove() |
停止当前运动并恢复默认参数,用于episode重置 |
5. 注意事项
-
版本兼容性:确保 Go2 软件版本 < V1.1.6,否则接口可能不兼容
-
遥控器隔离:调用
SwitchJoystick(false)关闭遥控器响应,避免人工干预RL训练 -
动作冲突:特殊动作(Sit, FrontFlip等)需等待上一个动作完成,建议在RL中避免使用或单独处理
-
通信延迟:DDS通信存在延迟,建议控制频率不超过100Hz,并设置超时保护(
SetTimeout(10.0f))
五、轨迹跟踪接口(进阶)
TrajectoryFollow(std::vector<PathPoint> path) 支持30个轨迹点的未来轨迹跟踪,适合:
-
模型预测控制(MPC) 作为高层规划器
-
模仿学习(IL) 跟踪专家轨迹
-
多步预测RL 输出未来轨迹而非单步速度
PathPoint结构包含时间、位置、速度,可实现复杂的运动模式学习。

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐

所有评论(0)