From ffddc10cb81f7d203b32df0813df07745831fbfa Mon Sep 17 00:00:00 2001 From: Ashwin Varghese Kuruttukulam Date: Mon, 6 Apr 2026 15:24:17 -0700 Subject: [PATCH 1/7] update for robot position in hubble --- .../config/rizon_4s/ros_inference_env_cfg.py | 71 +++++++++++-------- 1 file changed, 41 insertions(+), 30 deletions(-) diff --git a/source/isaaclab_tasks/isaaclab_tasks/manager_based/manipulation/deploy/gear_assembly/config/rizon_4s/ros_inference_env_cfg.py b/source/isaaclab_tasks/isaaclab_tasks/manager_based/manipulation/deploy/gear_assembly/config/rizon_4s/ros_inference_env_cfg.py index 6ff7f2cb3d7..fe85b97cb36 100644 --- a/source/isaaclab_tasks/isaaclab_tasks/manager_based/manipulation/deploy/gear_assembly/config/rizon_4s/ros_inference_env_cfg.py +++ b/source/isaaclab_tasks/isaaclab_tasks/manager_based/manipulation/deploy/gear_assembly/config/rizon_4s/ros_inference_env_cfg.py @@ -13,13 +13,20 @@ @configclass class Rizon4sGearAssemblyROSInferenceEnvCfg(Rizon4sGearAssemblyEnvCfg): - """Configuration for ROS inference with Flexiv Rizon 4s and Grav gripper. + """ROS / Isaac Manipulator inference fields plus deployment alignment for NVIDIA Hubble Lab. This configuration: - Exposes variables needed for ROS inference - Overrides robot and gear initial poses for fixed/deterministic setup + - Aligns robot mounting pose with the Flexiv Rizon 4s installation at NVIDIA Hubble Lab """ + # Single source for base + all gear rigid bodies (Rizon: closer to robot, centered) + ros_inference_factory_gears_init_state: RigidObjectCfg.InitialStateCfg = RigidObjectCfg.InitialStateCfg( + pos=(0.75, 0.0, -0.2), + rot=(0.0, 0.0, 0.70711, -0.70711), + ) + def __post_init__(self): # post init of parent super().__post_init__() @@ -46,35 +53,39 @@ def __post_init__(self): # Dynamically generate action_scale_joint_space based on action_space self.action_scale_joint_space = [self.joint_action_scale] * self.action_space - # Override robot initial pose for ROS inference (fixed pose, no randomization) - # Joint positions and pos are inherited from parent, only override rotation to be deterministic - self.scene.robot.init_state.rot = (0.0, 0.0, 0.0, 1.0) # Identity quaternion (x, y, z, w) - - # Override gear base initial pose (fixed pose for ROS inference) - # Position configured for Rizon 4s workspace - self.scene.factory_gear_base.init_state = RigidObjectCfg.InitialStateCfg( - pos=(0.481, -0.073, -0.005), - rot=(0.0, 0.0, 0.70711, -0.70711), - ) - - # Override gear initial poses (fixed poses for ROS inference) - # Small gear - self.scene.factory_gear_small.init_state = RigidObjectCfg.InitialStateCfg( - pos=(0.481, -0.073, -0.005), - rot=(0.0, 0.0, 0.70711, -0.70711), - ) - - # Medium gear - self.scene.factory_gear_medium.init_state = RigidObjectCfg.InitialStateCfg( - pos=(0.481, -0.073, -0.005), - rot=(0.0, 0.0, 0.70711, -0.70711), - ) - - # Large gear - self.scene.factory_gear_large.init_state = RigidObjectCfg.InitialStateCfg( - pos=(0.481, -0.073, -0.005), - rot=(0.0, 0.0, 0.70711, -0.70711), - ) + # --- NVIDIA Hubble Lab: Flexiv Rizon 4s mount --- + # Remove vertical mount stand since Hubble deployment does not use the sim stand asset + self.scene.stand = None + + # Lab home joint pose (radians); aligns sim defaults / reset with the physical stand + self.scene.robot.init_state.joint_pos = { + "joint1": math.radians(-90.0), + "joint2": math.radians(90.0), + "joint3": 0.0, + "joint4": math.radians(90.0), + "joint5": 0.0, + "joint6": 0.0, + "joint7": 0.0, + } + + # Orientation of robot is based on the Flexiv Rizon 4s mount in the Hubble Lab + self.scene.robot.init_state.pos = (0.0, 0.0, 0.0) + self.scene.robot.init_state.rot = (0.5, 0.5, 0.5, 0.5) + + # Override gear base + all gears from one template (fixed pose for ROS inference) + _g = self.ros_inference_factory_gears_init_state + for _name in ( + "factory_gear_base", + "factory_gear_small", + "factory_gear_medium", + "factory_gear_large", + ): + getattr(self.scene, _name).init_state = RigidObjectCfg.InitialStateCfg( + pos=_g.pos, + rot=_g.rot, + lin_vel=_g.lin_vel, + ang_vel=_g.ang_vel, + ) # Fixed asset parameters for ROS inference - derived from configuration # These parameters are used by the ROS inference node to validate the environment setup From be129dd73dce2e561cca23f70571b9b3ad14c82f Mon Sep 17 00:00:00 2001 From: Ashwin Varghese Kuruttukulam Date: Tue, 7 Apr 2026 14:48:59 -0700 Subject: [PATCH 2/7] reduce decimation to 2 --- .../manipulation/deploy/gear_assembly/gear_assembly_env_cfg.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/isaaclab_tasks/isaaclab_tasks/manager_based/manipulation/deploy/gear_assembly/gear_assembly_env_cfg.py b/source/isaaclab_tasks/isaaclab_tasks/manager_based/manipulation/deploy/gear_assembly/gear_assembly_env_cfg.py index b696516f226..806d284cd34 100644 --- a/source/isaaclab_tasks/isaaclab_tasks/manager_based/manipulation/deploy/gear_assembly/gear_assembly_env_cfg.py +++ b/source/isaaclab_tasks/isaaclab_tasks/manager_based/manipulation/deploy/gear_assembly/gear_assembly_env_cfg.py @@ -341,7 +341,7 @@ def __post_init__(self): self.episode_length_s = 6.66 self.viewer.eye = (3.5, 3.5, 3.5) # simulation settings - self.decimation = 33 + self.decimation = 2 self.sim.render_interval = self.decimation self.sim.dt = 1.0 / 1000.0 From 4e2b6b2d994a9533b6915ea7c2650f3f026a2abd Mon Sep 17 00:00:00 2001 From: Ashwin Varghese Kuruttukulam Date: Tue, 7 Apr 2026 14:57:26 -0700 Subject: [PATCH 3/7] self.decimation = 4 --- .../manipulation/deploy/gear_assembly/gear_assembly_env_cfg.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/isaaclab_tasks/isaaclab_tasks/manager_based/manipulation/deploy/gear_assembly/gear_assembly_env_cfg.py b/source/isaaclab_tasks/isaaclab_tasks/manager_based/manipulation/deploy/gear_assembly/gear_assembly_env_cfg.py index 806d284cd34..8c93c5a3c0e 100644 --- a/source/isaaclab_tasks/isaaclab_tasks/manager_based/manipulation/deploy/gear_assembly/gear_assembly_env_cfg.py +++ b/source/isaaclab_tasks/isaaclab_tasks/manager_based/manipulation/deploy/gear_assembly/gear_assembly_env_cfg.py @@ -341,7 +341,7 @@ def __post_init__(self): self.episode_length_s = 6.66 self.viewer.eye = (3.5, 3.5, 3.5) # simulation settings - self.decimation = 2 + self.decimation = 4 self.sim.render_interval = self.decimation self.sim.dt = 1.0 / 1000.0 From 1c7a2e9bfced2e0482b6e7c9b36ba4a53554b8e1 Mon Sep 17 00:00:00 2001 From: Ashwin Varghese Kuruttukulam Date: Wed, 8 Apr 2026 13:33:06 -0700 Subject: [PATCH 4/7] revert deploy dir to 3ee31f3a163b8dfb507502c12263ee39ccb9946a --- .../manipulation/deploy/__init__.py | 2 + .../gear_assembly/config/rizon_4s/__init__.py | 6 +- .../config/rizon_4s/joint_pos_env_cfg.py | 16 ++--- .../config/rizon_4s/ros_inference_env_cfg.py | 71 ++++++++----------- .../config/ur_10e/joint_pos_env_cfg.py | 18 +++++ .../gear_assembly/gear_assembly_env_cfg.py | 14 ++-- .../manipulation/deploy/mdp/events.py | 33 ++++----- .../manipulation/deploy/mdp/rewards.py | 37 ++-------- .../config/rizon_4s/joint_pos_env_cfg.py | 20 ++++++ .../config/rizon_4s/ros_inference_env_cfg.py | 5 -- .../deploy/reach/reach_env_cfg.py | 2 +- 11 files changed, 108 insertions(+), 116 deletions(-) diff --git a/source/isaaclab_tasks/isaaclab_tasks/manager_based/manipulation/deploy/__init__.py b/source/isaaclab_tasks/isaaclab_tasks/manager_based/manipulation/deploy/__init__.py index 3de316ff330..61fccf6b2c1 100644 --- a/source/isaaclab_tasks/isaaclab_tasks/manager_based/manipulation/deploy/__init__.py +++ b/source/isaaclab_tasks/isaaclab_tasks/manager_based/manipulation/deploy/__init__.py @@ -13,3 +13,5 @@ - Reach environments for end-effector pose tracking """ + +from .reach import * # noqa: F401, F403 diff --git a/source/isaaclab_tasks/isaaclab_tasks/manager_based/manipulation/deploy/gear_assembly/config/rizon_4s/__init__.py b/source/isaaclab_tasks/isaaclab_tasks/manager_based/manipulation/deploy/gear_assembly/config/rizon_4s/__init__.py index 8ed735d68b9..328a5ca09d5 100644 --- a/source/isaaclab_tasks/isaaclab_tasks/manager_based/manipulation/deploy/gear_assembly/config/rizon_4s/__init__.py +++ b/source/isaaclab_tasks/isaaclab_tasks/manager_based/manipulation/deploy/gear_assembly/config/rizon_4s/__init__.py @@ -14,7 +14,7 @@ # Flexiv Rizon 4s gym.register( - id="Isaac-Deploy-GearAssembly-Rizon4s-Grav-v0", + id="Isaac-Deploy-GearAssembly-Rizon4s-v0", entry_point="isaaclab.envs:ManagerBasedRLEnv", disable_env_checker=True, kwargs={ @@ -24,7 +24,7 @@ ) gym.register( - id="Isaac-Deploy-GearAssembly-Rizon4s-Grav-Play-v0", + id="Isaac-Deploy-GearAssembly-Rizon4s-Play-v0", entry_point="isaaclab.envs:ManagerBasedRLEnv", disable_env_checker=True, kwargs={ @@ -34,7 +34,7 @@ # Flexiv Rizon 4s - ROS Inference gym.register( - id="Isaac-Deploy-GearAssembly-Rizon4s-Grav-ROS-Inference-v0", + id="Isaac-Deploy-GearAssembly-Rizon4s-ROS-Inference-v0", entry_point="isaaclab.envs:ManagerBasedRLEnv", disable_env_checker=True, kwargs={ diff --git a/source/isaaclab_tasks/isaaclab_tasks/manager_based/manipulation/deploy/gear_assembly/config/rizon_4s/joint_pos_env_cfg.py b/source/isaaclab_tasks/isaaclab_tasks/manager_based/manipulation/deploy/gear_assembly/config/rizon_4s/joint_pos_env_cfg.py index c93a78ee6da..5a8119c58fd 100644 --- a/source/isaaclab_tasks/isaaclab_tasks/manager_based/manipulation/deploy/gear_assembly/config/rizon_4s/joint_pos_env_cfg.py +++ b/source/isaaclab_tasks/isaaclab_tasks/manager_based/manipulation/deploy/gear_assembly/config/rizon_4s/joint_pos_env_cfg.py @@ -169,7 +169,7 @@ class EventCfg: func=gear_assembly_events.randomize_gear_type, mode="reset", params={"gear_types": ["gear_small", "gear_medium", "gear_large"]}, - # params={"gear_types": ["gear_small", "gear_medium"]}, + # params={"gear_types": ["gear_large"]}, ) reset_all = EventTerm(func=mdp.reset_scene_to_default, mode="reset") @@ -407,15 +407,13 @@ def __post_init__(self): self.events.set_robot_to_grasp_pose.params["gripper_joint_setter_func"] = self.gripper_joint_setter_func # Populate reward term parameters for EE-gear keypoint tracking - self.rewards.end_effector_base_keypoint_tracking.params["end_effector_body_name"] = self.end_effector_body_name - self.rewards.end_effector_base_keypoint_tracking.params["grasp_rot_offset"] = self.grasp_rot_offset - self.rewards.end_effector_base_keypoint_tracking.params["gear_offsets_grasp"] = self.gear_offsets_grasp + self.rewards.ee_gear_keypoint_tracking.params["end_effector_body_name"] = self.end_effector_body_name + self.rewards.ee_gear_keypoint_tracking.params["grasp_rot_offset"] = self.grasp_rot_offset + self.rewards.ee_gear_keypoint_tracking.params["gear_offsets_grasp"] = self.gear_offsets_grasp - self.rewards.end_effector_base_keypoint_tracking_exp.params["end_effector_body_name"] = ( - self.end_effector_body_name - ) - self.rewards.end_effector_base_keypoint_tracking_exp.params["grasp_rot_offset"] = self.grasp_rot_offset - self.rewards.end_effector_base_keypoint_tracking_exp.params["gear_offsets_grasp"] = self.gear_offsets_grasp + self.rewards.ee_gear_keypoint_tracking_exp.params["end_effector_body_name"] = self.end_effector_body_name + self.rewards.ee_gear_keypoint_tracking_exp.params["grasp_rot_offset"] = self.grasp_rot_offset + self.rewards.ee_gear_keypoint_tracking_exp.params["gear_offsets_grasp"] = self.gear_offsets_grasp # Populate termination term parameters self.terminations.gear_dropped.params["gear_offsets_grasp"] = self.gear_offsets_grasp diff --git a/source/isaaclab_tasks/isaaclab_tasks/manager_based/manipulation/deploy/gear_assembly/config/rizon_4s/ros_inference_env_cfg.py b/source/isaaclab_tasks/isaaclab_tasks/manager_based/manipulation/deploy/gear_assembly/config/rizon_4s/ros_inference_env_cfg.py index fe85b97cb36..6ff7f2cb3d7 100644 --- a/source/isaaclab_tasks/isaaclab_tasks/manager_based/manipulation/deploy/gear_assembly/config/rizon_4s/ros_inference_env_cfg.py +++ b/source/isaaclab_tasks/isaaclab_tasks/manager_based/manipulation/deploy/gear_assembly/config/rizon_4s/ros_inference_env_cfg.py @@ -13,20 +13,13 @@ @configclass class Rizon4sGearAssemblyROSInferenceEnvCfg(Rizon4sGearAssemblyEnvCfg): - """ROS / Isaac Manipulator inference fields plus deployment alignment for NVIDIA Hubble Lab. + """Configuration for ROS inference with Flexiv Rizon 4s and Grav gripper. This configuration: - Exposes variables needed for ROS inference - Overrides robot and gear initial poses for fixed/deterministic setup - - Aligns robot mounting pose with the Flexiv Rizon 4s installation at NVIDIA Hubble Lab """ - # Single source for base + all gear rigid bodies (Rizon: closer to robot, centered) - ros_inference_factory_gears_init_state: RigidObjectCfg.InitialStateCfg = RigidObjectCfg.InitialStateCfg( - pos=(0.75, 0.0, -0.2), - rot=(0.0, 0.0, 0.70711, -0.70711), - ) - def __post_init__(self): # post init of parent super().__post_init__() @@ -53,39 +46,35 @@ def __post_init__(self): # Dynamically generate action_scale_joint_space based on action_space self.action_scale_joint_space = [self.joint_action_scale] * self.action_space - # --- NVIDIA Hubble Lab: Flexiv Rizon 4s mount --- - # Remove vertical mount stand since Hubble deployment does not use the sim stand asset - self.scene.stand = None - - # Lab home joint pose (radians); aligns sim defaults / reset with the physical stand - self.scene.robot.init_state.joint_pos = { - "joint1": math.radians(-90.0), - "joint2": math.radians(90.0), - "joint3": 0.0, - "joint4": math.radians(90.0), - "joint5": 0.0, - "joint6": 0.0, - "joint7": 0.0, - } - - # Orientation of robot is based on the Flexiv Rizon 4s mount in the Hubble Lab - self.scene.robot.init_state.pos = (0.0, 0.0, 0.0) - self.scene.robot.init_state.rot = (0.5, 0.5, 0.5, 0.5) - - # Override gear base + all gears from one template (fixed pose for ROS inference) - _g = self.ros_inference_factory_gears_init_state - for _name in ( - "factory_gear_base", - "factory_gear_small", - "factory_gear_medium", - "factory_gear_large", - ): - getattr(self.scene, _name).init_state = RigidObjectCfg.InitialStateCfg( - pos=_g.pos, - rot=_g.rot, - lin_vel=_g.lin_vel, - ang_vel=_g.ang_vel, - ) + # Override robot initial pose for ROS inference (fixed pose, no randomization) + # Joint positions and pos are inherited from parent, only override rotation to be deterministic + self.scene.robot.init_state.rot = (0.0, 0.0, 0.0, 1.0) # Identity quaternion (x, y, z, w) + + # Override gear base initial pose (fixed pose for ROS inference) + # Position configured for Rizon 4s workspace + self.scene.factory_gear_base.init_state = RigidObjectCfg.InitialStateCfg( + pos=(0.481, -0.073, -0.005), + rot=(0.0, 0.0, 0.70711, -0.70711), + ) + + # Override gear initial poses (fixed poses for ROS inference) + # Small gear + self.scene.factory_gear_small.init_state = RigidObjectCfg.InitialStateCfg( + pos=(0.481, -0.073, -0.005), + rot=(0.0, 0.0, 0.70711, -0.70711), + ) + + # Medium gear + self.scene.factory_gear_medium.init_state = RigidObjectCfg.InitialStateCfg( + pos=(0.481, -0.073, -0.005), + rot=(0.0, 0.0, 0.70711, -0.70711), + ) + + # Large gear + self.scene.factory_gear_large.init_state = RigidObjectCfg.InitialStateCfg( + pos=(0.481, -0.073, -0.005), + rot=(0.0, 0.0, 0.70711, -0.70711), + ) # Fixed asset parameters for ROS inference - derived from configuration # These parameters are used by the ROS inference node to validate the environment setup diff --git a/source/isaaclab_tasks/isaaclab_tasks/manager_based/manipulation/deploy/gear_assembly/config/ur_10e/joint_pos_env_cfg.py b/source/isaaclab_tasks/isaaclab_tasks/manager_based/manipulation/deploy/gear_assembly/config/ur_10e/joint_pos_env_cfg.py index 3cb8eeae956..d8de9818414 100644 --- a/source/isaaclab_tasks/isaaclab_tasks/manager_based/manipulation/deploy/gear_assembly/config/ur_10e/joint_pos_env_cfg.py +++ b/source/isaaclab_tasks/isaaclab_tasks/manager_based/manipulation/deploy/gear_assembly/config/ur_10e/joint_pos_env_cfg.py @@ -385,6 +385,15 @@ def __post_init__(self): self.events.set_robot_to_grasp_pose.params["grasp_rot_offset"] = self.grasp_rot_offset self.events.set_robot_to_grasp_pose.params["gripper_joint_setter_func"] = self.gripper_joint_setter_func + # Populate reward term parameters for EE-gear keypoint tracking + self.rewards.ee_gear_keypoint_tracking.params["end_effector_body_name"] = self.end_effector_body_name + self.rewards.ee_gear_keypoint_tracking.params["grasp_rot_offset"] = self.grasp_rot_offset + self.rewards.ee_gear_keypoint_tracking.params["gear_offsets_grasp"] = self.gear_offsets_grasp + + self.rewards.ee_gear_keypoint_tracking_exp.params["end_effector_body_name"] = self.end_effector_body_name + self.rewards.ee_gear_keypoint_tracking_exp.params["grasp_rot_offset"] = self.grasp_rot_offset + self.rewards.ee_gear_keypoint_tracking_exp.params["gear_offsets_grasp"] = self.gear_offsets_grasp + # Populate termination term parameters self.terminations.gear_dropped.params["gear_offsets_grasp"] = self.gear_offsets_grasp self.terminations.gear_dropped.params["end_effector_body_name"] = self.end_effector_body_name @@ -483,6 +492,15 @@ def __post_init__(self): self.events.set_robot_to_grasp_pose.params["grasp_rot_offset"] = self.grasp_rot_offset self.events.set_robot_to_grasp_pose.params["gripper_joint_setter_func"] = self.gripper_joint_setter_func + # Populate reward term parameters for EE-gear keypoint tracking + self.rewards.ee_gear_keypoint_tracking.params["end_effector_body_name"] = self.end_effector_body_name + self.rewards.ee_gear_keypoint_tracking.params["grasp_rot_offset"] = self.grasp_rot_offset + self.rewards.ee_gear_keypoint_tracking.params["gear_offsets_grasp"] = self.gear_offsets_grasp + + self.rewards.ee_gear_keypoint_tracking_exp.params["end_effector_body_name"] = self.end_effector_body_name + self.rewards.ee_gear_keypoint_tracking_exp.params["grasp_rot_offset"] = self.grasp_rot_offset + self.rewards.ee_gear_keypoint_tracking_exp.params["gear_offsets_grasp"] = self.gear_offsets_grasp + # Populate termination term parameters self.terminations.gear_dropped.params["gear_offsets_grasp"] = self.gear_offsets_grasp self.terminations.gear_dropped.params["end_effector_body_name"] = self.end_effector_body_name diff --git a/source/isaaclab_tasks/isaaclab_tasks/manager_based/manipulation/deploy/gear_assembly/gear_assembly_env_cfg.py b/source/isaaclab_tasks/isaaclab_tasks/manager_based/manipulation/deploy/gear_assembly/gear_assembly_env_cfg.py index 8c93c5a3c0e..8a2ed5b90a4 100644 --- a/source/isaaclab_tasks/isaaclab_tasks/manager_based/manipulation/deploy/gear_assembly/gear_assembly_env_cfg.py +++ b/source/isaaclab_tasks/isaaclab_tasks/manager_based/manipulation/deploy/gear_assembly/gear_assembly_env_cfg.py @@ -263,19 +263,18 @@ class RewardsCfg: }, ) - end_effector_base_keypoint_tracking = RewTerm( + ee_gear_keypoint_tracking = RewTerm( func=mdp.keypoint_ee_gear_error, weight=-0.5, params={ "robot_asset_cfg": SceneEntityCfg("robot"), "keypoint_scale": 0.15, - "ee_gear_threshold": 0.00, - "weight_ramp_start": 0.0, # Set to 0.0 to enable ramp-up + "weight_ramp_start": 0.0, "weight_ramp_steps": 250_000, }, ) - end_effector_base_keypoint_tracking_exp = RewTerm( + ee_gear_keypoint_tracking_exp = RewTerm( func=mdp.keypoint_ee_gear_error_exp, weight=0.5, params={ @@ -283,14 +282,13 @@ class RewardsCfg: "kp_exp_coeffs": [(50, 0.0001), (300, 0.0001)], "kp_use_sum_of_exps": False, "keypoint_scale": 0.15, - "ee_gear_threshold": 0.00, - "weight_ramp_start": 0.0, # Set to 0.0 to enable ramp-up + "weight_ramp_start": 0.0, "weight_ramp_steps": 250_000, }, ) + action_rate = RewTerm(func=mdp.action_rate_l2, weight=-5.0e-06) - # action = RewTerm(func=mdp.action_l2, weight=-5.0e-06) @configclass @@ -343,7 +341,7 @@ def __post_init__(self): # simulation settings self.decimation = 4 self.sim.render_interval = self.decimation - self.sim.dt = 1.0 / 1000.0 + self.sim.dt = 1.0 / 120.0 self.gear_offsets = { "gear_small": [0.076125, 0.0, 0.0], diff --git a/source/isaaclab_tasks/isaaclab_tasks/manager_based/manipulation/deploy/mdp/events.py b/source/isaaclab_tasks/isaaclab_tasks/manager_based/manipulation/deploy/mdp/events.py index 1daf69021b0..f5fa2b7ad7b 100644 --- a/source/isaaclab_tasks/isaaclab_tasks/manager_based/manipulation/deploy/mdp/events.py +++ b/source/isaaclab_tasks/isaaclab_tasks/manager_based/manipulation/deploy/mdp/events.py @@ -342,27 +342,26 @@ def __call__( joint_pos = joint_pos + delta_dof_pos # Wrap arm joint positions to fall within robot's actual joint limits - joint_pos_limits = wp.to_torch(self.robot_asset.data.joint_pos_limits)[env_ids, : self.num_arm_joints, :] + joint_pos_limits = wp.to_torch(self.robot_asset.data.joint_pos_limits)[env_ids, :self.num_arm_joints, :] joint_min = joint_pos_limits[:, :, 0] joint_max = joint_pos_limits[:, :, 1] joint_range = joint_max - joint_min # Wrap only the arm joint positions (not gripper joints) - arm_joint_pos = joint_pos[:, : self.num_arm_joints] + arm_joint_pos = joint_pos[:, :self.num_arm_joints] arm_joint_pos = torch.where( joint_range > 0, joint_min + torch.remainder(arm_joint_pos - joint_min, joint_range), arm_joint_pos, ) - joint_pos[:, : self.num_arm_joints] = arm_joint_pos + joint_pos[:, :self.num_arm_joints] = arm_joint_pos joint_vel = torch.zeros_like(joint_pos) # Write to sim - self.robot_asset.set_joint_position_target_index(target=joint_pos, env_ids=env_ids) - self.robot_asset.set_joint_velocity_target_index(target=joint_vel, env_ids=env_ids) - self.robot_asset.write_joint_position_to_sim_index(position=joint_pos, env_ids=env_ids) - self.robot_asset.write_joint_velocity_to_sim_index(velocity=joint_vel, env_ids=env_ids) + self.robot_asset.set_joint_position_target(joint_pos, env_ids=env_ids) + self.robot_asset.set_joint_velocity_target(joint_vel, env_ids=env_ids) + self.robot_asset.write_joint_state_to_sim(joint_pos, joint_vel, env_ids=env_ids) # Reset joint velocities to zero after IK convergence joint_vel = torch.zeros_like(wp.to_torch(self.robot_asset.data.joint_vel)[env_ids]) @@ -377,9 +376,8 @@ def __call__( hand_grasp_width = self.hand_grasp_width[gear_key] self.gripper_joint_setter_func(joint_pos, [row_idx], self.finger_joints, hand_grasp_width) - self.robot_asset.set_joint_position_target_index(target=joint_pos, joint_ids=self.all_joints, env_ids=env_ids) - self.robot_asset.write_joint_position_to_sim_index(position=joint_pos, env_ids=env_ids) - self.robot_asset.write_joint_velocity_to_sim_index(velocity=joint_vel, env_ids=env_ids) + self.robot_asset.set_joint_position_target(joint_pos, joint_ids=self.all_joints, env_ids=env_ids) + self.robot_asset.write_joint_state_to_sim(joint_pos, joint_vel, env_ids=env_ids) # Set gripper to closed position for row_idx, env_id in enumerate(env_ids.tolist()): @@ -387,7 +385,7 @@ def __call__( hand_close_width = self.hand_close_width[gear_key] self.gripper_joint_setter_func(joint_pos, [row_idx], self.finger_joints, hand_close_width) - self.robot_asset.set_joint_position_target_index(target=joint_pos, joint_ids=self.all_joints, env_ids=env_ids) + self.robot_asset.set_joint_position_target(joint_pos, joint_ids=self.all_joints, env_ids=env_ids) class randomize_gears_and_base_pose(ManagerTermBase): @@ -466,11 +464,10 @@ def __call__( asset_names_to_process = [self.base_asset_name] + self.gear_asset_names for asset_name in asset_names_to_process: asset: RigidObject | Articulation = env.scene[asset_name] - default_root_pose = wp.to_torch(asset.data.default_root_pose)[env_ids].clone() - default_root_vel = wp.to_torch(asset.data.default_root_vel)[env_ids].clone() - positions = default_root_pose[:, 0:3] + env.scene.env_origins[env_ids] + rand_pose_samples[:, 0:3] - orientations = math_utils.quat_mul(default_root_pose[:, 3:7], orientations_delta) - velocities = default_root_vel + rand_vel_samples + root_states = wp.to_torch(asset.data.default_root_state)[env_ids].clone() + positions = root_states[:, 0:3] + env.scene.env_origins[env_ids] + rand_pose_samples[:, 0:3] + orientations = math_utils.quat_mul(root_states[:, 3:7], orientations_delta) + velocities = root_states[:, 7:13] + rand_vel_samples positions_by_asset[asset_name] = positions orientations_by_asset[asset_name] = orientations velocities_by_asset[asset_name] = velocities @@ -500,5 +497,5 @@ def __call__( positions = positions_by_asset[asset_name] orientations = orientations_by_asset[asset_name] velocities = velocities_by_asset[asset_name] - asset.write_root_pose_to_sim_index(root_pose=torch.cat([positions, orientations], dim=-1), env_ids=env_ids) - asset.write_root_velocity_to_sim_index(root_velocity=velocities, env_ids=env_ids) + asset.write_root_pose_to_sim(torch.cat([positions, orientations], dim=-1), env_ids=env_ids) + asset.write_root_velocity_to_sim(velocities, env_ids=env_ids) diff --git a/source/isaaclab_tasks/isaaclab_tasks/manager_based/manipulation/deploy/mdp/rewards.py b/source/isaaclab_tasks/isaaclab_tasks/manager_based/manipulation/deploy/mdp/rewards.py index 560f796c70f..17f27a2f498 100644 --- a/source/isaaclab_tasks/isaaclab_tasks/manager_based/manipulation/deploy/mdp/rewards.py +++ b/source/isaaclab_tasks/isaaclab_tasks/manager_based/manipulation/deploy/mdp/rewards.py @@ -405,10 +405,6 @@ class keypoint_ee_gear_error(ManagerTermBase): using grasp offsets, so that the distance is ~0 when properly holding the gear and increases when the gripper drifts away. - The reward is gated on the EE-gear keypoint distance: it only activates when - the mean keypoint error is below ``ee_gear_threshold``, so the penalty only - applies when the gripper is reasonably close to the gear. - Supports linear weight ramp-up: the returned reward is scaled by a factor that linearly increases from ``weight_ramp_start`` to 1.0 over ``weight_ramp_steps`` env steps, allowing the reward to grow in importance as training progresses. @@ -438,7 +434,6 @@ def __init__(self, cfg: RewardTermCfg, env: ManagerBasedRLEnv): self.weight_ramp_start: float = cfg.params.get("weight_ramp_start", 0.0) self.weight_ramp_steps: int = cfg.params.get("weight_ramp_steps", 1) - self.ee_gear_threshold: float = cfg.params.get("ee_gear_threshold", 0.05) self.gear_type_indices = torch.zeros(env.num_envs, device=env.device, dtype=torch.long) self.env_indices = torch.arange(env.num_envs, device=env.device) @@ -469,7 +464,6 @@ def __call__( add_cube_center_kp: bool = True, weight_ramp_start: float = 0.0, weight_ramp_steps: int = 1, - ee_gear_threshold: float = 0.05, ) -> torch.Tensor: if self.eef_idx is None: return torch.zeros(env.num_envs, device=env.device) @@ -500,7 +494,6 @@ def __call__( gear_pos = all_gear_pos[self.env_indices, self.gear_type_indices] gear_quat = all_gear_quat[self.env_indices, self.gear_type_indices] - # -- EE-gear grasp quality reward -- gear_quat_grasp = quat_mul(gear_quat, self.grasp_rot_offset_tensor) grasp_offsets = self.gear_grasp_offsets_stacked[self.gear_type_indices] gear_grasp_pos = gear_pos + quat_apply(gear_quat_grasp, grasp_offsets) @@ -515,31 +508,26 @@ def __call__( mean_kp_error = keypoint_dist_sep.mean(-1) - # Gate on EE-gear distance: only penalize when gripper is close to gear - is_close = (mean_kp_error > self.ee_gear_threshold).float() - weight_scale = self._get_weight_scale(env) - scaled_reward = mean_kp_error * weight_scale * is_close + scaled_reward = mean_kp_error * weight_scale mean_error_scalar = mean_kp_error.mean().item() - pct_close = is_close.mean().item() if not hasattr(env, "extras"): env.extras = {} if "log" not in env.extras: env.extras["log"] = {} env.extras["log"]["ee_gear_kp_error/mean_keypoint_dist"] = mean_error_scalar - env.extras["log"]["ee_gear_kp_error/pct_envs_close"] = pct_close env.extras["log"]["ee_gear_kp_error/weight_scale"] = weight_scale self._step_count += 1 import carb - + carb.log_info( f"[ee_gear_kp_error] step={self._step_count}" f" | mean_kp_error={mean_error_scalar:.5f}" - f" | pct_close={pct_close:.3f}" f" | weight_scale={weight_scale:.4f}" + f" | reward(unweighted)={-mean_error_scalar:.5f}" ) return scaled_reward @@ -552,10 +540,6 @@ class keypoint_ee_gear_error_exp(ManagerTermBase): using grasp offsets, so that the reward is high (~1) when properly holding the gear and drops sharply when the gripper drifts away. - The reward is gated on the EE-gear keypoint distance: it only activates when - the mean keypoint error is below ``ee_gear_threshold``, so the reward only - applies when the gripper is reasonably close to the gear. - Supports linear weight ramp-up: the returned reward is scaled by a factor that linearly increases from ``weight_ramp_start`` to 1.0 over ``weight_ramp_steps`` env steps, allowing the reward to grow in importance as training progresses. @@ -585,7 +569,6 @@ def __init__(self, cfg: RewardTermCfg, env: ManagerBasedRLEnv): self.weight_ramp_start: float = cfg.params.get("weight_ramp_start", 0.0) self.weight_ramp_steps: int = cfg.params.get("weight_ramp_steps", 1) - self.ee_gear_threshold: float = cfg.params.get("ee_gear_threshold", 0.05) self.gear_type_indices = torch.zeros(env.num_envs, device=env.device, dtype=torch.long) self.env_indices = torch.arange(env.num_envs, device=env.device) @@ -618,7 +601,6 @@ def __call__( add_cube_center_kp: bool = True, weight_ramp_start: float = 0.0, weight_ramp_steps: int = 1, - ee_gear_threshold: float = 0.05, ) -> torch.Tensor: if self.eef_idx is None: return torch.zeros(env.num_envs, device=env.device) @@ -649,7 +631,6 @@ def __call__( gear_pos = all_gear_pos[self.env_indices, self.gear_type_indices] gear_quat = all_gear_quat[self.env_indices, self.gear_type_indices] - # -- EE-gear grasp quality reward -- gear_quat_grasp = quat_mul(gear_quat, self.grasp_rot_offset_tensor) grasp_offsets = self.gear_grasp_offsets_stacked[self.gear_type_indices] gear_grasp_pos = gear_pos + quat_apply(gear_quat_grasp, grasp_offsets) @@ -664,9 +645,6 @@ def __call__( mean_kp_error = keypoint_dist_sep.mean(-1) - # Gate on EE-gear distance: only reward when gripper is close to gear - is_close = (mean_kp_error > self.ee_gear_threshold).float() - keypoint_reward_exp = torch.zeros_like(keypoint_dist_sep[:, 0]) if kp_use_sum_of_exps: for coeff in kp_exp_coeffs: @@ -675,17 +653,16 @@ def __call__( 1.0 / (torch.exp(a * keypoint_dist_sep) + b + torch.exp(-a * keypoint_dist_sep)) ).mean(-1) else: - kp_dist_mean = keypoint_dist_sep.mean(-1) + keypoint_dist = keypoint_dist_sep.mean(-1) for coeff in kp_exp_coeffs: a, b = coeff - keypoint_reward_exp += 1.0 / (torch.exp(a * kp_dist_mean) + b + torch.exp(-a * kp_dist_mean)) + keypoint_reward_exp += 1.0 / (torch.exp(a * keypoint_dist) + b + torch.exp(-a * keypoint_dist)) weight_scale = self._get_weight_scale(env) - scaled_reward = keypoint_reward_exp * weight_scale * is_close + scaled_reward = keypoint_reward_exp * weight_scale mean_error_scalar = mean_kp_error.mean().item() mean_reward_scalar = keypoint_reward_exp.mean().item() - pct_close = is_close.mean().item() if not hasattr(env, "extras"): env.extras = {} @@ -693,7 +670,6 @@ def __call__( env.extras["log"] = {} env.extras["log"]["ee_gear_kp_error_exp/mean_keypoint_dist"] = mean_error_scalar env.extras["log"]["ee_gear_kp_error_exp/mean_exp_reward"] = mean_reward_scalar - env.extras["log"]["ee_gear_kp_error_exp/pct_envs_close"] = pct_close env.extras["log"]["ee_gear_kp_error_exp/weight_scale"] = weight_scale self._step_count += 1 @@ -702,7 +678,6 @@ def __call__( carb.log_info( f"[ee_gear_kp_error_exp] step={self._step_count}" f" | mean_kp_error={mean_error_scalar:.5f}" - f" | pct_close={pct_close:.3f}" f" | weight_scale={weight_scale:.4f}" f" | mean_exp_reward={mean_reward_scalar:.5f}" ) diff --git a/source/isaaclab_tasks/isaaclab_tasks/manager_based/manipulation/deploy/reach/config/rizon_4s/joint_pos_env_cfg.py b/source/isaaclab_tasks/isaaclab_tasks/manager_based/manipulation/deploy/reach/config/rizon_4s/joint_pos_env_cfg.py index d453af36e4e..b065cae4af1 100644 --- a/source/isaaclab_tasks/isaaclab_tasks/manager_based/manipulation/deploy/reach/config/rizon_4s/joint_pos_env_cfg.py +++ b/source/isaaclab_tasks/isaaclab_tasks/manager_based/manipulation/deploy/reach/config/rizon_4s/joint_pos_env_cfg.py @@ -105,3 +105,23 @@ def __post_init__(self): self.scene.env_spacing = 2.5 # disable randomization for play self.observations.policy.enable_corruption = False + + # Set custom fixed target pose (position in meters, angles in radians) + # Modify these values to set your desired target pose + custom_x = 0.5 + custom_y = 0.0 + custom_z = 0.4 + custom_roll = math.pi # end-effector facing down + custom_pitch = 0.0 + custom_yaw = 0.0 + + # Disable resampling by setting a very long resampling time + self.commands.ee_pose.resampling_time_range = (1e9, 1e9) + + # Set ranges to same min/max for fixed pose + self.commands.ee_pose.ranges.pos_x = (custom_x, custom_x) + self.commands.ee_pose.ranges.pos_y = (custom_y, custom_y) + self.commands.ee_pose.ranges.pos_z = (custom_z, custom_z) + self.commands.ee_pose.ranges.roll = (custom_roll, custom_roll) + self.commands.ee_pose.ranges.pitch = (custom_pitch, custom_pitch) + self.commands.ee_pose.ranges.yaw = (custom_yaw, custom_yaw) diff --git a/source/isaaclab_tasks/isaaclab_tasks/manager_based/manipulation/deploy/reach/config/rizon_4s/ros_inference_env_cfg.py b/source/isaaclab_tasks/isaaclab_tasks/manager_based/manipulation/deploy/reach/config/rizon_4s/ros_inference_env_cfg.py index 5b55f41e409..8fbb211112f 100644 --- a/source/isaaclab_tasks/isaaclab_tasks/manager_based/manipulation/deploy/reach/config/rizon_4s/ros_inference_env_cfg.py +++ b/source/isaaclab_tasks/isaaclab_tasks/manager_based/manipulation/deploy/reach/config/rizon_4s/ros_inference_env_cfg.py @@ -46,8 +46,3 @@ def __post_init__(self): self.joint_action_scale, self.joint_action_scale, ] - - # Extract initial joint positions from robot configuration - self.initial_joint_pos = [ - self.scene.robot.init_state.joint_pos[joint_name] for joint_name in self.arm_joint_names - ] diff --git a/source/isaaclab_tasks/isaaclab_tasks/manager_based/manipulation/deploy/reach/reach_env_cfg.py b/source/isaaclab_tasks/isaaclab_tasks/manager_based/manipulation/deploy/reach/reach_env_cfg.py index 018ef3a49c9..90b65a0f96c 100644 --- a/source/isaaclab_tasks/isaaclab_tasks/manager_based/manipulation/deploy/reach/reach_env_cfg.py +++ b/source/isaaclab_tasks/isaaclab_tasks/manager_based/manipulation/deploy/reach/reach_env_cfg.py @@ -18,7 +18,7 @@ from isaaclab.scene import InteractiveSceneCfg from isaaclab.utils import configclass from isaaclab.utils.assets import ISAAC_NUCLEUS_DIR -from isaaclab.utils.noise import UniformNoiseCfg as Unoise +from isaaclab.utils.noise import AdditiveUniformNoiseCfg as Unoise import isaaclab_tasks.manager_based.manipulation.deploy.mdp as mdp From 6c7338e07f0777c32bf4aafe1a9db003c47b04a7 Mon Sep 17 00:00:00 2001 From: Ashwin Varghese Kuruttukulam Date: Wed, 8 Apr 2026 13:35:42 -0700 Subject: [PATCH 5/7] add updated pose --- .../config/rizon_4s/ros_inference_env_cfg.py | 71 +++++++++++-------- 1 file changed, 41 insertions(+), 30 deletions(-) diff --git a/source/isaaclab_tasks/isaaclab_tasks/manager_based/manipulation/deploy/gear_assembly/config/rizon_4s/ros_inference_env_cfg.py b/source/isaaclab_tasks/isaaclab_tasks/manager_based/manipulation/deploy/gear_assembly/config/rizon_4s/ros_inference_env_cfg.py index 6ff7f2cb3d7..fe85b97cb36 100644 --- a/source/isaaclab_tasks/isaaclab_tasks/manager_based/manipulation/deploy/gear_assembly/config/rizon_4s/ros_inference_env_cfg.py +++ b/source/isaaclab_tasks/isaaclab_tasks/manager_based/manipulation/deploy/gear_assembly/config/rizon_4s/ros_inference_env_cfg.py @@ -13,13 +13,20 @@ @configclass class Rizon4sGearAssemblyROSInferenceEnvCfg(Rizon4sGearAssemblyEnvCfg): - """Configuration for ROS inference with Flexiv Rizon 4s and Grav gripper. + """ROS / Isaac Manipulator inference fields plus deployment alignment for NVIDIA Hubble Lab. This configuration: - Exposes variables needed for ROS inference - Overrides robot and gear initial poses for fixed/deterministic setup + - Aligns robot mounting pose with the Flexiv Rizon 4s installation at NVIDIA Hubble Lab """ + # Single source for base + all gear rigid bodies (Rizon: closer to robot, centered) + ros_inference_factory_gears_init_state: RigidObjectCfg.InitialStateCfg = RigidObjectCfg.InitialStateCfg( + pos=(0.75, 0.0, -0.2), + rot=(0.0, 0.0, 0.70711, -0.70711), + ) + def __post_init__(self): # post init of parent super().__post_init__() @@ -46,35 +53,39 @@ def __post_init__(self): # Dynamically generate action_scale_joint_space based on action_space self.action_scale_joint_space = [self.joint_action_scale] * self.action_space - # Override robot initial pose for ROS inference (fixed pose, no randomization) - # Joint positions and pos are inherited from parent, only override rotation to be deterministic - self.scene.robot.init_state.rot = (0.0, 0.0, 0.0, 1.0) # Identity quaternion (x, y, z, w) - - # Override gear base initial pose (fixed pose for ROS inference) - # Position configured for Rizon 4s workspace - self.scene.factory_gear_base.init_state = RigidObjectCfg.InitialStateCfg( - pos=(0.481, -0.073, -0.005), - rot=(0.0, 0.0, 0.70711, -0.70711), - ) - - # Override gear initial poses (fixed poses for ROS inference) - # Small gear - self.scene.factory_gear_small.init_state = RigidObjectCfg.InitialStateCfg( - pos=(0.481, -0.073, -0.005), - rot=(0.0, 0.0, 0.70711, -0.70711), - ) - - # Medium gear - self.scene.factory_gear_medium.init_state = RigidObjectCfg.InitialStateCfg( - pos=(0.481, -0.073, -0.005), - rot=(0.0, 0.0, 0.70711, -0.70711), - ) - - # Large gear - self.scene.factory_gear_large.init_state = RigidObjectCfg.InitialStateCfg( - pos=(0.481, -0.073, -0.005), - rot=(0.0, 0.0, 0.70711, -0.70711), - ) + # --- NVIDIA Hubble Lab: Flexiv Rizon 4s mount --- + # Remove vertical mount stand since Hubble deployment does not use the sim stand asset + self.scene.stand = None + + # Lab home joint pose (radians); aligns sim defaults / reset with the physical stand + self.scene.robot.init_state.joint_pos = { + "joint1": math.radians(-90.0), + "joint2": math.radians(90.0), + "joint3": 0.0, + "joint4": math.radians(90.0), + "joint5": 0.0, + "joint6": 0.0, + "joint7": 0.0, + } + + # Orientation of robot is based on the Flexiv Rizon 4s mount in the Hubble Lab + self.scene.robot.init_state.pos = (0.0, 0.0, 0.0) + self.scene.robot.init_state.rot = (0.5, 0.5, 0.5, 0.5) + + # Override gear base + all gears from one template (fixed pose for ROS inference) + _g = self.ros_inference_factory_gears_init_state + for _name in ( + "factory_gear_base", + "factory_gear_small", + "factory_gear_medium", + "factory_gear_large", + ): + getattr(self.scene, _name).init_state = RigidObjectCfg.InitialStateCfg( + pos=_g.pos, + rot=_g.rot, + lin_vel=_g.lin_vel, + ang_vel=_g.ang_vel, + ) # Fixed asset parameters for ROS inference - derived from configuration # These parameters are used by the ROS inference node to validate the environment setup From 3c2b9b7e0448a34f4f8a1a17c5cbe6f77b960eb3 Mon Sep 17 00:00:00 2001 From: Ashwin Varghese Kuruttukulam Date: Wed, 8 Apr 2026 13:37:31 -0700 Subject: [PATCH 6/7] update the env names --- .../deploy/gear_assembly/config/rizon_4s/__init__.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/source/isaaclab_tasks/isaaclab_tasks/manager_based/manipulation/deploy/gear_assembly/config/rizon_4s/__init__.py b/source/isaaclab_tasks/isaaclab_tasks/manager_based/manipulation/deploy/gear_assembly/config/rizon_4s/__init__.py index 328a5ca09d5..8ed735d68b9 100644 --- a/source/isaaclab_tasks/isaaclab_tasks/manager_based/manipulation/deploy/gear_assembly/config/rizon_4s/__init__.py +++ b/source/isaaclab_tasks/isaaclab_tasks/manager_based/manipulation/deploy/gear_assembly/config/rizon_4s/__init__.py @@ -14,7 +14,7 @@ # Flexiv Rizon 4s gym.register( - id="Isaac-Deploy-GearAssembly-Rizon4s-v0", + id="Isaac-Deploy-GearAssembly-Rizon4s-Grav-v0", entry_point="isaaclab.envs:ManagerBasedRLEnv", disable_env_checker=True, kwargs={ @@ -24,7 +24,7 @@ ) gym.register( - id="Isaac-Deploy-GearAssembly-Rizon4s-Play-v0", + id="Isaac-Deploy-GearAssembly-Rizon4s-Grav-Play-v0", entry_point="isaaclab.envs:ManagerBasedRLEnv", disable_env_checker=True, kwargs={ @@ -34,7 +34,7 @@ # Flexiv Rizon 4s - ROS Inference gym.register( - id="Isaac-Deploy-GearAssembly-Rizon4s-ROS-Inference-v0", + id="Isaac-Deploy-GearAssembly-Rizon4s-Grav-ROS-Inference-v0", entry_point="isaaclab.envs:ManagerBasedRLEnv", disable_env_checker=True, kwargs={ From 068ee10f4264e6041e52900b9f204c831160ddc6 Mon Sep 17 00:00:00 2001 From: Ashwin Varghese Kuruttukulam Date: Tue, 14 Apr 2026 15:59:51 -0700 Subject: [PATCH 7/7] update gear base posiiton based on new srand --- .../gear_assembly/config/rizon_4s/ros_inference_env_cfg.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/isaaclab_tasks/isaaclab_tasks/manager_based/manipulation/deploy/gear_assembly/config/rizon_4s/ros_inference_env_cfg.py b/source/isaaclab_tasks/isaaclab_tasks/manager_based/manipulation/deploy/gear_assembly/config/rizon_4s/ros_inference_env_cfg.py index fe85b97cb36..d102539ee9b 100644 --- a/source/isaaclab_tasks/isaaclab_tasks/manager_based/manipulation/deploy/gear_assembly/config/rizon_4s/ros_inference_env_cfg.py +++ b/source/isaaclab_tasks/isaaclab_tasks/manager_based/manipulation/deploy/gear_assembly/config/rizon_4s/ros_inference_env_cfg.py @@ -23,7 +23,7 @@ class Rizon4sGearAssemblyROSInferenceEnvCfg(Rizon4sGearAssemblyEnvCfg): # Single source for base + all gear rigid bodies (Rizon: closer to robot, centered) ros_inference_factory_gears_init_state: RigidObjectCfg.InitialStateCfg = RigidObjectCfg.InitialStateCfg( - pos=(0.75, 0.0, -0.2), + pos=(0.927, 0.046, -0.109), rot=(0.0, 0.0, 0.70711, -0.70711), )