diff --git a/pyproject.toml b/pyproject.toml index 3ef1792..af1b1b2 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -63,7 +63,8 @@ isaac = [ # pip install isaaclab isaaclab_assets isaaclab_tasks (from Isaac Lab source) "h5py>=3.0", "mujoco>=3.0.0", - "usd-core>=24.0", # OpenUSD (pxr) for MJCF→USD asset conversion + "usd-core>=24.0; platform_machine != 'aarch64'", # no aarch64 wheels + "warp-lang>=1.0.0", # required by Isaac Lab ] newton = [ "newton>=1.0.0", diff --git a/strands_robots/newton/newton_backend.py b/strands_robots/newton/newton_backend.py index 85de55f..533cb10 100644 --- a/strands_robots/newton/newton_backend.py +++ b/strands_robots/newton/newton_backend.py @@ -611,19 +611,20 @@ def create_world( gravity_mag = -abs(gy) if gy != 0 else -9.81 try: - self._builder = newton.ModelBuilder(gravity=gravity_mag) + self._builder = newton.ModelBuilder( + up_axis=up_axis.upper(), gravity=gravity_mag + ) except (TypeError, AttributeError): self._builder = newton.ModelBuilder() - # Set scalar gravity and up_vector - try: - self._builder.gravity = gravity_mag - except Exception: - pass - try: - self._builder.up_vector = up_vec - self._builder.up_axis = up_axis - except Exception: - pass + # Fallback: set gravity and up_vector as attributes + try: + self._builder.gravity = gravity_mag + except Exception: + pass + try: + self._builder.up_vector = up_vec + except Exception: + pass self._ground_plane_requested = ground_plane if ground_plane: @@ -657,18 +658,21 @@ def _recreate_builder(self) -> None: newton = self._newton gravity_mag = getattr(self._builder, "gravity", -9.81) up_vec = getattr(self._builder, "up_vector", (0.0, 0.0, 1.0)) + up_axis_str = "z" if up_vec[2] > up_vec[1] else "y" try: - self._builder = newton.ModelBuilder(gravity=gravity_mag) + self._builder = newton.ModelBuilder( + up_axis=up_axis_str.upper(), gravity=gravity_mag + ) except (TypeError, AttributeError): self._builder = newton.ModelBuilder() - try: - self._builder.gravity = gravity_mag - except Exception: - pass - try: - self._builder.up_vector = up_vec - except Exception: - pass + try: + self._builder.gravity = gravity_mag + except Exception: + pass + try: + self._builder.up_vector = up_vec + except Exception: + pass if getattr(self, "_ground_plane_requested", True): try: self._builder.add_ground_plane() @@ -1111,7 +1115,14 @@ def replicate(self, num_envs: Optional[int] = None) -> Dict[str, Any]: self._dof_per_world = getattr(main_builder, "joint_count", 0) # Use Newton's replicate — instance method on a new builder - replicated_builder = newton.ModelBuilder() + # Propagate up_axis from main builder to replicated builder + _up_axis = getattr(main_builder, "up_axis", "Y") + if hasattr(_up_axis, "name"): + _up_axis = _up_axis.name # Axis enum → string + try: + replicated_builder = newton.ModelBuilder(up_axis=str(_up_axis).upper()) + except (TypeError, AttributeError): + replicated_builder = newton.ModelBuilder() replicated_builder.replicate( main_builder, world_count=num_envs,