Problem
IsaacSimulation (PR #47, branch pr4/isaac-simulation) cannot be instantiated:
TypeError: Can't instantiate abstract class IsaacSimulation with abstract methods
list_robots, remove_object, remove_robot, robot_joint_names
Reproduced on Isaac Sim 5.1.0 (L40S EC2, Python 3.12) with the full PR stack (#44→#45→#46→#47) merged.
MuJoCo Reference Signatures
From strands_robots/simulation/mujoco/simulation.py:
def list_robots(self) -> list[str]:
"""Return ordered robot names (SimEngine ABC)."""
if self._world is None or not self._world.robots:
return []
return list(self._world.robots.keys())
def robot_joint_names(self, robot_name: str) -> list[str]:
"""Ordered joint names for robot_name (SimEngine ABC)."""
if self._world is None or robot_name not in self._world.robots:
return []
return list(self._world.robots[robot_name].joint_names)
def remove_robot(self, name: str) -> dict[str, Any]:
"""Remove robot and its MJCF elements, recompile."""
# ...validates existence, stops policies, ejects from scene...
def remove_object(self, name: str) -> dict[str, Any]:
"""Remove object body from scene, recompile."""
# ...validates existence, deletes from spec, recompiles...
Isaac Implementation Plan
All 4 methods are trivial given IsaacSimulation already tracks self._robots: dict[str, _RobotState]:
def list_robots(self) -> list[str]:
return list(self._robots.keys())
def robot_joint_names(self, robot_name: str) -> list[str]:
if robot_name not in self._robots:
return []
return list(self._robots[robot_name].joint_names)
def remove_robot(self, name: str) -> dict[str, Any]:
with self._lock:
if name not in self._robots:
return {"status": "error", "content": [{"text": f"Robot '{name}' not found."}]}
prim_path = self._robots[name].prim_path
# omni.usd: delete_prim_at_path(prim_path) or stage.RemovePrim(prim_path)
del self._robots[name]
return {"status": "success", "content": [{"text": f"Robot '{name}' removed."}]}
def remove_object(self, name: str) -> dict[str, Any]:
with self._lock:
# Similar pattern: lookup prim path, remove from USD stage, remove from tracking
return {"status": "success", "content": [{"text": f"Object '{name}' removed."}]}
For remove_robot/remove_object, the USD-level deletion uses:
omni.usd.get_context().get_stage().RemovePrim(prim_path) or
omni.kit.commands.execute('DeletePrims', paths=[prim_path])
Impact
This blocks:
- Any instantiation of
IsaacSimulation
- All downstream testing (determinism baseline, headless render check)
PolicyRunner integration (uses list_robots() and robot_joint_names())
Refs: PR #47, #44, #31
Problem
IsaacSimulation(PR #47, branchpr4/isaac-simulation) cannot be instantiated:Reproduced on Isaac Sim 5.1.0 (L40S EC2, Python 3.12) with the full PR stack (#44→#45→#46→#47) merged.
MuJoCo Reference Signatures
From
strands_robots/simulation/mujoco/simulation.py:Isaac Implementation Plan
All 4 methods are trivial given
IsaacSimulationalready tracksself._robots: dict[str, _RobotState]:For
remove_robot/remove_object, the USD-level deletion uses:omni.usd.get_context().get_stage().RemovePrim(prim_path)oromni.kit.commands.execute('DeletePrims', paths=[prim_path])Impact
This blocks:
IsaacSimulationPolicyRunnerintegration (useslist_robots()androbot_joint_names())Refs: PR #47, #44, #31