MuJoCo 摩擦失效排查:物体仿真滑动的 4 个成因与修复路径 MuJoCo 摩擦失效排查物体仿真滑动的 4 个成因与修复路径【免费下载链接】mujocoMulti-Joint dynamics with Contact. A general purpose physics simulator.项目地址: https://gitcode.com/GitHub_Trending/mu/mujoco摩擦系数已经调到 0.9箱子落地后还是滑了 3 cm——这是 MuJoCo 多关节接触动力学仿真里很常见的翻车现场。如果你的摩擦行为已经失控先别继续盲目加参数。按建模、接触配置、求解器、验证四段流水线逐级排查十几分钟就能定位到问题环节。症状速查表先定位环节再动参数现象最可能原因对应参数排查入口物体沿地面自由滑动、无减速接触被当成无摩擦处理condim、friction首值检查参与接触的 geom 对物体停在斜面上仍缓慢下溜摩擦约束偏软、接触回弹solref、solimp对比默认值表 src/xml/generated/mjcf_default_table.inc接触抖动、弹跳后再滑动约束渗透过深、刚度不足solimp前两个值option下的solimp覆盖项完全检测不到接触过滤位掩码不匹配contype/conaffinity两个 geom 的位与是否为 0圆柱/球体滚个不停缺少滚动摩擦维度condim6、friction第三值检查 geom 的condim修复流水线按仿真生命周期分四段走建模阶段geom 与 condim 是否匹配condim决定接触约束维度1 是无摩擦接触3 是切平面两个滑动方向4 再加绕法向的扭转6 再加绕切平面两轴的滚动。动态接触对的 condim 取两个 geom 的较大值。如果你把地面写成了condim1接触空间里根本不存在切向维度摩擦系数调多大物体都会沿平面滑动——这就是摩擦失效的第一大来源。另一个易被忽略的点柔性体布料、袋子的被动碰撞在设计上就是 condim 1 的无摩擦接触所以布料滑过固定几何是正常行为不是参数错误。判断顺序是先确认接触对真的生成了再谈摩擦系数。接触配置阶段friction、solref、solimp 的协同friction是三个值滑动摩擦、扭转摩擦、滚动摩擦默认1 0.005 0.0001你通常只关心第一个。solref默认0.02 1时间常数越小接触越硬solimp默认0.9 0.95 0.001 0.5 2控制约束渗透深度。因果链是这样的solref 偏大接触表现得像弹簧物体每个时间步微幅回弹能量泄漏后表现为滑动与漂移solimp 前两个值偏低渗透过深法向力被摊薄摩擦预算μ·f_N随之缩水。对单对接触用pair覆盖全局值即可不必改整个模型model/flex/gripper_2d.xml 里就有这种写法contact pair geom1ground geom2box friction0.8 0.01 0.001 solref0.005 1 solimp0.9 0.99 0.001 0.5 2/ /contact求解器阶段cone 模式与迭代次数option中solver默认 Newtoniterations默认 100cone默认 pyramidal。金字塔锥是对摩擦锥的分段线性近似系数越高锥边界离理想 Coulomb 锥越远切向力会被低估滑动力偏小椭圆锥coneelliptic更贴近物理真实适合高摩擦或滑移敏感的场景。因为椭圆锥的摩擦维度独立于法向impratio默认 1 即可想更防滑可略提高到 2它等价于让摩擦约束比法向约束更硬但代价是求解难度上升。所以顺序很重要接触已经在抖时先加迭代次数再动锥型别反过来。对比项pyramidal默认elliptic近似方式分段线性平滑接近 Coulomb适用低中摩擦、大场景高摩擦、滑移敏感求解成本低略高验证阶段用一次对照实验收口别用看起来正常当结论把滑动量化。用 Python API 加载模型、重置状态让物体从固定高度落到平面记录 1 秒后的位移每次只改一个参数跑两次对比。如果滑移距离完全不随friction变化说明问题不在摩擦回到建模阶段查接触对是否真的建立。接触相关的回归验证可以参考 test/engine/ 里的测试模型与断言写法。import mujoco m mujoco.MjModel.from_xml_path(test.xml) d mujoco.MjData(m) mujoco.mj_resetData(m, d) for _ in range(100): mujoco.mj_step(m, d) print(d.qpos)反模式速览❌ 地面写condim1再怪摩擦小 → ✅ 摩擦接触从condim3起步❌ 把friction加到 1.5 求稳 → ✅ 先查 solref/solimp 的渗透❌ 一次改四个参数碰运气 → ✅ 每次只动一个变量做对照❌ 用刚体参数调柔性体滑移 → ✅ 被动碰撞本就是无摩擦的一页速查卡参数默认值建议设置何时调整condim33 摩擦 / 6 带滚动接触类型决定维度friction1 0.005 0.0001首值 0.5–1.5滑移距离超阈值solref0.02 10.005 1接触回弹、下溜solimp0.9 0.95 0.001 0.5 2第二值提到 0.99渗透过深、抖动conepyramidalelliptic高摩擦、滑移敏感impratio11–2仅椭圆锥想更硬地抑制滑移iterations100逐步上调接触抖动不收敛solverNewtonNewton / PGS大规模接触场景四段流水线的排查结论都可以对照这张表回写参数改完再跑一遍对照实验确认滑移距离闭环才算完成。【免费下载链接】mujocoMulti-Joint dynamics with Contact. A general purpose physics simulator.项目地址: https://gitcode.com/GitHub_Trending/mu/mujoco创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考