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))
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)
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)
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)