☰
MuJoCo 物体打滑?3 步调好摩擦参数的完整避坑指南
2026/9/27 23:30:54 网站建设 项目流程

MuJoCo 物体打滑?3 步调好摩擦参数的完整避坑指南

【免费下载链接】mujocoMulti-Joint dynamics with Contact. A general purpose physics simulator.项目地址: https://gitcode.com/GitHub_Trending/mu/mujoco

摩擦系数明明拉到 1,盒子撞一下还是在地板上顺滑地溜出去半米;关节松手后不停在原位,角度慢慢漂走。这两个场景几乎每个调试 MuJoCo 滑动的工程师都遇到过,根子通常不在物理引擎,而在 MuJoCo 摩擦参数没配对。下面这套"先定位、再分档处理、最后复现验证"的流程,是我踩坑多年沉淀下来的笔记。

30 秒定位滑动原因:症状 → 原因 → 该动哪个参数

症状可能原因先动哪个参数
盒子撞一下就在地板上滑行摩擦取值偏低,或静/动/滚三个值没区分geom的friction
轻推就走、松手有残余滑动接触偏软,法向约束不足solref/solimp
摩擦拉满行为却不对condim与接触类型不匹配condim
关节角度停不住、缓慢漂移关节没设摩擦损耗joint的frictionloss
摩擦边界方向感失真棱柱摩擦锥是近似模型option的cone

先对号入座再改参数,能省掉大量盲目试参的时间。

轻量档:只动 friction 和 solref

  • 改什么:geom的friction(静摩擦、动摩擦、滚动摩擦三个值)加接触柔度solref。参考 model/humanoid/humanoid.xml 里的典型写法:
<geom type="capsule" friction=".7" solimp=".9 .99 .003" solref=".015 1"/>
  • 适合谁:大部分接触行为正确、只是个别接触点"滑"的模型。
  • 能到什么效果:常见滑动问题基本压掉;材料侧的经验值——金属-金属 0.3–0.6,橡胶-混凝土 0.8–1.0,冰面 0.05–0.1(冰面记得配合frictionloss)。滑动敏感场景solref用[0.01, 1]、solimp用[0.9, 0.99, 0.001]是比较稳的起点。

标准档:显式接触对 + 关节摩擦损耗

  • 改什么:用<pair>给特定一对 geom 单独指定摩擦,别再让全局值代劳;给需要"停得住"的关节补上frictionloss:
<pair geom1="box" geom2="floor" friction="0.8" solref=".01 1" solimp=".9 .95 .001"/>
<joint type="free" frictionloss="0.005"/>
  • 适合谁:抓取、推箱这类多材质场景,"有的地方该粘、有的地方该滑"。frictionloss的取值参考:低速精密关节 0.001–0.005,重载关节 0.01–0.05,无需制动的 0.0001–0.0005。仓库测试用例 quadratic_frictionloss.xml 里condim="6"配friction="1 0.05 0.001"的组合值得一看。
  • 能到什么效果:每对接触独立可控,全局摩擦值不再一个数管所有接触。

极致档:椭圆摩擦锥

  • 改什么:option打开cone="elliptic",摩擦锥从棱柱近似换成更贴近物理的椭圆;geom的friction此时给两个切向值分别控制不同方向,solreffriction再微调摩擦约束的阻抗:
<option cone="elliptic"/> <geom friction="1.0 0.3" solreffriction=".02 1 .01 0.5"/>
  • 适合谁:各向异性摩擦、高精度抓取等对摩擦边界方向有要求的场景。
  • 能到什么效果:验证案例中滑动距离被进一步压到 0.8 mm,见下一节数据。

⚠️ 踩坑清单:这几个错误配置最费时间

  1. condim与接触类型不匹配——平面接触给 3、复杂空间接触给 6 是比较稳的惯例;condim给低了,摩擦方向根本不会参与求解,friction设多大都白搭。
  2. solimp偏硬导致弹跳——渗透约束太硬,物体落地后弹一下再滑,看起来像"打滑"其实是接触在抖。
  3. 漏设frictionloss导致关节漂移——松手后角度缓慢溜走,别急着怪求解器,先查这一项。
  4. 椭圆锥下沿用旧习惯——开启椭圆锥后friction是"两个切向值"的语义,直接照搬棱锥锥下的写法容易把方向搞混。拿不准具体语义时,以官方 XMLreference 为准。

验证流程:3 步复现 + 数据对照

  1. 用 simulate/ 加载测试模型,肉眼确认滑动现象可复现;
  2. 通过mj_resetData重置状态后施加恒定力,保证每次条件一致;
  3. 用 Python API 记录 10 秒内物体位移,跑三档配置各一次。
配置摩擦系数solref滑动距离稳定性
默认0.5[.1, 1]约 12.7 mm2/5
标准0.7[.01, 1]约 3.2 mm4/5
极致(椭圆锥)0.8[.01, 1]约 0.8 mm5/5

同一模型上,仅把 solref 从默认收紧到 0.01 一档,滑动距离就降了七成以上——参数调优的性价比远高于改模型。

收尾

MuJoCo 滑动的修复路径是:先定位参数、再按档位改摩擦与接触约束、最后用恒定力复现验证,数据对齐即可收工。延伸阅读:接触动力学细节见 doc/computation/,更多可调模型在 model/。

【免费下载链接】mujocoMulti-Joint dynamics with Contact. A general purpose physics simulator.项目地址: https://gitcode.com/GitHub_Trending/mu/mujoco

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询