diff --git a/CHANGELOG.md b/CHANGELOG.md index 3a6503d..27f802e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,15 @@ # main +# ref-4.5 + +Release targeting Isaac Sim 4.5 + +- Updated to use isaacsim.* rather than omni.* import calls +- Added minor fixes to API discrepancies +- Added required extension loading for replay rendering +- Updated README to include setup instructions for Isaac Sim 4.5 + # ref-4.2 Release targeting Isaac Sim 4.2 diff --git a/README.md b/README.md index 2f0b88c..306a230 100644 --- a/README.md +++ b/README.md @@ -56,6 +56,7 @@ To get started with MobilityGen follow the setup and usage instructions below! - [How to implement a custom scenario](#how-to-custom-scenario) - [📝 Data Format](#-data-format) - [👏 Contributing](#-contributing) +- ## 🛠️ Setup @@ -64,7 +65,9 @@ Follow these steps to set up MobilityGen ### Step 1 - Install Isaac Sim -1. Using the ``Omniverse Launcher`` install ``Isaac Sim 4.2.0`` +1. Download [Isaac Sim 4.5.0](https://docs.isaacsim.omniverse.nvidia.com/latest/installation/download.html) + + > We'll assume you use the zip file and extract it to ``~/isaacsim``. ### Step 2 - Clone this repository @@ -86,25 +89,31 @@ Next, we'll call ``link_app.sh`` to link the Isaac Sim installation directory to cd MobilityGen ``` -2. Run the following to link the ``app`` folder +2. Run the following to link the ``app`` folder and pass it the path to where you installed Isaac Sim ```bash - ./link_app.sh + ./link_app.sh --path ~/isaacsim ```
> This step is helpful as it (1) Enables us to use VS code autocompletion (2) Allows us to call ./app/python.sh to launch Isaac Sim Python scripts (3) Allows us to call ./app/isaac-sim.sh to launch Isaac Sim.
-### Step 4 - Install the C++ path planner (for procedural generation) +### Step 4 - Install other python dependencies (including C++ path planner) (for procedural generation) + +1. Install miscellaneous python dependencies + + ```bash + ./app/python.sh -m pip install tqdm + ``` -1. Navigate to the path planner directory +2. Navigate to the path planner directory ```bash cd MobilityGen/path_planner ``` -2. Install with pip using the Isaac Sim python interpreter +3. Install with pip using the Isaac Sim python interpreter ```bash ../app/python.sh -m pip install -e . diff --git a/exts/omni.ext.mobility_gen/omni/ext/mobility_gen/build.py b/exts/omni.ext.mobility_gen/omni/ext/mobility_gen/build.py index fb44915..51d361f 100644 --- a/exts/omni.ext.mobility_gen/omni/ext/mobility_gen/build.py +++ b/exts/omni.ext.mobility_gen/omni/ext/mobility_gen/build.py @@ -15,10 +15,10 @@ import os -import omni.isaac.core.utils.prims as prim_utils -from omni.isaac.core.utils.stage import open_stage -import omni.isaac.core.objects as objects -from omni.isaac.core.utils.stage import add_reference_to_stage +import isaacsim.core.utils.prims as prim_utils +from isaacsim.core.utils.stage import open_stage +import isaacsim.core.api.objects as objects +from isaacsim.core.utils.stage import add_reference_to_stage from omni.ext.mobility_gen.occupancy_map import OccupancyMap diff --git a/exts/omni.ext.mobility_gen/omni/ext/mobility_gen/robots.py b/exts/omni.ext.mobility_gen/omni/ext/mobility_gen/robots.py index 87712e1..2dd2355 100644 --- a/exts/omni.ext.mobility_gen/omni/ext/mobility_gen/robots.py +++ b/exts/omni.ext.mobility_gen/omni/ext/mobility_gen/robots.py @@ -21,14 +21,14 @@ from typing import List, Type, Tuple, Union # Isaac Sim Imports -from omni.isaac.core.prims.xform_prim import XFormPrim -from omni.isaac.core.robots.robot import Robot as _Robot -from omni.isaac.core.articulations import ArticulationView as _ArticulationView -from omni.isaac.wheeled_robots.robots import WheeledRobot as _WheeledRobot -from omni.isaac.wheeled_robots.controllers.differential_controller import DifferentialController -from omni.isaac.examples.humanoid.h1 import H1FlatTerrainPolicy -from omni.isaac.examples.quadruped.quadruped_example import SpotFlatTerrainPolicy -import omni.isaac.core.utils.numpy.rotations as rot_utils +from isaacsim.core.prims import SingleXFormPrim as XFormPrim +from isaacsim.core.api.robots.robot import Robot as _Robot +from isaacsim.core.prims import Articulation as _ArticulationView +from isaacsim.robot.wheeled_robots.robots import WheeledRobot as _WheeledRobot +from isaacsim.robot.wheeled_robots.controllers.differential_controller import DifferentialController +from isaacsim.robot.policy.examples.robots.h1 import H1FlatTerrainPolicy +from isaacsim.robot.policy.examples.robots import SpotFlatTerrainPolicy +import isaacsim.core.utils.numpy.rotations as rot_utils # Extension imports from omni.ext.mobility_gen.common import Buffer, Module @@ -147,6 +147,7 @@ def build_front_camera(cls, prim_path): # Add camera camera_path = os.path.join(prim_path, cls.front_camera_base_path) front_camera_xform = XFormPrim(camera_path) + stage = get_stage() front_camera_prim = stage_get_prim(stage, camera_path) prim_rotate_x(front_camera_prim, cls.front_camera_rotation[0]) @@ -349,7 +350,7 @@ def build(cls, prim_path: str): def write_action(self, step_size): action = self.action.get_value() command = np.array([action[0], 0., action[1]]) - self.controller.advance(step_size, command) + self.controller.forward(step_size, command) def set_pose_2d(self, pose): super().set_pose_2d(pose) diff --git a/exts/omni.ext.mobility_gen/omni/ext/mobility_gen/scene_builders.py b/exts/omni.ext.mobility_gen/omni/ext/mobility_gen/scene_builders.py index 464b582..aa983d9 100644 --- a/exts/omni.ext.mobility_gen/omni/ext/mobility_gen/scene_builders.py +++ b/exts/omni.ext.mobility_gen/omni/ext/mobility_gen/scene_builders.py @@ -20,10 +20,8 @@ import numpy as np from typing import Tuple - -import omni.isaac.core.utils.numpy.rotations as rot_utils -import omni.isaac.core.objects as objects - +import isaacsim.core.utils.numpy.rotations as rot_utils +import isaacsim.core.api.objects as objects from omni.ext.mobility_gen.utils.global_utils import get_stage from omni.ext.mobility_gen.utils.stage_utils import stage_add_dome_light diff --git a/exts/omni.ext.mobility_gen/omni/ext/mobility_gen/utils/global_utils.py b/exts/omni.ext.mobility_gen/omni/ext/mobility_gen/utils/global_utils.py index ea36ad9..23e51b3 100644 --- a/exts/omni.ext.mobility_gen/omni/ext/mobility_gen/utils/global_utils.py +++ b/exts/omni.ext.mobility_gen/omni/ext/mobility_gen/utils/global_utils.py @@ -15,10 +15,10 @@ import omni.kit -import omni.isaac.core +import isaacsim.core from pxr import Usd -from omni.isaac.core_nodes.bindings import _omni_isaac_core_nodes +from isaacsim.core.nodes.bindings import _isaacsim_core_nodes from omni.kit.viewport.utility import get_active_viewport from .stage_utils import stage_get_prim @@ -38,20 +38,20 @@ def new_stage() -> Usd.Stage: return stage -def new_world(physics_dt: float = 0.01, stage_units_in_meters: float = 1.0) -> omni.isaac.core.World: +def new_world(physics_dt: float = 0.01, stage_units_in_meters: float = 1.0) -> isaacsim.core.api.World: world = get_world() if world is not None: - omni.isaac.core.World.clear_instance() - omni.isaac.core.World(physics_dt=physics_dt, stage_units_in_meters=stage_units_in_meters) - return omni.isaac.core.World.instance() + isaacsim.core.api.World.clear_instance() + isaacsim.core.api.World(physics_dt=physics_dt, stage_units_in_meters=stage_units_in_meters) + return isaacsim.core.api.World.instance() -def get_world() -> omni.isaac.core.World: - return omni.isaac.core.World.instance() +def get_world() -> isaacsim.core.api.World: + return isaacsim.core.api.World.instance() def get_timestamp(): - return _omni_isaac_core_nodes.acquire_interface().get_sim_time_monotonic() + return _isaacsim_core_nodes.acquire_interface().get_sim_time_monotonic() def save_stage(path: str, default_prim: str | None = None): diff --git a/exts/omni.ext.mobility_gen/omni/ext/mobility_gen/utils/occupancy_map_utils.py b/exts/omni.ext.mobility_gen/omni/ext/mobility_gen/utils/occupancy_map_utils.py index 0fcac4e..770cbe8 100644 --- a/exts/omni.ext.mobility_gen/omni/ext/mobility_gen/utils/occupancy_map_utils.py +++ b/exts/omni.ext.mobility_gen/omni/ext/mobility_gen/utils/occupancy_map_utils.py @@ -22,8 +22,8 @@ import tempfile import omni.kit.usd import typing as tp -from omni.isaac.occupancy_map.bindings import _occupancy_map -from omni.isaac.occupancy_map.utils import compute_coordinates, update_location +from isaacsim.asset.gen.omap.bindings import _omap as _occupancy_map +from isaacsim.asset.gen.omap.utils import compute_coordinates, update_location from pxr import Sdf, UsdGeom, UsdPhysics, Usd, UsdShade, Kind from ..types import Point2d @@ -75,7 +75,8 @@ async def occupancy_map_generate_from_prim_async( app = get_app() - om = _occupancy_map.acquire_occupancy_map_interface() + om = _occupancy_map.acquire_omap_interface() + timeline = omni.timeline.get_timeline_interface() await app.next_update_async() @@ -183,7 +184,7 @@ async def occupancy_map_generate_from_prim_async( occupied_thresh=ROS_OCCUPIED_THRESH_DEFAULT ) - _occupancy_map.release_occupancy_map_interface(om) + _occupancy_map.release_omap_interface(om) return occupancy_map diff --git a/scripts/replay.py b/scripts/replay.py index 020aac7..bcb3c29 100644 --- a/scripts/replay.py +++ b/scripts/replay.py @@ -63,8 +63,9 @@ "./app/python.sh", "scripts/replay_implementation.py", "--ext-folder", "exts", - "--enable", "omni.isaac.mobility_gen", + "--enable", "omni.ext.mobility_gen", "--enable", "omni.isaac.examples", + "--enable", "isaacsim.asset.gen.omap", "--input_path", recording_path, "--output_path", output_path, "--render_interval", str(args.render_interval), diff --git a/scripts/replay_directory.py b/scripts/replay_directory.py index dcd2e76..45ea509 100644 --- a/scripts/replay_directory.py +++ b/scripts/replay_directory.py @@ -72,7 +72,7 @@ "scripts/replay_implementation.py", "--ext-folder", "exts", "--enable", "omni.ext.mobility_gen", - "--enable", "omni.isaac.examples", + "--enable", "isaacsim.asset.gen.omap", "--input_path", recording_path, "--output_path", output_path, "--render_interval", str(args.render_interval),