Exemple #1
0
    def test_metersPerUnit(self):
        stage = Usd.Stage.CreateInMemory()
        self.assertTrue(stage)

        self.assertEqual(UsdGeom.GetStageMetersPerUnit(stage),
                         UsdGeom.LinearUnits.centimeters)
        self.assertFalse(UsdGeom.StageHasAuthoredMetersPerUnit(stage))

        self.assertTrue(
            UsdGeom.SetStageMetersPerUnit(stage, UsdGeom.LinearUnits.feet))
        self.assertTrue(UsdGeom.StageHasAuthoredMetersPerUnit(stage))

        # test that common alternate representations that are not
        # numerically identical compare equal using LinearUnitsAre
        authored = UsdGeom.GetStageMetersPerUnit(stage)
        fromInches = 12 * UsdGeom.LinearUnits.inches
        self.assertNotEqual(authored, fromInches)
        self.assertTrue(UsdGeom.LinearUnitsAre(authored, fromInches))

        # similar test for feet to yards
        self.assertTrue(
            UsdGeom.SetStageMetersPerUnit(stage, UsdGeom.LinearUnits.yards))
        authored = UsdGeom.GetStageMetersPerUnit(stage)
        fromFeet = 3 * UsdGeom.LinearUnits.feet
        self.assertNotEqual(authored, fromFeet)
        self.assertTrue(UsdGeom.LinearUnitsAre(authored, fromFeet))
Exemple #2
0
    def on_startup(self):
        """Initialize extension and UI elements
        """
        self._editor = omni.kit.editor.get_editor_interface()
        self._usd_context = omni.usd.get_context()
        self._stage = self._usd_context.get_stage()
        self._window = ui.Window(EXTENSION_NAME,
                                 width=800,
                                 height=400,
                                 visible=False)
        self._window.deferred_dock_in("Content")
        self._menu_entry = omni.kit.ui.get_editor_menu().add_item(
            f"Isaac Robotics/Samples/{EXTENSION_NAME}", self._menu_callback)
        self._create_ui()

        self._mp = _motion_planning.acquire_motion_planning_interface()
        self._dc = _dynamic_control.acquire_dynamic_control_interface()

        self._physxIFace = _physx.acquire_physx_interface()

        self._ar = _dynamic_control.INVALID_HANDLE

        self._settings = omni.kit.settings.get_settings_interface()

        self._settings.set("/persistent/physics/updateToUsd", False)
        self._settings.set("/persistent/physics/useFastCache", True)
        self._settings.set("/persistent/physics/numThreads", 8)

        self._termination_criteria = FrameTerminationCriteria(
            orig_thresh=0.001)

        self._first_step = True
        self._robot = None

        ## unit conversions: RMP is in meters, kit is by default in cm
        self._meters_per_unit = UsdGeom.GetStageMetersPerUnit(self._stage)
        self._units_per_meter = 1.0 / UsdGeom.GetStageMetersPerUnit(
            self._stage)
Exemple #3
0
def setup_physics(stage):
    # Specify gravity
    metersPerUnit = UsdGeom.GetStageMetersPerUnit(stage)
    gravityScale = 9.81 / metersPerUnit
    gravity = Gf.Vec3f(0.0, 0.0, -gravityScale)
    scene = PhysicsSchema.PhysicsScene.Define(stage, "/physics/scene")
    scene.CreateGravityAttr().Set(gravity)

    PhysxSchema.PhysxSceneAPI.Apply(stage.GetPrimAtPath("/physics/scene"))
    physxSceneAPI = PhysxSchema.PhysxSceneAPI.Get(stage, "/physics/scene")
    physxSceneAPI.CreatePhysxSceneEnableCCDAttr(True)
    physxSceneAPI.CreatePhysxSceneEnableStabilizationAttr(True)
    physxSceneAPI.CreatePhysxSceneEnableGPUDynamicsAttr(False)
    physxSceneAPI.CreatePhysxSceneBroadphaseTypeAttr("MBP")
    physxSceneAPI.CreatePhysxSceneSolverTypeAttr("TGS")
    def on_startup(self):
        """Initialize extension and UI elements
        """
        self._editor = omni.kit.editor.get_editor_interface()
        self._usd_context = omni.usd.get_context()
        self._stage = self._usd_context.get_stage()
        self._window = omni.kit.ui.Window(
            EXTENSION_NAME,
            300,
            200,
            menu_path="Isaac Robotics/Samples/" + EXTENSION_NAME,
            open=False,
            dock=omni.kit.ui.DockPreference.LEFT_BOTTOM,
        )
        self._window.set_update_fn(self._on_update_ui)

        self._mp = _motion_planning.acquire_motion_planning_interface()
        self._dc = _dynamic_control.acquire_dynamic_control_interface()

        self._physxIFace = _physx.acquire_physx_interface()

        self._create_robot_btn = self._window.layout.add_child(
            omni.kit.ui.Button("Load Robot"))
        self._create_robot_btn.set_clicked_fn(self._on_environment_setup)
        self._created = False  # is the robot loaded

        self._target_following_btn = self._window.layout.add_child(
            omni.kit.ui.Button("Target Following"))
        self._target_following_btn.set_clicked_fn(self._on_target_following)
        self._target_following_btn.enabled = False
        self._following = False  # is the task running
        self._target = None

        self._reset_pose_btn = self._window.layout.add_child(
            omni.kit.ui.Button("Reset Robot Pose"))
        self._reset_pose_btn.set_clicked_fn(self._on_reset_pose)
        self._reset_pose_btn.enabled = False
        self._reset_pose_btn.tooltip = omni.kit.ui.Label(
            "Reset robot to default position")

        self._add_object_btn = self._window.layout.add_child(
            omni.kit.ui.Button("Add Object"))
        self._add_object_btn.set_clicked_fn(self._on_add_object)
        self._add_object_btn.enabled = False
        self._add_object_btn.tooltip = omni.kit.ui.Label(
            "Drop randomly selected object in scene")

        self._gripper_btn = self._window.layout.add_child(
            omni.kit.ui.Button("Toggle Gripper"))
        self._gripper_btn.set_clicked_fn(self._on_toggle_gripper)
        self._gripper_btn.enabled = False
        self._gripper_open = False

        self._ar = _dynamic_control.INVALID_HANDLE

        self._reset_btn = self._window.layout.add_child(
            omni.kit.ui.Button("Reset Scene"))
        self._reset_btn.set_clicked_fn(self._on_reset)
        self._reset_btn.enabled = False
        self._reset_btn.tooltip = omni.kit.ui.Label(
            "Reset robot and target to default positions")

        self._settings = omni.kit.settings.get_settings_interface()

        self._settings.set("/persistent/physics/updateToUsd", False)
        self._settings.set("/persistent/physics/useFastCache", True)
        self._settings.set("/persistent/physics/numThreads", 8)

        self._sub_stage_event = self._usd_context.get_stage_event_stream(
        ).create_subscription_to_pop(self._on_stage_event)
        self._termination_criteria = FrameTerminationCriteria(
            orig_thresh=0.001)

        self._first_step = True
        self._robot = None

        ## unit conversions: RMP is in meters, kit is by default in cm
        self._meters_per_unit = UsdGeom.GetStageMetersPerUnit(self._stage)
        self._units_per_meter = 1.0 / UsdGeom.GetStageMetersPerUnit(
            self._stage)
