プレイグラウンド、サンドボックス、使い捨てスクリプト置き場
0

Configure Feed

Select the types of activity you want to include in your feed.

create newton

Kohei Watanabe (Mar 20, 2026, 3:31 AM +0900) a20973af 92d05c9b

+118
+1
newton/.python-version
··· 1 + 3.13
newton/README.md

This is a binary file and will not be displayed.

+110
newton/main.py
··· 1 + import warp as wp 2 + 3 + import newton 4 + import newton.examples 5 + 6 + 7 + class Example: 8 + def __init__(self, viewer, args=None): 9 + self.fps = 100 10 + self.frame_dt = 1.0 / self.fps 11 + self.sim_time = 0.0 12 + self.sim_substeps = 10 13 + self.sim_dt = self.frame_dt / self.sim_substeps 14 + 15 + self.viewer = viewer 16 + self.args = args 17 + 18 + builder = newton.ModelBuilder() 19 + 20 + hx = 1.0 21 + hy = 0.1 22 + hz = 0.1 23 + 24 + link_0 = builder.add_link() 25 + builder.add_shape_box(link_0, hx=hx, hy=hy, hz=hz) 26 + 27 + link_1 = builder.add_link() 28 + builder.add_shape_box(link_1, hx=hx, hy=hy, hz=hz) 29 + 30 + link_2 = builder.add_link() 31 + builder.add_shape_box(link_2, hx=hx, hy=hy, hz=hz) 32 + 33 + rot = wp.quat_from_axis_angle(wp.vec3(0.0, 0.0, 1.0), -wp.pi * 0.5) 34 + j0 = builder.add_joint_revolute( 35 + parent=-1, 36 + child=link_0, 37 + axis=wp.vec3(0.0, 1.0, 0.0), 38 + parent_xform=wp.transform(p=wp.vec3(0.0, 0.0, 7.0), q=rot), 39 + child_xform=wp.transform(p=wp.vec3(-hx, 0.0, 0.0), q=wp.quat_identity()), 40 + ) 41 + j1 = builder.add_joint_revolute( 42 + parent=link_0, 43 + child=link_1, 44 + axis=wp.vec3(0.0, 1.0, 0.0), 45 + parent_xform=wp.transform(p=wp.vec3(hx, 0.0, 0.0), q=wp.quat_identity()), 46 + child_xform=wp.transform(p=wp.vec3(-hx, 0.0, 0.0), q=wp.quat_identity()), 47 + ) 48 + j2 = builder.add_joint_revolute( 49 + parent=link_1, 50 + child=link_2, 51 + axis=wp.vec3(0.0, 1.0, 0.0), 52 + parent_xform=wp.transform(p=wp.vec3(hx, 0.0, 0.0), q=wp.quat_identity()), 53 + child_xform=wp.transform(p=wp.vec3(-hx, 0.0, 0.0), q=wp.quat_identity()), 54 + ) 55 + 56 + builder.add_articulation([j0, j1, j2], label="pendulum") 57 + 58 + builder.add_ground_plane() 59 + 60 + self.model = builder.finalize() 61 + 62 + self.solver = newton.solvers.SolverXPBD(self.model) 63 + 64 + self.state_0 = self.model.state() 65 + self.state_1 = self.model.state() 66 + self.control = self.model.control() 67 + 68 + newton.eval_fk(self.model, self.model.joint_q, self.model.joint_qd, self.state_0) 69 + 70 + self.contacts = self.model.contacts() 71 + 72 + self.viewer.set_model(self.model) 73 + 74 + self.capture() 75 + 76 + def capture(self): 77 + if wp.get_device().is_cuda: 78 + with wp.ScopedCapture() as capture: 79 + self.simulate() 80 + self.graph = capture.graph 81 + else: 82 + self.graph = None 83 + 84 + def simulate(self): 85 + for _ in range(self.sim_substeps): 86 + self.state_0.clear_forces() 87 + self.viewer.apply_forces(self.state_0) 88 + self.model.collide(self.state_0, self.contacts) 89 + self.solver.step(self.state_0, self.state_1, self.control, self.contacts, self.sim_dt) 90 + self.state_0, self.state_1 = self.state_1, self.state_0 91 + 92 + def step(self): 93 + if self.graph: 94 + wp.capture_launch(self.graph) 95 + else: 96 + self.simulate() 97 + 98 + self.sim_time += self.frame_dt 99 + 100 + def render(self): 101 + self.viewer.begin_frame(self.sim_time) 102 + self.viewer.log_state(self.state_0) 103 + self.viewer.log_contacts(self.contacts, self.state_0) 104 + self.viewer.end_frame() 105 + 106 + 107 + if __name__ == "__main__": 108 + viewer, args = newton.examples.init() 109 + example = Example(viewer, args) 110 + newton.examples.run(example, args)
+7
newton/pyproject.toml
··· 1 + [project] 2 + name = "newton" 3 + version = "0.1.0" 4 + description = "Add your description here" 5 + readme = "README.md" 6 + requires-python = ">=3.13" 7 + dependencies = []