MIcrorobotics Multiphysics Engine (MIME), Differentiable physics for medical microrobots (currently focused on magnetically actuated and in confined biological flows). Stokeslet BEM, IB-LBM, and DiFVM
翻譯準備中
開發工具Python · ShellGitHub @Microrobotics-Simulation-Framework上線中營運者未確認
試用過了嗎? 點一下就好,不需要登入。
個人 GitHub 帳號下公開儲存庫的擁有者可以登入並驗證所有權,自行管理介紹,無需管理員核准。
登入並產生驗證檔案,在 30 分鐘內將其提交至此儲存庫的預設分支。其他分支或分叉儲存庫中的檔案無效。然後在下方檢查檔案,即可無需管理員核准直接管理專案。請保留檔案以維持管理權限。
如需登入,將前往登入頁面。登入後請回到此處,再次點擊所選的驗證按鈕。
在專案資料夾中執行 /nomorevibe verify,即可驗證所有權並自行管理介紹。
一分鐘完成驗證MIcrorobotics Multiphysics Engine (MIME), Differentiable physics for medical microrobots (currently focused on magnetically actuated and in confined biological flows). Stokeslet BEM, IB-LBM, and DiFVM inspired FVM-IBM (with optional GNN correction); built on MADDENING.
翻譯準備中
取自儲存庫 README
正在載入完整 README。
檢視完整 README ↗MIcrorobotics Multiphysics Engine, on MADDENING.
Watch a steel ball settle in a tube of water
Drive a screw-shaped magnetic robot through a tube
The two tutorial notebooks run in your browser, on Google Colab, with nothing to install: click a badge, then run the cells from the top.
MIME 0.3.0.dev1 is the first release of MIME 0.3, a rewrite on MADDENING 0.4, and a development pre-release: its API, its saved form and its results may change before 0.3.0. It holds the core that turns a declared experiment into a MADDENING graph, the saved form, the scene, the profiles, and the physics of its first experiments: a sphere settling in free space, a magnetic screw swimming in a tube (script A, held to frozen outputs of the 0.2 code with every difference declared before the comparison ran), and the same screw driven by a magnet on a robot arm. More physics arrives with each release; the changelog says what this one holds, and scope and limits what it claims. The documentation is at microrobotica.org/mime/0.3.0.
The 0.2 line, with its nodes, experiments, docs and verification scripts, is at two tags. mime-engine 0.2.0 on PyPI is
the tag v0.2.0, which needs MADDENING 0.2.1 or later within 0.2; pip install "mime-engine<0.3"
installs it. The tag pre-0.3 is the line's last commit, made after 0.2.0 and never uploaded to
PyPI: it runs on MADDENING 0.3.x.
MIME is mime-engine on PyPI (Python 3.12 or later). 0.3 is a pre-release, so pip installs it only when asked to:
pip install --pre mime-engine
A plain pip install mime-engine installs 0.2.0, whose API this README does not describe. mime --version says which
you have. The verify extra (pip install --pre "mime-engine[verify]") adds Hypothesis and MADDENING's verification
harnesses, which mime docs build and MIME's own tests need; a script that only builds and runs experiments needs
neither. For a GPU on Linux add cuda12 (mime-engine[cuda12]); on macOS and Windows a large job belongs on the CPU or
in the cloud (docs/platforms.md says what each platform supports and what is tested).
A tube experiment on the MRS drag rung reads a table of 209 MB that a build never downloads; fetch it once with
mime assets fetch unit_tube_R0.997. To work on MIME itself, see CONTRIBUTING.md.
A steel ball 10 micrometres in radius settling in still water, written with no paperwork. It runs in a few seconds on a laptop's CPU, and nothing in it is a record or a reason:
from mime import Body, Experiment, Medium, State
from mime.dynamics import RigidInertial
from mime.interactions import Drag, Gravity
from mime.observations import SwimSpeed
from mime.scene import Scene, Sphere, Z
from mime.things import Part
from mime.units import kg_per_m3, m, m_per_s, mm_per_s, mPa_s, ms, rad_per_s, um
exp = Experiment("settling_ball", scene=Scene.new(up=Z, units="m"), dt=ms(0.1))
water = exp.add_medium(Medium("water"))
exp.declare("water.density", kg_per_m3(998.0))
exp.declare("water.viscosity", mPa_s(1.0))
ball = exp.add_body(Body("ball", dynamics=RigidInertial(), initial=State(
position=m((0.0, 0.0, 0.0)), orientation=(1.0, 0.0, 0.0, 0.0), velocity=m_per_s((0.0, 0.0, 0.0)),
angular_velocity=rad_per_s((0.0, 0.0, 0.0))), parts={"steel": Part(Sphere(radius=um(10.0)))}))
exp.declare("ball.parts.steel.density", kg_per_m3(7850.0))
exp.attach(Drag.MRS(), body=ball, medium=water)
exp.attach(Gravity(), body=ball, medium=water)
settling = exp.observe(SwimSpeed(ball, along=-Z, after=ms(2.0)))
built = exp.build()
result = built.run(ms(3.0), history=True)
print(result[settling].mean_speed.to(mm_per_s)) # the speed over the last millisecond, in mm/s
print(result.text()) # every output, its flags, the post-run watches, the profile
built.save("settling_ball")
The build took standard gravity by convention, the drag's wall kind from the medium (it fills no region, so free
space), and the MRS drag's spacing, blob and quadrature_refinement from their numerical defaults, each a stated
rule and never a converged value. Stokes's law gives 1.493 mm/s for this ball at standard gravity (9.80665 m/s^2, the convention
the build took); the run gives a speed within two per cent of it, and its result says at what Reynolds number it
settled and that it is inside the range the model is declared for (the watch is in
reading a run's results). That the default spacing is a first look is the subject of
docs/choosing_spacing.md, with the measured cost and accuracy of finer ones.
To see what sealing it takes: the exploratory build left three reasons and three numerical defaults pending, and
says so on every output. Read them from the shell (the mime command is on the path where pip installed it; with
uv, it is uv run mime):
mime pending settling_ball
prints each item in plain words with the Python line to paste, and exits with one while anything is pending (the profiles).
The examples and the tutorials are scripts in the repository, not in the package: run them from a source checkout of
this release, git clone --branch v0.3.0.dev1 https://github.com/Microrobotics-Simulation-Framework/MIME.git.
examples/sphere_settling.py is this ball with its reasons and a comparison
with Stokes's law; --radius-um 50 makes the ball one whose Reynolds number is past the model's range, to see the
flag raised.examples/screw_in_tube.py is a magnetic screw swimming along a tube of
glycerol, every value declared (it needs the tube's table, above);
docs/choosing_spacing.md says what its number is worth.examples/script_a.py is script A, a screw in a tube of water, with records.In the repository, every folder has a README saying what it is for.
src/mime/: the package. Its README is the manifest: what MIME 0.3
is, how a declared experiment becomes a MADDENING graph, the dependency direction, each subpackage's role, and the
status of the rewrite.tests/: MIME's own tests, and the planned test layout.examples/: scripts as a user writes them, each held by a test; script A's reproduction arm first.lab_fixture/: a lab's package in miniature, which registers an entry from outside MIME.docs/: the sources of the documentation, the bibliography and the known-anomalies registry.scripts/: the compliance checks CI runs.MIME is research software. It is not a medical device and is not intended for clinical use.
Apache-2.0. See LICENSE and NOTICE. Releases of the 0.2 line (the tag pre-0.3
and earlier) keep the licence they were distributed under, which NOTICE names.