尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

10分钟指南:用Genesis MPM物质点求解器跑通你的第一座沙堆

10分钟指南:用Genesis MPM物质点求解器跑通你的第一座沙堆 10分钟指南用Genesis MPM物质点求解器跑通你的第一座沙堆【免费下载链接】genesis-worldSimulation platform for general-purpose robotics embodied AI learning.项目地址: https://gitcode.com/GitHub_Trending/genesi/genesis-world你敲下python examples/tutorials/mpm.py回车Genesis 的 viewer 弹出来三个方块从空中落下红色那个砸地回弹蓝色那个碎成粒子流体四溅开绿色那个瘪掉也不弹。这就是 Genesisgenesis-world里的 MPM 物质点求解器粒子带着材料记忆网格负责算力专治沙堆坍塌、流体飞溅、橡胶回弹这类大变形场景。这 10 分钟够你把场景跑起来、认全每个参数、并在它爆炸时知道该拧哪个旋钮。速查总览一眼认全 MPM 主力参数参数管什么推荐起步值grid_density每米网格数管粒子表面精不精细64lower_bound/upper_bound仿真域范围管内存和速度包住物体外扩 0.3 mdt/substeps单步时长与细分数管稳不稳4e-3/ 10记住网格管精度边界管速度dt 管稳定三选一先试这三个。三步跑通最小流体场景步骤一准备一条命令装好git clone https://gitcode.com/GitHub_Trending/genesi/genesis-world cd genesis-world pip install -e .CPU 后端不需要额外配置 CUDA依赖随安装自动拉取。步骤二核心调用20 行让一个方块落地完整入口在 examples/tutorials/mpm.py核心就这几行import genesis as gs gs.init(backendgs.cpu) # 手头没 GPU 也能跑 scene gs.Scene( sim_optionsgs.options.SimOptions(dt4e-3, substeps10), mpm_optionsgs.options.MPMOptions( lower_bound(-0.5, -1.0, 0.0), # 域收得紧省网格内存 upper_bound(0.5, 1.0, 1.0), ), show_viewerTrue, ) scene.add_entity(morphgs.morphs.Plane()) # 地面 scene.add_entity( materialgs.materials.MPM.Liquid(), # 默认参数先试水 morphgs.morphs.Box(pos(0.0, 0.0, 0.3), size(0.3, 0.3, 0.3)), surfacegs.surfaces.Default(vis_modeparticle), # 粒子渲染更直观 ) scene.build() for _ in range(1000): scene.step()dt4e-3是示例默认值调小更稳、调大更快这是后面调参的主线。步骤三验证看落地和飞溅跑起来后你应该看到蓝色粒子块下落、砸地、摊开成一摊。表面不是平滑水面而是能看到棱角的粒子团这是grid_density64下的正常形态不是 bug。viewer 没弹出或画面全黑回头检查前两步是否在同一个终端会话里执行。从现象定位 MPM 参数5 组调参映射调参不是背数字是看到现象能说出该拧哪个旋钮。最常用的是这 5 组对应粒子剧烈抖动画面发散成 NaN→ 参数dt试1e-3~4e-3跑得太慢CPU 占满→ 参数grid_density试32~64物体表面呈台阶状、棱角分明→ 参数grid_density试64~128物体飞出天空或穿地消失→ 参数lower_bound/upper_bound试每边外扩 0.3 m液体流动发涩、像糖浆→ 参数viscous试在Liquid里设viscousFalse参数起步安全值grid_density64dt/substeps4e-3/ 10仿真域边界包住物体外扩 0.3 m只记一句话炸了先看 dt慢了先看网格消失先看边界。把 MPM 和刚体、SPH 组合2 招进阶玩法单物体场景只是起点。Genesis 的 coupler 能让 MPM 与刚体、SPH 求解器同场下面两招只用你已学的参数。沙流被轮子持续推动场景里加两个旋转的刚体轮再用发射器喷沙粒import numpy as np emitter scene.add_emitter( materialgs.materials.MPM.Sand(), max_particles200000, ) # 循环里每帧调一次 emitter.emit(posnp.array([0.5, 0.0, 2.3]), directionnp.array([0.0, 0.0, -1.0]), speed8.0)预期效果沙粒喷落、被轮子推着转形成持续循环的沙流。完整版看 examples/coupling/sand_wheel.py注意刚体材料上那句needs_coupTrue。让弹性鸭子浮在 SPH 水面上场景加一块 SPH 水再把 MPM 弹性材料做的橡皮鸭搁上去scene.add_entity( materialgs.materials.MPM.Elastic(rho200), # 密度小于水才浮得起来 morphgs.morphs.Mesh(filemeshes/duck.obj, pos(0.5, 0.5, 0.7), scale0.07), )预期效果鸭子先下沉一点再浮上水面起伏。参照 examples/coupling/sph_mpm.py。修复常见 MPM 症状踩坑速查爆炸发散最常见原因dt 太大力追不上位移。修复dt降到1e-3或substeps提到 20。物体消失原因粒子跑出 MPM 域边界。修复upper_bound/lower_bound扩到覆盖全程。跑得慢原因域太大或网格太密。修复边界收紧到物体活动范围grid_density降到 32。粒子穿过刚体原因刚体材料没开 MPM 耦合。修复Rigid 材料加needs_coupTrue。表面锯齿感重原因网格偏粗。修复grid_density提到 96~128嫌慢就先收紧域。接着往下走从沙堆到机器人软体操作把最小例子跑起来、改一个参数看它变你就入门了。三材料对比的完整场景examples/tutorials/mpm.pyMPM 各材料参数细节genesis/engine/materials/MPM/求解器主循环P2G / G2P 两阶段genesis/engine/solvers/mpm_solver.py挑一个材料改一个数字看场景怎么变MPM 的手感就是这么练出来的。【免费下载链接】genesis-worldSimulation platform for general-purpose robotics embodied AI learning.项目地址: https://gitcode.com/GitHub_Trending/genesi/genesis-world创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表