Newton は NVIDIA Warp をバックエンドとする GPU ネイティブの物理シミュレーションエンジン。Disney Research・Google DeepMind・NVIDIA が共同で立ち上げ、Linux Foundation 傘下のオープンソース(Apache-2.0)プロジェクトとして運営されている。剛体・関節体・布・ソフトボディ・粒子(MPM)など多様な物理現象を、8 種以上のソルバから目的に合わせて選んでシミュレーションできる。
| 観点 | Newton | MuJoCo | PyBullet | Isaac Gym |
|---|---|---|---|---|
| GPU 演算 | ◎ Warp ネイティブ | ○ MuJoCo Warp 経由 | × CPU のみ | ◎ |
| 微分可能性 | ◎ wp.Tape で自動微分 |
× | × | △ |
| ソルバ選択 | ◎ 8 種(XPBD, VBD, Featherstone, MPM 等) | 1 種 | 1 種 | 1 種 |
| 布・ソフトボディ | ◎ 専用ソルバ複数 | △ | △ | △ |
| OpenUSD 対応 | ◎ | △ | × | △ |
| 拡張性 | ◎ Warp カーネルで自由に追加 | △ | △ | △ |
| ガバナンス | Linux Foundation | DeepMind 単独 | コミュニティ | NVIDIA 独自 |
要約すると:
最大の差別化ポイントは「問題に応じてソルバを選べる GPU ネイティブ+微分可能な統合フレームワーク」であること。
① インストール → ② モデル構築 → ③ ソルバ選択 → ④ シミュレーションループ → ⑤ 可視化/解析
pip install "newton[examples]"
import newton
builder = newton.ModelBuilder()
# リンク(剛体)を追加し、形状を与える
link_0 = builder.add_link()
builder.add_shape_box(link_0, hx=1.0, hy=0.1, hz=0.1)
# ジョイントで接続→アーティキュレーション化
j0 = builder.add_joint_revolute(parent=-1, child=link_0, axis=(0, 0, 1))
builder.add_articulation([j0], label="arm")
# 地面を追加
builder.add_ground_plane()
# モデル確定
model = builder.finalize()
URDF / MJCF / USD ファイルからのインポートにも対応。
solver = newton.solvers.SolverXPBD(model) # 剛体+接触向け
# solver = newton.solvers.SolverFeatherstone(model) # 関節ロボット向け
# solver = newton.solvers.SolverVBD(model) # 布・ソフトボディ向け
# solver = newton.solvers.SolverMuJoCo(model) # MuJoCo 互換
state_0, state_1 = model.state(), model.state()
control = model.control()
contacts = model.contacts()
newton.eval_fk(model, model.joint_q, model.joint_qd, state_0)
for _ in range(num_steps):
state_0.clear_forces()
model.collide(state_0, contacts)
solver.step(state_0, state_1, control, contacts, dt)
state_0, state_1 = state_1, state_0 # ダブルバッファ
微分可能シミュレーションにしたい場合は、このループを wp.Tape() で囲んで .backward() を呼ぶだけ。
python -m newton.examples basic_pendulum # ビューア付きで実行
newton.viewer による OpenGL リアルタイム描画や、OpenUSD へのエクスポートで外部ツール連携も可能。
一言でまとめると: Newton は「GPU 高速・微分可能・マルチソルバ」という三拍子を揃えたオープンな物理エンジンで、大規模ロボットシミュレーションや学習ベース制御の研究基盤として設計されている。