• 欢迎访问少将全栈,学会感恩,乐于付出,珍惜缘份,成就彼此、推荐使用最新版火狐浏览器和Chrome浏览器访问本网站。
  • 吐槽,投稿,删稿,交个朋友
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏少将全栈吧

Microduck 的轮滑模式:同一只鸭子怎么从双足行走切换到旱冰滑行

Build in Public admin 12小时前 24次浏览 已收录 扫描二维码

Microduck 的轮滑模式:同一只鸭子怎么从双足行走切换到旱冰滑行

你大概见过旱冰鞋。但你见过一只机器人鸭子穿旱冰鞋吗?

Microduck 不止会走路。在它的 RL 任务列表里,有整整六个任务是关于”轮滑”的——把被动轮子装在脚底,同一套 14 个 XL330 舵机,同一个 50Hz 控制循环,但运动模式从双足步态彻底切换到轮式滑行。这背后是一套精心设计的任务变体体系,让一只 25cm 的鸭子同时成为步行者和轮滑运动员。

六个轮滑任务,六种滑法

Microduck 的 RL 训练仓库 microduck_rl 里注册了六种轮滑任务,每种都对应不同的运动技能:

  • Velocity-Rollers:基础轮滑速度跟踪,脚底装上被动轮,跟踪速度指令
  • Swizzle:经典对称内外八字滑行,靠两条腿交替推蹬产生前进动力
  • RollerCrouch:滑行中蹲下,重心降低的同时保持平衡
  • RollerSlope:坡道滑行,处理下坡时的加速度控制
  • RollerStandUp:从地面站起来到轮子上,是轮滑版的跌倒恢复
  • Spin:原地快速旋转,靠轮子而不是脚来转

这六个任务共享同一个 61 维观测向量——48 维本体感知加 13 维指令块。这是 Microduck 的铁律:不管你在走路还是在滑冰,策略看到的”身体”是一样的。

被动轮子怎么建模

在 MuJoCo 仿真里,轮子不是什么特殊的东西。它就是一个被动关节(passive joint),连在脚底,没有任何执行器。看 MJCF 模型里的定义:


  
  

阻尼为零,摩擦损耗为零,惯量几乎为零。这是一个理想化的自由旋转关节——轮子唯一做的事就是改变脚底接触面的几何形状,从”脚掌着地”变成”圆柱滚过地面”。

但这个改变是颠覆性的。双足行走的核心是交替单腿支撑加重心转移,每一步都是一个”受控跌倒”的过程。而轮滑完全不同——重心在两腿之间,靠的是轮子的滚动摩擦而非静摩擦来维持运动。动力学方程变了,稳定性判据变了,连”什么叫站稳”都不一样了。

同一套观测,不同的脑

Microduck 最有意思的设计是策略热切换。在真机上,robotd 守护进程可以运行时替换策略——走路用一个 ONNX 模型,轮滑用另一个,跌倒了切换到恢复策略。这要求所有策略看到相同的输入格式。

61 维观测空间的布局是固定的:48 维本体感知(关节角度、速度、IMU、历史动作等)加 13 维指令块 [速度指令(3), 头部姿态(4), 身体姿态(6)]。

没用到的指令槽位会被零填充(zero-pad),但观测项本身不能删。这意味着轮滑策略的速度指令在头部姿态槽位上是零,行走策略的头部姿态指令在轮滑任务里也是零。维度不变,格式不变,切换时没有重新初始化的开销。

AGENTS.md 里写得很直白:obs layout 是 61D,跨整个策略族共享,策略在运行时可热切换。一个不遵守这个约定的环境,会让 ONNX 导出的模型在真机上无法被其他策略替换。

不同的碰撞模型

轮滑任务用的是 robot_groundcontact_rollers.xml,和走路用的 robot_walk.xml 不同。区别在于碰撞集合——走路只需要脚底接触,轮滑需要轮子与地面的滚动接触建模。

Microduck 有四套 MJCF 模型,对应不同的碰撞需求:

  • robot_walk.xml:只保留脚底碰撞,躯干和头部的碰撞被砍掉(摔了就摔了,便宜)
  • robot_groundcontact.xml:精选地面接触集,身体可以躺在地上
  • robot_groundcontact_rollers.xml:在地面接触基础上加被动轮
  • robot_allcollisions.xml:全碰撞模型,每个零件都有碰撞体

轮滑模型的选择不是随意的。轮子与地面的接触需要精确定义,否则滚动摩擦算不对,策略在仿真里学到的滑行技巧到真机上就废了。

从走路到轮滑的迁移

轮滑策略不是从零训练的。AGENTS.md 的工作流建议:新的任务应该从最接近的模板构建,不要从空白开始。轮滑任务自然是在行走任务基础上的变体——腿的构型、舵机的布局、观测空间都不变,变的是脚底的接触条件。

这意味着可以用行走策略的权重做暖启动(warm start)。microduck_rl 里有一个 MICRODUCK_WARM_START 环境变量,启用后从检查点加载权重和优化器状态,但把课程学习的步数计数器清零。策略继承了行走中学到的平衡感,但要从头学轮滑特有的技能。

不过这里有个坑。暖启动时如果不清零 common_step_counter,从行走任务带来的 9 万步计数会让课程学习直接跳到最终阶段——所有保护性奖励项开到满权重,一个刚启动的轮滑策略根本做不到,训练直接崩。这个 bug 在 2026 年 9 月 9 日被发现,之后加上了 Patch 5 来处理。

轮滑为什么重要

从工程角度,轮滑模式扩展了 Microduck 的运动能力边界。一只鸭子如果只能走,它在平滑地面上的效率比不上任何轮式机器人。但如果能切换到轮滑模式,它在平坦路段滑行、复杂路段步行的混合策略,就能兼顾速度和适应性。

从 RL 研究角度,这更值得关注。同一个形态的机器人,同一套硬件,通过训练不同的策略来实现完全不同的运动模式,然后运行时热切换——这是多任务机器人学习的一个很好示范。而且轮滑和步行的动力学差异足够大,能暴露出 sim2real 迁移中的不同问题域。步行时最大的问题是脚底冲击和重心转移,轮滑时最大的问题是滚动摩擦建模和侧向稳定性。

Microduck 的轮滑任务集,本质上是在问一个问题:一只鸭子能用多少种方式移动?答案是——至少六种。而且每种都能导出成 ONNX,装到真鸭子上跑。

喜欢 (0)赏
[🍬谢谢你请我吃糖果🍬🍬~]
分享 (0)
关于作者:
少将,关注Web全栈开发、项目管理,持续不断的学习、努力成为一个更棒的开发,做最好的自己,让世界因你不同。