Exemple #5
0
    def on_startup(self):
        self._editor = omni.kit.editor.get_editor_interface()
        self._usd_context = omni.usd.get_context()
        self._stage = self._usd_context.get_stage()
        self._window = omni.kit.ui.Window(
            EXTENSION_NAME,
            300,
            200,
            menu_path="Isaac Robotics/Samples/" + EXTENSION_NAME,
            open=False,
            dock=omni.kit.ui.DockPreference.LEFT_BOTTOM,
        )
        self._window.set_update_fn(self._on_update_ui)

        self._first_step = True
        self._is_playing = False

        self._mp = _motion_planning.acquire_motion_planning_interface()
        self._dc = _dynamic_control.acquire_dynamic_control_interface()

        self._physxIFace = _physx.acquire_physx_interface()

        self._create_franka_btn = self._window.layout.add_child(
            omni.kit.ui.Button("Create Scenario"))
        self._create_franka_btn.set_clicked_fn(self._on_environment_setup)

        self._perform_task_btn = self._window.layout.add_child(
            omni.kit.ui.Button("Perform Task"))
        self._perform_task_btn.set_clicked_fn(self._on_perform_task)
        self._perform_task_btn.enabled = False

        self._angle_floatfield = self._window.layout.add_child(
            omni.kit.ui.DragDouble(text="   Grasp Angle"))
        self._angle_floatfield.set_on_changed_fn(self._on_angle_changed)
        self._angle_floatfield.min = -180
        self._angle_floatfield.max = 180
        self._angle_floatfield.width = 100
        self._angle_floatfield.enabled = False

        self._stop_task_btn = self._window.layout.add_child(
            omni.kit.ui.Button("Reset Task"))
        self._stop_task_btn.set_clicked_fn(self._on_stop_tasks)
        self._stop_task_btn.enabled = False

        self._pause_task_btn = self._window.layout.add_child(
            omni.kit.ui.Button("Pause Task"))
        self._pause_task_btn.set_clicked_fn(self._on_pause_tasks)
        self._pause_task_btn.enabled = False

        self._add_object_btn = self._window.layout.add_child(
            omni.kit.ui.Button("Add Object"))
        self._add_object_btn.set_clicked_fn(self._on_add_bin)
        self._add_object_btn.enabled = False
        self._add_object_btn.tooltip = omni.kit.ui.Label(
            "Drop randomly selected object in scene")

        self._open_gripper_btn = self._window.layout.add_child(
            omni.kit.ui.Button("Toggle Gripper"))
        self._open_gripper_btn.set_clicked_fn(self._on_open_gripper)
        self._open_gripper_btn.enabled = False

        self._settings = omni.kit.settings.get_settings_interface()

        self._settings.set("/persistent/physics/updateToUsd", False)
        self._settings.set("/persistent/physics/useFastCache", True)
        self._settings.set("/persistent/physics/numThreads", 8)

        self._appwindow = omni.appwindow.get_default_app_window()
        self._input = carb.input.acquire_input_interface()
        self._keyboard = self._appwindow.get_keyboard()
        self._sub_keyboard = self._input.subscribe_to_keyboard_events(
            self._keyboard, self._sub_keyboard_event)
        self._sub_stage_event = self._usd_context.get_stage_event_stream(
        ).create_subscription_to_pop(self._on_stage_event)
        self._scenario = Scenario(self._editor, self._dc, self._mp)

        ## unit conversions: RMP is in meters, kit is by default in cm
        self._meters_per_unit = UsdGeom.GetStageMetersPerUnit(self._stage)
        self._units_per_meter = 1.0 / UsdGeom.GetStageMetersPerUnit(
            self._stage)