资讯动态

Microduck RL轮滑训练:带被动轮的速度跟踪任务从0到1

发布时间:2026/9/18 23:26:41 来源:尧图企业网站定制
Microduck RL轮滑训练带被动轮的速度跟踪任务从0到1【免费下载链接】microduck_rlRL training environments for Microduck (mjlab)项目地址: https://gitcode.com/GitHub_Trending/mi/microduck_rlMicroduck RL 是基于 mjlabMuJoCo Warp PPO的开源强化学习训练仓库本教程带你完成它的轮滑训练任务——给 ~800 g 的双足机器人 Microduck 换上 4 个被动轮passive wheels训练一套能速度跟踪的轮滑策略命令推就蹬腿加速、命令 0 就滑行、命令负就刹车并导出 ONNX 部署到真机。一、这个任务在解决什么问题普通双足机器人靠脚掌摩擦地面行走而轮滑机器人脚下是自由滚动的轮子——纵向没有抓地力蹬地必须靠抬腿、落刀、斜向推动这些技巧完成。这个任务对应的任务 ID 是Mjlab-Velocity-Flat-MicroDuck-Rollers它与主行走任务Mjlab-Velocity-Flat-MicroDuck共享同一套61 维观测布局48 维本体感知 13 维命令块这是整个项目最重要的约定所有策略行走 / 摔倒恢复 / 轮滑 / 花式在真机运行时可以随时热切换因为观测契约完全一致。二、从0到1环境 → 训练 → 部署三步走第1步准备带被动轮的机器人模型轮滑机器人加载的是专用 MJCF 模型robot_groundcontact_rollers.xml14 个受控关节 4 个被动轮铰链命名为passive_LF_?wheel等轮子交错插在关节顺序中每个踝关节后面跟两个轮。项目里所有关节都按名字解析、绝不硬编码索引这是被动轮交错布局下的安全约定见 microduck_constants.py 中的MICRODUCK_WALK_ROLLERS_ROBOT_CFG。第2步用 PPO 训练速度跟踪策略训练走的是 mjlab 标准命令一行搞定# 先做冒烟测试64 环境 × 5 轮几分钟内抓出 95% 的配置错误 uv run train Mjlab-Velocity-Flat-MicroDuck-Rollers --env.scene.num-envs 64 --agent.max_iterations 5 # 正式训练4096 环境并行需要 CUDA GPU uv run train Mjlab-Velocity-Flat-MicroDuck-Rollers --env.scene.num-envs 4096训练器配置MLP 512/256/128 ELU 观测归一化 PPO定义在 microduck_velocity_rollers_env_cfg.py 末尾的MicroduckRollersRlCfg其中熵系数特意调到 0.03比行走环境更高因为轮滑步态比走路更难探索出来。第3步回放验证并导出 ONNX# 在可视化窗口里观看训练出的策略 uv run play Mjlab-Velocity-Flat-MicroDuck-Rollers --wandb-run-path entity/project/run_id # 导出 ONNX观测归一化器会被烤进计算图必须走这条导出路径 uv run scripts/export.py Mjlab-Velocity-Flat-MicroDuck-Rollers --wandb-run-path ... # 用键盘在 CPU 版 MuJoCo 里彩排真机部署BAM 伺服模型与训练一致 uv run scripts/infer_policy.py --walking output.onnx三、任务设计命令语义与奖励表cmd_x 的轮滑语义与普通行走任务命令 期望速度不同这里命令是意图cmd_x含义机器人行为0滑行coast单刀滑行、腿保持安静 0蹬推push抬腿斜向蹬、加速 0刹车brake主动减速到停命令范围lin_vel_x ∈ (-0.5, 0.6)纵向速度命令被固定为 0转向命令暂时关闭先练直线。奖励设计唯一正向任务奖励是轮子真的在转这是整个奖励栈里最关键的一条规则唯一的正向任务奖励wheel_speed权重 10.0——机器人必须真的把轮子转起来才能得分其余奖励项全是塑形风格的。核心实现见 mdp.py 的wheel_speed_reward奖励项权重作用wheel_speed10.0正向任务奖励轮速与命令的 tanh 匹配目标 0.3 m/s饱和在可达速度上避免过度驱动braking1.0cmd_x0 时奖励停下来glide4.0单刀滑行 腿安静 → 奖励承诺每一次蹬推而不是疯狂踢腿single_support3.0只有一只刀片着地且真的在前进→反 swizzle 核心信号同时抑制双脚原地搓步skating_air_time1.5蹬推时的抬腿阶段有前进速度门控防原地抖动刷分forward_lean1.5蹬推时轻微前倾抵消反扭矩gait_symmetry−1.0左右腿蹬推次数均衡防止单腿流漂移hip_roll_neutral−2.0休息时收拢双腿但蹬推瞬间的宽幅横推不被压制配置文件中保留了大量试错注释比如为什么contact_frequency惩罚被撤掉——它会被永远不抬腿的 swizzle 步态钻空子这些注释本身就是一份奖励设计避坑指南值得通读 microduck_velocity_rollers_env_cfg.py。四、Sim2Real领域随机化清单 轮滑对平衡极其敏感随机化强度比行走任务更温和推力扰动只有 ±0.2 m/s行走是 ±0.3质量扰动 ±5%。关键项轮轴承摩擦课程训练前 2000 轮轮子完全无阻力保证先学会滑行之后分阶段升到 0.0015 的真实轴承阻力——太早加阻力会让策略跑偏去刷航向编码器偏差±0.015 rad、IMU 安装偏差±6°观测层面BAM 伺服模型XL330 的完整电压控制律 负载依赖摩擦电池电压 6.5–8.2 V 随机、负载压降实现见 friction_dr_bam.py。对这个级别的微型机器人执行器保真度就是 sim2real 差距的大头。配套测试tests/test_wheel_glide.py、tests/test_crouch_glide.py在纯 CPU 上锁定关节索引映射、奖励符号约定等不变量。五、轮滑任务家族一个模型五种玩法同一套被动轮模型 61D 观测契约衍生出一整个轮滑任务家族注册表见 tasks/__init__.py任务 ID玩法Mjlab-Velocity-Flat-MicroDuck-Rollers本教程速度跟踪滑行Mjlab-Velocity-Swizzle-MicroDuck经典对称搓步swizzleMjlab-RollerCrouch-Flat-MicroDuck滑行中蹲低 1 秒再站起来花样动作Mjlab-RollerSlope-Flat-MicroDuck坡道上下滑行Mjlab-RollerStandUp-Flat-MicroDuck从趴/躺姿态直接站回轮子上详见 roller_standup_policy_summary.mdMjlab-Spin-Flat-MicroDuck原地快速旋转设计上还有一个巧思蹲滑RollerCrouch复用了运行时已有的--ground-pick相位槽位一行 Rust 都不用改就能让真机按钮触发蹲下→滑行→起身设计文档见 2026-07-17-roller-crouch-glide-design.md。六、文件地图任务配置奖励 / 命令 / 随机化 / 课程microduck_velocity_rollers_env_cfg.py全部自定义 MDP 函数奖励、事件、观测mdp.py机器人模型与 BAM 执行器配置microduck_constants.py带轮 MJCFrobot_groundcontact_rollers.xml真机部署彩排脚本infer_policy.py完整 sim2real 方法论与奖励设计教训AGENTS.md七、小结Microduck RL 的轮滑速度跟踪任务展示了微型双足机器人 RL 训练的完整闭环被动轮模型 意图式命令 轮子必须转的正向奖励 分阶段轴承摩擦课程 与真机一致的 BAM 伺服物理。掌握这个任务后你可以顺着同一套 61D 观测契约把蹲滑、坡道、站起等轮滑家族任务都从 0 训到 1并通过publish一键发布到真机。【免费下载链接】microduck_rlRL training environments for Microduck (mjlab)项目地址: https://gitcode.com/GitHub_Trending/mi/microduck_rl创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价