Genesis MPM求解器上手指南:3种材料仿真的参数调法与避坑思路

Genesis MPM求解器上手指南:3种材料仿真的参数调法与避坑思路 Genesis MPM求解器上手指南3种材料仿真的参数调法与避坑思路【免费下载链接】genesis-worldSimulation platform for general-purpose robotics embodied AI learning.项目地址: https://gitcode.com/GitHub_Trending/genesi/genesis-worldGenesis 的 MPM 求解器物质点法负责场景中的大变形材料沙堆坍塌、液体流动、弹性体落地都交给它处理。这套 Genesis 物质点法教程围绕 examples/tutorials/mpm.py 展开覆盖最小可运行代码、网格密度怎么调以及 MPM 流体仿真参数常见的坑。它能模拟什么MPM 属于拉格朗日与欧拉混合方法粒子携带材料状态网格承担求解速度场两者每个时间步交换数据。对使用者的直接意义是网格结构不随材料变形而改变拓扑变化撕裂、自由表面、大角度屈曲不再受限。仓库里 MPM 求解器内置三种材料对应三类典型场景沙堆、颗粒状堆积用ElastoPlastic弹塑性体。受压超过屈服应力后发生永久形变松开后不恢复原状模拟沙、粉料的堆积与坍塌配合沙轮示例可以看到颗粒绕轮转动。液体Liquid材料做不可压流动自由表面由粒子自然生成适合水、泥浆等流体倾倒、飞溅。弹性体Elastic材料按杨氏模量控制软硬落地压缩后回弹适合橡胶块、软接触物。三种材料可以在同一个场景中混用这正是官方教程示例的演示内容。跑通第一个仿真最小可运行代码如下一个平面加三种材料各一个实体直接运行即可看到下落与堆积过程import genesis as gs gs.init(backendgs.cpu) # 初始化引擎 scene gs.Scene( sim_optionsgs.options.SimOptions(dt4e-3, substeps10), # 每步4毫秒内部分10个子步 mpm_optionsgs.options.MPMOptions( lower_bound(-0.5, -1.0, 0.0), upper_bound(0.5, 1.0, 1.0), # MPM 仿真域网格只在这个范围内建立 ), show_viewerTrue, ) scene.add_entity(morphgs.morphs.Plane()) # 刚性地表 scene.add_entity(materialgs.materials.MPM.Elastic(), morphgs.morphs.Box(pos(0.0, -0.5, 0.25), size(0.2, 0.2, 0.2))) scene.add_entity(materialgs.materials.MPM.Liquid(), morphgs.morphs.Box(pos(0.0, 0.0, 0.25), size(0.3, 0.3, 0.3))) scene.add_entity(materialgs.materials.MPM.ElastoPlastic(), morphgs.morphs.Sphere(pos(0.0, 0.5, 0.35), radius0.1)) scene.build() # 构建场景并分配粒子 for _ in range(1000): scene.step() # 步进仿真几个容易踩的点MPM 求解器必须通过MPMOptions的上下界声明仿真域网格只建在域内液体的vis_modeparticle会把流体渲染成粒子点比连续表面更直观完整教程脚本含颜色、可视化边界开关在 examples/tutorials/mpm.py。想改变效果调哪个参数参数集中在两处gs.options.SimOptions管时间步gs.options.MPMOptions管网格与域求解器实现见 genesis/engine/solvers/mpm_solver.py。按想要的效果对照想要的效果对应参数推荐范围说明物体更稳、不飞散SimOptions.dt1e-4 ~ 1e-2 秒时间步长。数值越小单步推进越保守代价是总耗时上升单步内更精细SimOptions.substeps5 ~ 20子步数等效把 dt 再切细接触与形变更精确MPMOptions.grid_density32 ~ 128默认 64每米网格数。越高精度越好节点数随体积按立方增长内存与耗时随之增大粒子疏密MPMOptions.particle_size0.005 ~ 0.02 米粒子直径不填时按 grid_density 自动折算默认约 0.01控制耗时MPMOptions.lower_bound / upper_bound包住所有实体即可域越小网格节点越少但实体不能出域否则粒子丢失材料软硬Elastic.E1e4软~ 1e6硬杨氏模量默认 3e5沙的流动阻力ElastoPlastic.von_mises_yield_stress默认 1e4屈服应力越大越难发生永久形变液体黏稠感Liquid.viscousTrue / FalseFalse 时直接置零剪切黏度流体更稀看粒子显示大小VisOptions.particle_size_scale默认 1.0仅影响渲染不影响物理看仿真域边界VisOptions.visualize_mpm_boundaryTrue调试域是否包住实体时用配置片段mpm_optionsgs.options.MPMOptions( grid_density64, # 每米64个网格默认值 particle_size0.01, # 不填时按 grid_density 自动计算 lower_bound(-0.5, -1.0, 0.0), upper_bound(0.5, 1.0, 1.0), )网格密度不是越高越好域尺寸不变时grid_density翻倍意味着节点数翻 8 倍先在默认值 64 附近试效果不够再往上调。结果不对劲时怎么办现象物体炸开、飞出场景。可能原因是时间步相对材料刚度偏大。处理先减dt4e-3 降到 1e-3再加大substeps两者只动一个再观察。现象粒子穿入地面以下或凭空消失。可能原因是实体位置落在 MPM 仿真域之外或域太小。处理扩大lower_bound/upper_bound并确认实体初始坐标全部在域内。现象运行很慢、内存占用高。网格节点数由域体积乘grid_density的立方决定。处理优先收紧仿真域其次把grid_density从 128 降回 64 或 32。现象液体像固体或弹性体压下去弹不回来。可能原因是材料参数没配对。处理液体用Liquid(viscousTrue)并调E改变黏稠感弹性体调Elastic.E弹塑性体调von_mises_yield_stress决定受压后是否保留形变。想继续往下做可以参考烟雾模拟 examples/fluid/smoke.py、与刚体耦合的沙轮 examples/coupling/sand_wheel.py 和 examples/coupling/rigid_mpm_attachment.py材料参数定义在 genesis/engine/materials/MPM/ 目录下。【免费下载链接】genesis-worldSimulation platform for general-purpose robotics embodied AI learning.项目地址: https://gitcode.com/GitHub_Trending/genesi/genesis-world创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考