Skip to content

Commit 9dee5ea

Browse files
Adding option to simulate a robot in a kitchen environment for benchmarking (newton-physics#867)
Co-authored-by: Eric Heiden <eheiden@nvidia.com>
1 parent ca6bf6d commit 9dee5ea

File tree

1 file changed

+41
-11
lines changed

1 file changed

+41
-11
lines changed

newton/examples/example_mujoco.py

Lines changed: 41 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -81,6 +81,11 @@
8181
"nconmax": 50,
8282
"ls_parallel": True,
8383
},
84+
"kitchen": {
85+
"setup_builder": lambda x: _setup_kitchen(x),
86+
"njmax": 3800,
87+
"nconmax": 900,
88+
},
8489
}
8590

8691

@@ -212,10 +217,23 @@ def _setup_quadruped(articulation_builder):
212217
return root_dofs
213218

214219

220+
def _setup_kitchen(articulation_builder):
221+
asset_path = newton.utils.download_asset("kitchen")
222+
asset_file = str(asset_path / "mjcf" / "kitchen.xml")
223+
articulation_builder.add_mjcf(
224+
asset_file,
225+
collapse_fixed_joints=True,
226+
)
227+
228+
# Change pose of the robot to minimize overlap
229+
articulation_builder.joint_q[:2] = [1.5, -1.5]
230+
231+
215232
class Example:
216233
def __init__(
217234
self,
218235
robot="humanoid",
236+
env="None",
219237
stage_path=None,
220238
num_envs=1,
221239
use_cuda_graph=True,
@@ -252,22 +270,23 @@ def __init__(
252270
stage_path = "example_" + robot + ".usd"
253271

254272
if builder is None:
255-
builder = Example.create_model_builder(robot, num_envs, randomize, self.seed)
273+
builder = Example.create_model_builder(robot, num_envs, env, randomize, self.seed)
256274

257275
# finalize model
258276
self.model = builder.finalize()
259277

260278
self.solver = Example.create_solver(
261279
self.model,
262280
robot,
263-
use_mujoco_cpu,
264-
solver,
265-
integrator,
266-
solver_iteration,
267-
ls_iteration,
268-
njmax,
269-
nconmax,
270-
ls_parallel,
281+
use_mujoco_cpu=use_mujoco_cpu,
282+
env=env,
283+
solver=solver,
284+
integrator=integrator,
285+
solver_iteration=solver_iteration,
286+
ls_iteration=ls_iteration,
287+
njmax=njmax,
288+
nconmax=nconmax,
289+
ls_parallel=ls_parallel,
271290
)
272291

273292
if stage_path and not headless:
@@ -323,7 +342,7 @@ def render(self):
323342
self.renderer.end_frame()
324343

325344
@staticmethod
326-
def create_model_builder(robot, num_envs, randomize=False, seed=123) -> newton.ModelBuilder:
345+
def create_model_builder(robot, num_envs, env="None", randomize=False, seed=123) -> newton.ModelBuilder:
327346
rng = np.random.default_rng(seed)
328347

329348
articulation_builder = newton.ModelBuilder()
@@ -342,6 +361,10 @@ def create_model_builder(robot, num_envs, randomize=False, seed=123) -> newton.M
342361
else:
343362
raise ValueError(f"Name of the provided robot not recognized: {robot}")
344363

364+
custom_setup_fn = ROBOT_CONFIGS.get(env, {}).get("setup_builder", None)
365+
if custom_setup_fn is not None:
366+
custom_setup_fn(articulation_builder)
367+
345368
builder = newton.ModelBuilder()
346369
builder.replicate(articulation_builder, num_envs, spacing=(4.0, 4.0, 0.0))
347370
if randomize:
@@ -358,7 +381,9 @@ def create_model_builder(robot, num_envs, randomize=False, seed=123) -> newton.M
358381
def create_solver(
359382
model,
360383
robot,
361-
use_mujoco_cpu,
384+
*,
385+
use_mujoco_cpu=False,
386+
env="None",
362387
solver=None,
363388
integrator=None,
364389
solver_iteration=None,
@@ -375,6 +400,9 @@ def create_solver(
375400
nconmax = nconmax if nconmax is not None else ROBOT_CONFIGS[robot]["nconmax"]
376401
ls_parallel = ls_parallel if ls_parallel is not None else ROBOT_CONFIGS[robot]["ls_parallel"]
377402

403+
njmax += ROBOT_CONFIGS.get(env, {}).get("njmax", 0)
404+
nconmax += ROBOT_CONFIGS.get(env, {}).get("nconmax", 0)
405+
378406
return newton.solvers.SolverMuJoCo(
379407
model,
380408
use_mujoco_cpu=use_mujoco_cpu,
@@ -393,6 +421,7 @@ def create_solver(
393421

394422
parser = argparse.ArgumentParser(formatter_class=argparse.ArgumentDefaultsHelpFormatter)
395423
parser.add_argument("--robot", type=str, default="humanoid", help="Name of the robot to simulate.")
424+
parser.add_argument("--env", type=str, default="None", help="Name of the environment where the robot is located.")
396425
parser.add_argument("--device", type=str, default=None, help="Override the default Warp device.")
397426
parser.add_argument(
398427
"--stage-path",
@@ -447,6 +476,7 @@ def create_solver(
447476
with wp.ScopedDevice(args.device):
448477
example = Example(
449478
robot=args.robot,
479+
env=args.env,
450480
stage_path=args.stage_path,
451481
num_envs=args.num_envs,
452482
use_cuda_graph=args.use_cuda_graph,

0 commit comments

Comments
 (0)