@pollenrobotics:在仿真中训练。在现实中运行。教它新技巧。这是驱动 Microduck 的 sim2real 循环。强化学习栈开源…
摘要
用于 Microduck 双足机器人的开源强化学习栈,支持使用 MuJoCo 和 PPO 进行 sim2real 训练和部署。
查看缓存全文
缓存时间: 2026/08/28 23:46
在模拟环境中训练。部署到真实世界。让它学习新技能。这就是驱动Microduck的模拟到现实的闭环。强化学习栈在此开源:https://github.com/pollen-robotics/microduck_rl… 购买链接:https://pollen-robotics.com/microduck/?x=2 代码库:https://github.com/pollen-robotics/microduck… 加入社区:https://discord.com/invite/pollen-community-519098054377340948…
pollen-robotics/microduck_rl
来源:https://github.com/pollen-robotics/microduck_rl
Microduck RL
Microduck(https://github.com/pollen-robotics/microduck)的强化学习训练环境——一款约800克、约25厘米高的双足机器人——基于mjlab(https://github.com/mujocolab/mjlab)(MuJoCo Warp)和PPO构建。策略在50Hz下训练,导出为ONNX格式,并通过pollen-robotics/microduck(https://github.com/pollen-robotics/microduck)中的运行时部署到真实机器人。 https://github.com/user-attachments/assets/50c3d537-8db2-4005-9d9c-3472faeec4d0
该代码库编码了完整的模拟到现实方案:BAM(https://github.com/Rhoban/bam)执行器物理模型、域随机化、回程间隙模拟,以及使其成功运作的奖励设计经验(提炼的策略手册请参见AGENTS.md)。
快速开始
需要一个CUDA GPU(训练通过MuJoCo Warp运行)和uv(https://docs.astral.sh/uv/)。
在ARM设备上(DGX Spark / GB10, Jetson):
uv sync在首次运行时会拉取约2GB的CUDA库,而uv默认的30秒HTTP超时可能导致下载中断。首次同步时请设置UV_HTTP_TIMEOUT=600。
git clone https://github.com/pollen-robotics/microduck_rl
cd microduck_rl
# 训练行走策略(使用你的GPU;约4096个环境运行1-2小时可获得可用步态)
uv run train Mjlab-Velocity-Flat-MicroDuck --env.scene.num-envs 4096
# 在查看器中观看训练好的策略
uv run play Mjlab-Velocity-Flat-MicroDuck --wandb-run-path
# 导出为ONNX格式以进行部署
uv run scripts/export.py Mjlab-Velocity-Flat-MicroDuck --wandb-run-path <...>
# 在CPU上的MuJoCo中通过键盘驱动导出的策略
uv run scripts/infer_policy.py --walking output.onnx
从检查点恢复训练:
uv run train Mjlab-Velocity-Flat-MicroDuck --env.scene.num-envs 4096 \
--agent.run-name resume --agent.load-checkpoint model_29999.pt --agent.resume True
没有GPU?在任意训练命令中添加 --hf-jobs 即可在Hugging Face Jobs上运行(而非本地),参见 scripts/hf/README.md。
任务
uv run list-envs 会打印实时注册表。如有标注,存在平坦/粗糙地形变体。
| 任务ID | 地形 | 描述 |
|---|---|---|
Mjlab-Velocity-{Flat,Rough}-MicroDuck | 平坦/粗糙 | 主要任务:根据速度指令行走 + 头部姿态指令 |
Mjlab-VelStand-{Flat,Rough}-MicroDuck | 平坦/粗糙 | 行走 + 跌倒恢复(单一策略) |
Mjlab-StandUp-{Flat,Rough}-MicroDuck | 平坦/粗糙 | 从面朝下/面朝上/坐姿站立,然后保持站立 + 身体姿态控制 |
Mjlab-SitStand-{Flat,Rough}-MicroDuck | 平坦/粗糙 | 在单一策略中根据指令温和地坐下↔站起,头部可控制 |
Mjlab-GroundPick-{Flat,Rough}-MicroDuck | 平坦/粗糙 | 蹲下并用嘴尖触碰地面,然后回到站立姿势 |
Mjlab-BallKick-Flat-MicroDuck | 平坦 | 向前踢一个直径70毫米/重15克的球(执行器对球不可见) |
Mjlab-Roulade-Flat-MicroDuck | 平坦 | 向前翻滚越过头部,双脚着地 |
Mjlab-Velocity-Flat-MicroDuck-Rollers | 平坦 | 溜旱冰速度跟踪(脚底有被动轮) |
Mjlab-Velocity-Swizzle-MicroDuck | 平坦 | 经典的对称交叉蹬地滑行 |
Mjlab-RollerCrouch-Flat-MicroDuck | 平坦 | 在滑行时蹲下 |
Mjlab-RollerSlope-Flat-MicroDuck | 斜坡 | 在滚轮上沿斜坡滑下 |
Mjlab-RollerStandUp-Flat-MicroDuck | 平坦 | 从地面站立到滚轮上 |
Mjlab-Spin-Flat-MicroDuck | 平坦 | 在滚轮上快速原地旋转 |
在部署时,运行时通过共享的61维观测契约热交换这些策略(行走/恢复/特技),因此任何一个策略都可以随时接管机器人。scripts/infer_policy.py 正是模拟这一过程:
uv run scripts/infer_policy.py --walking walk.onnx --standing stand.onnx \
--sitstand sitstand.onnx --roulade roulade.onnx --new-cmd-obs
键盘驱动(速度指令,G 地面拾取,Y 坐下/站立,R 前滚翻,K/L 踢球);支持 --debug、--save-csv、--record 以进行模拟到现实的对比。
回程间隙变体
每个主要任务都有一个回程间隙孪生任务,它在模型上训练,该模型在14个伺服关节的每一个串联了±1°的齿轮间隙(总计2°):在任务ID中的 MicroDuck 前插入 -Backlash,例如 Mjlab-Velocity-Flat-Backlash-MicroDuck。
回程间隙的建模符合模拟到现实的要求:每个伺服都有一个无驱动的 passive__backlash 铰链,由于真实编码器位于间隙的输出端,因此固件PD仿真(BacklashEncoderBamActuator)和 joint_pos/joint_vel 观测都穿过间隙读取(qpos[servo] + qpos[backlash])。观测和动作维度不变,因此ONNX导出和运行时无需更改。参见 src/mjlab_microduck/tasks/backlash.py。
执行器模型
所有任务都使用BAM(https://github.com/Rhoban/bam) M6执行器模型,适用于Dynamixel XL330(电压控制律、反电动势、库仑/斯特里贝克/负载相关摩擦),并对每个环境进行电池电压、负载下的电压降、命令延迟和摩擦大小的域随机化(src/mjlab_microduck/actuator/ 中的 FrictionDRBamActuator)。
在这样微小的规模上——微型伺服驱动约800克的双足——执行器保真度是模拟到现实差距的主要部分,这就是为什么执行器被建模到其电压控制律,而非理想的PD控制器。
机器人模型
MJCF模型位于 src/mjlab_microduck/robot/microduck/,由Onshape通过onshape-to-robot(https://github.com/Rhoban/onshape-to-robot)导出,每个模型对应一个 config_mjcf_*.json:
| XML文件 | 使用者 |
|---|---|
robot_walk.xml | Velocity(剥离了躯干/头部接触——跌倒成本低) |
robot_allcollisions.xml | VelStand, StandUp, SitStand, GroundPick, BallKick, Roulade(身体可以物理接触地面) |
robot_allcollisions_rollers.xml | 滚轮任务(被动轮) |
robot_*_backlash.xml | 回程间隙任务变体(由 add_backlash.py 生成) |
scene*.xml 文件为机器人包装了一个地板+关键帧(站立/坐下/折叠),用于快速查看和 infer_policy.py。
项目结构
src/mjlab_microduck/
├── robot/
│ ├── microduck/ # MJCF导出,导出配置,场景,add_backlash.py
│ └── microduck_constants.py # 机器人配置,HOME坐标系,BAM执行器配置
├── actuator/
│ └── friction_dr_bam.py # BAM + 摩擦域随机化 + 回程间隙编码器反馈
├── tasks/
│ ├── __init__.py # 任务注册(基础版 + 回程间隙变体)
│ ├── mdp.py # 奖励,事件,观测,自定义类
│ ├── backlash.py # make_backlash_variant() 环境配置包装器
│ └── microduck_*_env_cfg.py # 每个任务家族一个配置模块
├── train_cli.py # `train` 入口点(+ --hf-jobs)
└── hf_jobs.py # Hugging Face Jobs 提交
值得注意的约定:
- 观测布局在所有策略中共享(61维执行器观测:48维本体感觉 + 指令
[twist(3), head_pose(4), body_pose(6)]),这是运行时策略热交换成为可能的原因。不使用指令槽的环境会用零填充它,而不是丢弃。 - 非驱动关节都命名为
passive_*(滚轮、回程间隙铰链);执行器、关节观测和姿态奖励使用^(?!passive_).*选择伺服关节。 - 域随机化开关是每个环境配置文件顶部的
ENABLE_*布尔值。 - 关节布局(14个伺服):0-4 左腿(髋偏航、髋翻滚、髋俯仰、膝、踝),5-8 颈部/头部(颈俯仰、头俯仰、头偏航、头翻滚),9-13 右腿。
- 导出器将观测归一化器烘焙到ONNX图中——始终部署由
scripts/export.py生成的ONNX,而非手动转换的检查点,否则策略在运行时会看到未归一化的观测。
AGENTS.md 记录了环境构建工作流程以及整个项目中学到的奖励设计规则(也适用于在此代码库中工作的AI编码代理)。
测试
uv run --with pytest pytest tests/
仅依赖CPU的配置不变性和奖励函数回归测试——它们锁定了关节索引映射、奖励符号约定和NaN防护。
相关项目
- microduck(https://github.com/pollen-robotics/microduck) — Microduck项目主页,包括运行导出策略的板载运行时
- mjlab(https://github.com/mujocolab/mjlab) — 训练框架(MuJoCo Warp + rrl_rl)
- BAM(https://github.com/Rhoban/bam) — 更好的执行器模型,由Rhoban开发
许可证
本项目采用Apache 2.0许可证。详情请参阅LICENSE文件。 3D模型文件采用知识共享署名-非商业性使用-相同方式共享许可证。
相似文章
pollen-robotics/microduck_rl
这个GitHub仓库为Microduck双足机器人提供了强化学习训练环境,使用MuJoCo Warp和PPO,并包含sim2real部署流程。
@victormustar: 你甚至不需要拥有Microduck就可以开始享受它的乐趣 - 模拟器运行得非常出色,你只需询问你的代理…
Pollen Robotics 展示了 Microduck,这是一款机器人和模拟器,配备开源强化学习栈,使AI代理能够进行sim2real训练。
成千上万的人即将开始在真实的小型人形机器人上训练行为
Pollen Robotics 发布 Microduck,这是一款开源的双足人形机器人,配备了 sim2real 管道,使得爱好者能够使用强化学习来训练行为,并可能加速机器人领域的创新。
@pham_blnh:刚刚快速浏览了 microduck_rl,代码库非常优雅,我推荐阅读 agent.md,因为它包含…
一个提供 Microduck 双足机器人强化学习训练环境的 GitHub 仓库,基于 MuJoCo Warp 构建,使用 PPO,包括 sim2real 部署和奖励建模技术。
@Alacritic_Super:别被小鸭子骗了……里面藏着一个严肃的机器人。认识一下来自 Pollen Robotics 的 Microduck。它是一个 c…
Microduck 是来自 Pollen Robotics 的一款紧凑双足机器人,采用开源软件,可在仿真和真实机器人上创建和训练行为。