一、接口架构概览

高层运动服务分为两部分:

  • 高层控制接口:通过 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. 注意事项

  1. 版本兼容性:确保 Go2 软件版本 < V1.1.6,否则接口可能不兼容

  2. 遥控器隔离:调用 SwitchJoystick(false) 关闭遥控器响应,避免人工干预RL训练

  3. 动作冲突:特殊动作(Sit, FrontFlip等)需等待上一个动作完成,建议在RL中避免使用或单独处理

  4. 通信延迟:DDS通信存在延迟,建议控制频率不超过100Hz,并设置超时保护(SetTimeout(10.0f)


五、轨迹跟踪接口(进阶)

TrajectoryFollow(std::vector<PathPoint> path) 支持30个轨迹点的未来轨迹跟踪,适合:

  • 模型预测控制(MPC) 作为高层规划器

  • 模仿学习(IL) 跟踪专家轨迹

  • 多步预测RL 输出未来轨迹而非单步速度

PathPoint结构包含时间、位置、速度,可实现复杂的运动模式学习。

Logo

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

更多推荐