# 宇树四足机器人开发

机器人列表收录 Go2、B2、Go2-W。Go2-W 属于轮足机器人，按“四足”筛选。品牌为宇树科技；原有 Bumi 品牌为松延动力。

## 接入状态

| 型号 | 电机 | 当前状态 |
| --- | --- | --- |
| Go2 | 12 | 物理仿真、运动接口、五个任务 |
| B2 | 12 | 物理仿真、运动接口、五个任务 |
| Go2-W | 12 个腿关节 + 4 个轮电机 | 物理仿真、运动接口、五个任务 |


## 本地开发流程

1. 安装 0.9.5 桥接，在桥接和网页选择同一机器人。
2. 在用户 PC 安装宇树原版 [Python SDK2](https://github.com/unitreerobotics/unitree_sdk2_python)，保持场景开启。
3. 下载 `/starter/quadruped_student.py`，例如 `python quadruped_student.py --robot go2 --interface lo`。Windows 回环接口为 `Loopback Pseudo-Interface 1`；网卡和 DDS domain 必须与桥接一致。
4. 自行编写识别、巡线、跟随、导航和任务状态机；运行本地程序控制浏览器虚拟机器人。

Go2、Go2-W 使用 `unitree_sdk2py.go2.sport.sport_client.SportClient`，B2 使用 `unitree_sdk2py.b2.sport.sport_client.SportClient`。它们与 G1/R1 的 `LocoClient` 不同。官方 C++ SDK2 使用同一 DDS 协议，但本次新增接口的联调程序为 Python，未宣称 C++ 完成同等实测。

支持 `StandUp`、`BalanceStand`、`Damp`、`Move`、`StopMove`；当前站立指令表示进入站立控制，不复刻真机卧倒起身全过程。Move 以 m/s、rad/s 输入，范围为前后 ±0.6、横向 ±0.3、转向 ±0.5，需持续发送；500 ms 无新 Move 时停车，不把超时停车算作主动完成任务。官方 `Move` 使用无响应请求，其返回值只能说明发送结果，应读取实际状态确认运动。

底层使用 `unitree_go` 的 `LowCmd_` / `LowState_`，不是 G1/R1 的 `unitree_hg`。先调用 `MotionSwitcherClient.ReleaseMode` 再发布带官方 CRC 的 `rt/lowcmd`。腿电机按 FR、FL、RR、RL 排列，各含 hip、thigh、calf；Go2-W 的 12–15 为 FR、FL、RR、RL 轮电机。轮子采用速度控制，不限制累计旋转角度。底层控制的平衡由用户负责。

状态为 `rt/lowstate` 和 `rt/sportmodestate`；相机通过平台 `/v1/camera` 与 `/v1/camera/info` 获取当前任务原始 RGB。相机是虚拟外接相机，位于前部头端前方 5 cm，提供前视和下视，不模拟真机视频、雷达或自主导航服务。

## 模型、策略与验证边界

模型来源为[宇树官方 unitree_mujoco](https://github.com/unitreerobotics/unitree_mujoco)，关节物理和封面均来自对应型号。Go2、B2、Go2-W 步态来源为 [rl_sar / robot_lab](https://github.com/fan-ziqi/rl_sar)，是 Apache-2.0 社区策略，不是宇树官方固件。静止保持按对应策略配置执行；实际速度和转向有跟踪误差，用户程序应读取状态形成反馈。

`upstream.json` 记录固定提交和修改内容，源模型和策略许可证一并保存。使用 `scripts/import-quadrupeds.py` 重新生成，禁止直接修改生成的模型、元数据和封面源数据。

运行 `node node_modules/tsx/dist/cli.mjs scripts/test-quadruped-walking.ts` 验证真实 MuJoCo/ONNX 的站立、前进、转向和停车。测试验证的是仿真，不代表真机性能或全部固件功能已实现。
