ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

14个舵机的关节布局:Microduck RL的关节索引与轮子交错陷阱

14个舵机的关节布局:Microduck RL的关节索引与轮子交错陷阱 14个舵机的关节布局Microduck RL的关节索引与轮子交错陷阱【免费下载链接】microduck_rlRL training environments for Microduck (mjlab)项目地址: https://gitcode.com/GitHub_Trending/mi/microduck_rlMicroduck RL是一套基于 mjlabMuJoCo Warp PPO 的强化学习训练环境专为 Microduck 这台约 800 g、25 cm 高的双足机器人打造。它用 14 个 Dynamixel XL330 舵机驱动整台机器以 50 Hz 训练行走、起身、侧滑、翻筋斗等策略并导出 ONNX 部署到真机。而理解它的关节索引是读懂整个项目的第一把钥匙——因为这里藏着一个足以让奖励函数全部失灵的陷阱。⚠️先看全景14 个舵机是怎么排列的Microduck 的关节布局是项目里最核心的不变量之一固定为索引区间关节0–4左腿hip_yaw → hip_roll → hip_pitch → knee → ankle5–8颈部/头部neck_pitch → head_pitch → head_yaw → head_roll9–13右腿与左腿镜像对称也就是说14 维的动作空间严格对应这 14 个受控关节。在基础模型walk / groundcontact上控制索引 关节索引一一对应非常干净。HOME 姿态站立参考位形定义在 microduck_constants.py 中躯干前移约 5 mm 让重心落在踝轴上方——这也是关节索引和初始位形要配套理解的背景。轮子交错陷阱为什么写死索引会翻车问题出在滚轮模型和背隙backlash模型上。这两种模型都引入了额外的非受控关节滚轮模型多出 4 个被动轮轴passive_LF_wheel、passive_LR_wheel、passive_RF_wheel、passive_RR_wheel背隙模型在每个舵机后面串联一个 ±1° 的被动背隙铰链passive_joint_backlash见 robot_groundcontact_backlash.xml这些被动关节会交错interleave插进实体关节数组里导致实体关节总数从 14 膨胀且顺序被打乱。后果很直白如果你按基础模型的[0-4, 9-13]硬编码关节索引在滚轮模型上这些索引会指到轮子上——奖励函数、目标位形、qpos 列计算全部作用在错误的关节上策略学到的行为会莫名其妙。这正是 AGENTS.md 里明确写死的不变量On roller/backlash models, passive joints INTERLEAVE — never hardcode joint indices in mdp functions.正确姿势正则过滤 缓存索引映射项目给出的解法分两层命名约定所有非受控关节一律以passive_开头轮子、背隙铰链、下颌连杆于是所有执行器、观测、奖励选择器统一用正则^(?!passive_).*只选中 14 个舵机关节见 microduck_constants.py 的执行器配置。索引映射辅助函数mdp.py中的_servo_joint_ids用find_joints动态解析出实体坐标系下的舵机索引并缓存_servo_joint_pos/_servo_joint_vel等所有取关节数据的操作都经过它转一道见 mdp.py。在基础模型上它就是恒等映射在滚轮/背隙模型上它把索引纠正回来。一个容易忽略的细节qpos 列号 7 实体关节索引机器人自由关节占前 7 列所以写qpos[:, 7 j]之前必须先经过_servo_joint_ids翻译否则背隙模型上同样写错列。出口一致性ONNX 导出同样要过滤陷阱不止在训练侧。导出 ONNX 时元数据里的关节列表也必须剔除passive_*关节否则部署端的动作维度会从 14 膨胀。mdp.py顶部有一段补丁Patch 4直接替换了导出器的get_base_metadata见 mdp.py保证 ONNX 图恒为[1, 61] - [1, 14]。回归测试把索引映射锁死项目专门用 CPU 测试锁死这套映射防止未来模型改版悄悄打破它test_roller_standup_cfg.py 会编译真实的 rollers MjSpec逐一校验腿关节、颈部关节、轮关节在各自索引处的名字完全匹配并确认三组索引无重叠且覆盖全部关节。测试注释一针见血复用 standup 的索引[0-4, 9-13]会让奖励指向轮子。跑法很简单uv run --with pytest pytest tests/。新手速记清单14 个舵机0–4 左腿、5–8 头颈、9–13 右腿动作空间永远 14 维见到passive_前缀 非受控关节一律用^(?!passive_).*排除在 mdp 函数里永远不要写死关节索引走_servo_joint_ids系列辅助函数新增关节必须遵守passive_前缀约定且正则要足够精确轮子用^passive_.*wheel别用^passive_.*误伤背隙铰链掌握这套索引纪律之后你就能安全地在任何 Microduck 模型变体上写奖励、写事件、写位形控制了——这正是这个 sim2real 项目能跨 10 多个任务共享同一套 61 维观测契约的底层原因。【免费下载链接】microduck_rlRL training environments for Microduck (mjlab)项目地址: https://gitcode.com/GitHub_Trending/mi/microduck_rl创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表