宇树 R1 EDU 开发说明
平台第三台机器人为 R1 EDU 26 自由度版本。用户在本地运行原版 unitree_sdk2_python,由 DDS 桥接连接浏览器物理仿真。视觉识别、跟随、导航和任务状态机由用户开发。
安装和连接
- 安装平台 0.9.5 桥接,选择“宇树 R1 EDU”并连接。
- 登录网页,选择 R1 和任务场景,保持场景页面开启。
- 按宇树官方 SDK 仓库安装 Python SDK。本次使用原版提交
814556d15970dd2ecf1c9984e845ca02ab07e206。
git clone https://github.com/unitreerobotics/unitree_sdk2_python.git
cd unitree_sdk2_python
pip3 install -e .
python3 /path/to/r1_student.py --domain 0 --interface lo
Linux 同机仿真使用 lo;Windows 回环网卡示例为 Loopback Pseudo-Interface 1。SDK 和桥接的 DDS domain 必须相同。Windows 本地验证环境为 Python 3.12、CycloneDDS 11.0.1;官方依赖声明为 CycloneDDS 0.10.2,此验证不等于官方 Windows 支持承诺。该 SDK 在 Windows 下写入当前驱动器的 /tmp/cdds.LOG,需先创建该目录。跨 WSL、虚拟机或另一台机器需要配置互通的网卡,不能使用各自独立的回环接口。
高层运动
from unitree_sdk2py.core.channel import ChannelFactoryInitialize
from unitree_sdk2py.r1.loco.r1_loco_client import LocoClient
ChannelFactoryInitialize(0, "lo")
robot = LocoClient()
robot.SetTimeout(3.0)
robot.Init()
# 根据你自己的任务程序调用:
# robot.Start()
# code = robot.SetVelocity(vx, vy, omega, duration)
# robot.StopMove()
注意 R1 的导入路径是 r1.loco.r1_loco_client。当前实现 Start(FSM 811)、Damp(1)、ZeroTorque(0)、Move、SetVelocity、StopMove。SetFsmId 和 SetVelocity 返回状态码;该版本官方 SDK 的 Start、Move、StopMove 等便捷方法不返回状态码,需订阅状态确认效果。R1 的官方 Python LocoClient 此版本没有公开 GetFsmId() 方法。
速度单位 m/s、rad/s;平台验证范围为前后 ±0.6、横向 ±0.3、转向 ±0.5。duration 到期后停止。未实现接口返回 3203,非法参数返回 3204,控制模式不允许返回 3202。当前不实现 Stance、起卧恢复、挥手握手、灵巧手、语音和真机视频服务。
底层关节与状态
遵循官方 R1 底层示例:读取 LowState_ → 获取 mode_machine → MotionSwitcherClient.ReleaseMode() → 周期发布带官方 CRC 的 LowCmd_。
| 项目 | 支持内容 |
|---|---|
rt/lowcmd |
unitree_hg.msg.dds_.LowCmd_,PR 坐标,26 个关节的 q、dq、tau、kp、kd |
rt/lowstate |
unitree_hg.msg.dds_.LowState_,实际关节、骨盆 IMU、tick、CRC |
rt/odommodestate |
unitree_go.msg.dds_.SportModeState_,实际仿真位姿和速度 |
rt/secondary_imu |
躯干 IMU |
MotionSwitcherClient |
CheckMode、ReleaseMode、SelectMode("sport") |
官方消息保留 35 个电机槽位,本型号使用:腿 0–11,腰 12、13,左臂 15–19,右臂 22–26,头部俯仰 29、偏航 30。mode_pr=0,当前仿真 mode_machine=0。CRC 按官方原生结构体布局计算。底层流超过 500 ms 未更新进入阻尼。状态约 50 Hz 发布,未模拟的温度、电池等字段为零。AB 并联坐标与 rt/arm_sdk 尚未实现。
相机和任务
所有场景均配备前视、下视相机,镜头光心在头部前缘向前 5 cm,随头部运动。网页同时显示两路画面;/v1/camera 和 /v1/camera/info 提供当前任务选用的图像和实际标定。它们是平台外接 RGB 相机接口,不是 R1 真机双目相机服务。
五个任务按运动控制、巡线、人物跟随、指令交互、自主返航递进。三款机器人的任务进度分别保存,管理员自动解锁并获得对应积分。选择页三款机器人的封面主体等高显示。
仿真来源和边界
- 官方 R1 产品资料与官方开发文档:二次开发选用 EDU 型号。
- 物理模型来自官方 unitree_rl_mjlab,头部两关节、惯性和限位来自官方 R1 URDF。导入器恢复训练模型中焊接的头部,使用 PR 简化踝关节。
- 浏览器运动策略采用cooplabs/spur公开的 R1MC-Manip2-Lean 权重(Apache-2.0)。这是社区步态,不是宇树官方固件或官方预训练权重。保留原始拳形手,未接入策略作者使用的 Dex3 手部;需以本平台实测结果为准。
- 模型与策略的固定提交、许可、转换内容分别记录于
public/robots/r1/upstream.json、LICENSE、URDF-LICENSE、policy/PROVENANCE.md和policy/LICENSE。 - SDK 测试验证的是本机 DDS 到仿真的控制链路,未连接 R1 实体机器人。迁移真机必须按官方手册重新验证网卡、型号、开发模式与运动参数。
复现
2026-11-06 本地实测:原版 R1 LocoClient 经 DDS 控制浏览器仿真,前进 1.064 米、转向 0.642 弧度;指令 duration 到期停止,LowState CRC 校验通过;释放运动模式后,底层电机槽位 30 驱动头部偏航实际变化 0.099 弧度。R1 的站立、前进、转向、停车四组 20 秒物理仿真与 G1 回归测试均通过。Windows 安装包内置运行时通过 R1 DDS 自检;Linux 安装包完成构建,未在 Linux 实机运行。
python scripts/import-r1.py /path/to/unitree_rl_mjlab /path/to/unitree_ros /path/to/spur
node node_modules/tsx/dist/cli.mjs scripts/test-r1-walking.ts
python dds/adapter.py --robot r1 --domain 0
python tests/dds/g1_official_sdk_test.py --robot r1 --domain 0 --interface lo
生成的模型、元数据不要手动修改,应修改导入器后重新生成。