Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -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",
Expand Down
53 changes: 32 additions & 21 deletions strands_robots/newton/newton_backend.py
Original file line number Diff line number Diff line change
Expand Up @@ -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:
Expand Down Expand Up @@ -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()
Expand Down Expand Up @@ -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,
Expand Down
Loading