MuJoCo 刚体惯性参数设置:从 geom 密度推断到显式 inertial 的实操手册
MuJoCo 刚体惯性参数设置:从 geom 密度推断到显式 inertial 的实操手册【免费下载链接】mujocoMulti-Joint dynamics with Contact. A general purpose physics simulator.项目地址: https://gitcode.com/GitHub_Trending/mu/mujocoMuJoCo 是 Devas 提出的多关节接触动力学仿真器,刚体的惯性参数决定了它有多难被推动、转起来。惯性参数有两条落地路径:编译期由编译器根据 geom 的几何形状和 density 自动推断,或者在 MJCF 里用inertial元素显式给出。运行时,引擎只读取 body 级的惯量来计算动力学,geom 自身的 mass 和 density 在编译完成后就不再参与仿真。下面从你的模型该走哪条路讲起。没写 inertial 时,编译器按 geom 形状和 density 自动推算先给结论:如果 body 下没有inertial元素,编译器会根据该 body 挂着的 geom 自动推断质量和惯性,前提是对应的compiler开关inertiafromgeom是 auto(默认值)或 true。这条路径最省事,模型质量随几何缩放自动保持合理,适合原型阶段。下面的示例只写几何,质量由 density 推算出来:body nameforearm geom typecapsule size0.07 0.3 fromto0 0 0 0 0 0.35 density800/ /bodygeom上的density默认值是 1000 kg/m³(水的密度),按均匀密度假设计算体积质量。同一 geom 上还可以直接写mass:写了之后density被忽略,编译器反推密度再算惯量。只关心质量比例、不关心绝对数值时用mass更直接;薄壁壳体(布料、薄膜)可以把shellinertia设为 true,此时 density 按质量/面积解释,惯量按质量集中在表面计算。用 diaginertia 与 fullinertia 两种写法显式锁定惯量如果 body 写了inertial元素,自动推断立刻关闭,你必须给出pos和mass(两者均必填),惯性张量二选一:body namelink inertial pos0 0 0.1 mass1.2 diaginertia0.05 0.05 0.03/ geom typecapsule size0.08 0.2 fromto0 0 0 0 0 0.4/ /body两种张量写法各有适用场景:属性数值个数行为diaginertia3惯量主对角线,坐标系自动取为主惯量轴fullinertia6顺序 M(1,1) M(2,2) M(3,3) M(1,2) M(1,3) M(2,3),编译器做特征分解注意 MuJoCo 的标签属性里没有inertia这个写法,只有diaginertia和fullinertia。用fullinertia时,如果矩阵非正定(出现非正特征值),编译直接报错。pos指定的是质心在 body 坐标系中的位置;惯量坐标系的朝向可以用quat、zaxis、axisangle等定向属性给出。当质心偏移较大或主惯量轴与 body 坐标系明显不平行时,加上朝向属性可以省掉运行时额外的旋量转换。用 inertiafromgeom 三档开关控制推断的取舍inertiafromgeom是控制整套推断行为的总开关,三档含义如下:取值行为auto(默认)仅在 body 缺少inertial时推断true强制用 geom 推断,覆盖已有的inertialfalse禁止推断,每个 body 都必须显式定义,否则编译报错false 档适合部署阶段锁定参数:它强制模型自描述,任何遗漏的惯量定义都会以编译错误暴露出来,而不是静默地用几何去猜。true 档则适合清洗来路不明的 URDF——不少公开 URDF 的惯量与质量明显不匹配,强制重推一遍比手工修更快。用 inertiagrouprange 和 alignfree 精修推断质量推断的精度取决于哪些 geom 参与了计算。默认inertiagrouprange是 0 5,即 group 0~5 的 geom 都计入。如果你的模型同时挂了粗碰撞 geom 和细可视化 geom,把可视化 geom 挪到 group 6 之外即可排除:compiler inertiafromgeomauto inertiagrouprange0 5 alignfreetrue/alignfree设为 true 后,带 free joint 且无子 body 的刚体会把 body 坐标系自动对齐到惯量坐标系,仿真既更快也更稳。worldbody 的 geom 从不参与惯量计算,不需要额外处理。保存显式 inertial 并用惯量椭球检查模型编译完成后用simulate打开模型,可视化里默认渲染每个 body 的等效惯量盒;MuJoCo 2.3.4(2023-04-20)起新增ellipsoidinertia开关,改为渲染等效惯量椭球,能更直观地看出转起来有多费劲的方向分布:如果模型需要跨版本分发给他人,建议加上saveinertialtrue:保存编译结果时,所有 body 的惯量都会以显式inertial元素写入 XML,推断结果被钉死在文件里:compiler inertiafromgeomauto saveinertialtrue/提交模型前跑一遍编译加simulate目检:哪个 link 的惯量盒或椭球明显超出几何边界,就把那个 body 切到显式inertial定义并核对量纲。【免费下载链接】mujocoMulti-Joint dynamics with Contact. A general purpose physics simulator.项目地址: https://gitcode.com/GitHub_Trending/mu/mujoco创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考