十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

15行代码上手 Genesis MPM 求解器:沙粒与水流仿真从原理到运行

15行代码上手 Genesis MPM 求解器:沙粒与水流仿真从原理到运行 15行代码上手 Genesis MPM 求解器:沙粒与水流仿真从原理到运行【免费下载链接】genesis-worldSimulation platform for general-purpose robotics embodied AI learning.项目地址: https://gitcode.com/GitHub_Trending/genesi/genesis-worldGenesis 是面向机器人和具身智能的通用仿真平台,其 MPM(物质点法)求解器专为软物质设计。本文面向刚接触变形体仿真的新手,讲清原理、给出可直接运行的最小示例,并解读核心参数。读完你即可在自己的场景中模拟沙子、液体和弹性体。它是什么:粒子与网格的分工大白话:把一块软材料想象成一群会搭便车的粒子。每走一步,粒子先把质量、速度汇报给脚下的固定网格,网格算好加速度后再返还给粒子,粒子据此移动。严谨一点,MPM 是拉格朗日(跟随材料)与欧拉(固定空间网格)的混合算法:网格负责高效求解,粒子负责跟踪材料的大变形,因此特别适合撕裂、坍塌、流动这类网格法难以处理的场景。Genesis 的实现在 genesis/engine/solvers/mpm_solver.py,每个粒子记录位置、速度、形变梯度等状态,材料行为由不同的应力模型决定。最小可用示例:让沙球落地把下面 15 行保存为脚本运行(依赖已装好的 genesis 包):import genesis as gs gs.init(backendgs.cpu) scene gs.Scene( sim_optionsgs.options.SimOptions(dt4e-3, substeps10), mpm_optionsgs.options.MPMOptions(grid_density64, lower_bound(-0.5, -1.0, 0.0), upper_bound(0.5, 1.0, 1)), show_viewerTrue, ) scene.add_entity(morphgs.morphs.Plane()) 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()运行后会弹出可视化窗口:一个绿色小球从空中落下,弹一下后不再回弹、最终瘫成饼状贴在平面上——这正是弹塑性材料的永久变形。想一次看三种材料,官方教程 examples/tutorials/mpm.py 把弹性盒、液体盒和弹塑性球放在同一场景里,直接跑即可。关键参数怎么配参数分两层:求解器层(gs.options.MPMOptions,定义在 genesis/options/solvers.py)控制网格与粒子,材料层(gs.materials.MPM.*)控制手感。参数所在层作用起步建议grid_density求解器每米网格数,决定精度64(默认)particle_size求解器粒子直径(米)留空自动按网格推算lower_bound/upper_bound求解器仿真域边界尽量贴紧物体,域越大越慢dt/substepsSimOptions步长与子步数4e-3 / 10E材料杨氏模量,越大越硬Elastic 默认 3e5,Liquid 默认 1e6von_mises_yield_stressElastoPlastic屈服应力,超过即发生塑性形变默认 10000,调小更软塌三个开箱材料各有侧重:MPM.Elastic像橡胶,可切换corotation/neohooken两种应力模型;MPM.Liquid默认无黏性,想要蜂蜜感设viscousTrue;MPM.ElastoPlastic最接近沙子和面团。进阶玩法:让水和沙搭伙1. 双求解器耦合。MPM 实体可以和 SPH 流体、刚体在同一场景里互相作用。examples/coupling/sph_mpm.py 让 SPH 水冲着一只 MPM 弹性小鸭;examples/coupling/sand_wheel.py 则用两个刚体轮子搅动 MPM 沙堆,是沙漏式效果的现成模板。2. 只改材料,不动几何。换材料参数即可改变整场行为:# 无黏性 - 有黏性,水变糖浆 syrup gs.materials.MPM.Liquid(viscousTrue) # 调低屈服应力,弹塑性体更软、更像湿沙 wet_sand gs.materials.MPM.ElastoPlastic(von_mises_yield_stress2000)避坑提示现象:构建时报 Grid size larger than 1e9 not supported。→原因:每米网格数与域尺寸乘积超限。→对策:把lower_bound/upper_bound收紧,或调低grid_density。现象:物体剧烈抖动、粒子飞出边界。→原因:时间步相对材料刚度太大。→对策:先降dt或提高substeps,再考虑调低E。现象:仿真卡顿、内存占用高。→原因:仿真域开得太宽,空网格也要计算。→对策:按官方文档提示,把边界设得越贴合物体越好。下一步建议跑一遍 examples/tutorials/mpm.py,对比 Elastic、Liquid、ElastoPlastic 三种材料的落地差异,体会E与屈服应力的作用。想看 MPM 与其他求解器如何协同,从 examples/coupling/ 里的sph_mpm.py和sand_wheel.py入手。求解器核心代码:genesis/engine/solvers/mpm_solver.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),仅供参考
返回列表