> from omni.isaac.kit import SimulationApp
> simulation_app = SimulationApp({"headless": False})
>
> import os
> if "EXP_PATH" not in os.environ:
> os.environ["EXP_PATH"] = "/isaac-sim/apps"
>
> import argparse
> import sys
> import carb
> import numpy as np
> from omni.isaac.core import World
> from omni.isaac.core.objects import DynamicCuboid
> from omni.isaac.core.utils.stage import add_reference_to_stage
> from omni.isaac.franka.controllers.pick_place_controller import PickPlaceController
> from omni.isaac.manipulators import SingleManipulator
> from omni.isaac.manipulators.grippers import ParallelGripper
> from omni.isaac.nucleus import get_assets_root_path
>
> parser = argparse.ArgumentParser()
> parser.add_argument("--test", default=False, action="store_true", help="Run in test mode")
> args, unknown = parser.parse_known_args()
>
> assets_root_path = get_assets_root_path()
> if assets_root_path is None:
> carb.log_error("Could not find Isaac Sim assets folder")
> simulation_app.close()
> sys.exit()
>
> my_world = World(stage_units_in_meters=1.0)
> my_world.scene.add_default_ground_plane()
>
> asset_path = assets_root_path + "/Isaac/Robots/Franka/franka_alt_fingers.usd"
>
> add_reference_to_stage(usd_path=asset_path, prim_path="/World/Franka")
> gripper = ParallelGripper(
> end_effector_prim_path="/World/Franka/panda_rightfinger",
> joint_prim_names=["panda_finger_joint1", "panda_finger_joint2"],
> joint_opened_positions=np.array([0.05, 0.05]),
> joint_closed_positions=np.array([0.0, 0.0]),
> action_deltas=np.array([0.05, 0.05]),)
> my_franka = my_world.scene.add(
> SingleManipulator(
> prim_path="/World/Franka", name="my_franka", end_effector_prim_name="panda_rightfinger", gripper=gripper )
> )
> cube = my_world.scene.add(
> DynamicCuboid(name="cube",
> position=np.array([0.3, 0.3, 0.3]), prim_path="/World/Cube",
> scale=np.array([0.0515, 0.0515, 0.0515]), size=1.0,
> color=np.array([0, 0, 1]),)
> )
>
> my_world.scene.add_default_ground_plane()
> my_franka.gripper.set_default_state(my_franka.gripper.joint_opened_positions)
> my_world.reset()
> my_controller = PickPlaceController(
> name="pick_place_controller", gripper=my_franka.gripper, robot_articulation=my_franka
> )
>
> articulation_controller = my_franka.get_articulation_controller()
> i = 0
> reset_needed = False
> while not my_controller.is_done():
> my_world.step(render=True)
> if my_world.is_stopped() and not reset_needed:
> reset_needed = True
> if my_world.is_playing():
> if reset_needed:
> my_world.reset()
> my_controller.reset()
> reset_needed = False
> observations = my_world.get_observations()
> actions = my_controller.forward(
> picking_position=cube.get_local_pose()[0],
> placing_position=np.array([-0.3, -0.3, 0.0515 / 2.0]),
> current_joint_positions=my_franka.get_joint_positions(),
> end_effector_offset=np.array([0, 0.005, 0]), )
> if my_controller.is_done():
> print("done picking and placing")
> articulation_controller.apply_action(actions)
> if args.test is True:
> break
>
> simulation_app.close()
As I am running Isaac Sim through AWS Cloud, i use Remote SSH in VSCode, create a new Python file and paste this example in. However, I keep getting an error message saying EXP_PATH not found. How do I solve it?