
如何在 MuJoCo 中让物体不再滑动摩擦与接触参数调优指南【免费下载链接】mujocoMulti-Joint dynamics with Contact. A general purpose physics simulator.项目地址: https://gitcode.com/GitHub_Trending/mu/mujoco把箱子放进 MuJoCo没碰它自己就滑出去几厘米机器人夹爪明明设了摩擦瓶子还是掉了——这是典型的接触参数没配对。本文给你一套完整的 MuJoCo 摩擦参数方案一张自查表定位原因、四段最小配置代码、一组可量化的验收标准照着改完即可落地。 自查定位表你看到的现象最可能的原因对应方案物体放上去就滑没有任何外力condim1无摩擦接触或friction系数太小方案 A滑得少但一碰就穿透、抖动接触阻抗solref/solimp太软方案 A同一对不同物体要不同摩擦只改了 geom 级属性没有显式接触对方案 B关节缓慢转动停不下来关节frictionloss没设置方案 B需要方向性摩擦如履带、纹理表面金字塔摩擦锥限制需换椭圆锥方案 C方案怎么选方案 A默认从这里开始改接触双方的friction、condim、solref、solimp。90% 的滑动问题停在这里。方案 BA 改完仍有差异需求才升级加显式contact/pair单独控制某一对的摩擦关节停不下来时补frictionloss。方案 C仅当摩擦方向感不自然时启用椭圆摩擦锥coneelliptic代价是求解略慢。 落地步骤第 1 步先改 friction 和 condim改什么参与接触的 geom或default里的 geom class上的friction、condim。改成什么geom namebox typebox size0.05 0.05 0.05 condim3 friction1.0 0.005 0.0001/为什么friction三个数依次是滑动、扭转、滚动摩擦系数官方参数说明condim3才在切平面启用滑动摩擦约束。condim1是无摩擦接触此时摩擦设多大都不生效。第 2 步调接触阻抗 solref 和 solimp改什么同一 geom 上的solref、solimp。改成什么geom namebox ... solref.02 1 solimp.9 .95 0 .001 .5/为什么MuJoCo 用软弹簧-阻尼模拟接触见接触动力学原理。solref第一个数是参考渗透量默认 0.02solimp第一个数是约束刚度下限默认 0.9。接触太软会陷下去再滑出来两者都调小会明显放大滑动距离。第 3 步加显式 contact pair 单独控摩擦改什么contact下加pair它会覆盖这两个 geom 的默认摩擦。改成什么contact pair geom1box geom2floor friction0.8 0.8 0.005 0.0001 0.0001/ /contact为什么pair 的friction有 5 个数前两个可以设成不同值实现各向异性摩擦——这是 geom 级属性做不到的也是 pair 独有的能力。第 4 步给该停的关节加 frictionloss改什么joint的frictionloss。改成什么joint namewrist typehinge axis0 1 0 damping5 frictionloss0.01/为什么frictionloss是关节轴上的干摩擦扭矩是刹住关节的唯一手段接触摩擦替代不了它。低速精密关节取 0.001–0.005重载关节取 0.01–0.05。第 5 步可选换椭圆摩擦锥改什么option的cone属性配合 pair 上的solreffriction。改成什么option coneelliptic/ contact pair geom1box geom2floor solreffriction.02 1/ /contact为什么椭圆锥更接近真实摩擦锥金字塔锥会混叠法向与摩擦方向摩擦行为偏硬。solreffriction默认 0 0 表示沿用solref只在椭圆锥下生效。验收标准用下面最小模型测试1 kg 箱子 地面默认 Newton 求解器dt0.002mujoco worldbody geom namefloor typeplane size1 1 0.1 friction1 0.005 0.0001/ body pos0 0 0.2 freejoint/ geom namebox typebox size0.05 0.05 0.05 friction1 0.005 0.0001/ /body /worldbody /mujoco用 Python API 复现并读位移python/ 下有完整绑定示例import mujoco m mujoco.MjModel.from_xml_path(slide_test.xml) d mujoco.MjData(m) for _ in range(5000): mujoco.mj_step(m, d) print(d.qpos) # 10 s 后箱子平移量判定条件标准配置下的参考值量级不符先回自查表配置摩擦系数静置 10 s 位移0.5 N 水平推 1 s 滑移condim11.050 mm直接滑走几乎不减速默认A 方案改完1.01 mm约 10–15 mm低摩擦0.31 mm约 30–40 mm推 1 s 的滑移距离随摩擦系数近似反比变化若同参数下数值差 2 倍以上说明还有 pair 覆盖或 condim 问题没清干净。⚠️ 常见坑清单坑只调大friction却忘了condim→ 后果condim1时接触无摩擦参数全白设 → 正确做法condim≥3再谈摩擦大小。坑以为 pair 和 geom 的摩擦会叠加生效 → 后果显式 pair 完全覆盖 geom 属性改 geom 看不出变化 → 正确做法一处为准另一处保持同步。坑把solref第一个数压到 0.005 以下求稳 → 后果接触过刚出现高频抖动和穿透震荡 → 正确做法在 0.01–0.05 之间取配合solimp首项 0.9 左右验证。坑期望接触摩擦让关节停转 → 后果关节永远在低速漂移 → 正确做法dampingfrictionloss一起设。坑在 geom 上写 5 个 friction 数想各向异性 → 后果geom 只读前 3 个参数不生效 → 正确做法各向异性摩擦只能写在contact/pair。收尾顺序记牢先condimfriction再solref/solimp不够才上 contact pair 和椭圆锥。验收看数字静置 10 s 位移 1 mm受推滑移与摩擦系数近似反比。延伸阅读doc/computation/index.rst 的接触模型原理、model/ 目录下的现成示例模型。【免费下载链接】mujocoMulti-Joint dynamics with Contact. A general purpose physics simulator.项目地址: https://gitcode.com/GitHub_Trending/mu/mujoco创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考