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+
215232class 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