Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
177 commits
Select commit Hold shift + click to select a range
f2fb464
initial cleanup of single gear insertion
ashwinvkNV Sep 16, 2025
0fc0098
revert rsl_rl change
ashwinvkNV Sep 16, 2025
3cda66b
fixed_sigma=False,
ashwinvkNV Sep 16, 2025
f5a0c24
cleanup 2
ashwinvkNV Sep 16, 2025
b175571
remove some cleanup
ashwinvkNV Sep 17, 2025
1a2858a
use omniverse assets
ashwinvkNV Sep 17, 2025
037c30b
use UR10e_2f140_CFG
ashwinvkNV Sep 17, 2025
86fc486
use new usd path
ashwinvkNV Sep 18, 2025
c4d8324
revert rls_rl changes
ashwinvkNV Sep 29, 2025
f805083
enable state_dependent_std
ashwinvkNV Sep 29, 2025
b5ae58f
add support for latest rsl_rl and move to custom usd
ashwinvkNV Oct 23, 2025
65618b1
Merge branch 'main' into ashwinvk/deploy_gear_insertion_env
ashwinvkNV Oct 23, 2025
fe5c1d1
use default usd
ashwinvkNV Oct 28, 2025
c6869ec
reduce joint_action_scale to 0.0025
ashwinvkNV Oct 28, 2025
084f94f
set velocity_limit_sim
ashwinvkNV Oct 28, 2025
568c216
revert to cutsom usd
ashwinvkNV Oct 28, 2025
777eefe
use default usd
ashwinvkNV Oct 28, 2025
35f7aa3
reduce joint_action_scale = 0.0025
ashwinvkNV Oct 28, 2025
f73cb6a
self.joint_action_scale = 0.025 custom usd
ashwinvkNV Oct 28, 2025
be72937
update toe use default usd with instancable
ashwinvkNV Oct 28, 2025
7ced384
Merge branch 'main' into ashwinvk/deploy_gear_insertion_env
ashwinvkNV Oct 28, 2025
3078d59
use deafult usd
ashwinvkNV Oct 28, 2025
0dc3d87
reduce self.joint_action_scale = 0.01
ashwinvkNV Oct 29, 2025
f1080d6
velocity_limit_sim=10000.0 self.joint_action_scale = 0.025
ashwinvkNV Oct 29, 2025
e4f68b9
self.joint_action_scale = 0.01
ashwinvkNV Oct 29, 2025
9170a9d
effort_limit_sim=2.0
ashwinvkNV Oct 29, 2025
13e71b9
effort_limit_sim=10.0
ashwinvkNV Oct 29, 2025
9254915
effort_limit_sim=2.0, velocity_limit_sim=None
ashwinvkNV Oct 29, 2025
fdb7aac
revert to last working version
ashwinvkNV Oct 29, 2025
6bb2b21
add custom usd
ashwinvkNV Oct 29, 2025
f95fa42
deafult usd and default finger params
ashwinvkNV Oct 29, 2025
ff9bc9c
stiffness=1.0, damping=0.005
ashwinvkNV Oct 29, 2025
407f813
stiffness=10.0, damping=0.05,
ashwinvkNV Oct 29, 2025
6306c12
stiffness=11.25, damping=0.1,
ashwinvkNV Oct 29, 2025
5d84b31
stiffness=2.0, damping=0.01,
ashwinvkNV Oct 30, 2025
7cde307
stiffness=4.0, damping=0.02,
ashwinvkNV Oct 30, 2025
4c8aca6
stiffness=8.0, damping=0.04,
ashwinvkNV Oct 30, 2025
fad296e
stiffness=2.0, damping=0.01,
ashwinvkNV Oct 30, 2025
3a0f0e5
cleanup robot config
ashwinvkNV Oct 30, 2025
a6c0636
add other gears
ashwinvkNV Oct 30, 2025
33a777b
change non default init pose
ashwinvkNV Oct 30, 2025
00225c8
"gear_types": ["gear_small"]
ashwinvkNV Oct 30, 2025
f6c74d3
self.hand_grasp_pos = {"gear_small": 0.66
ashwinvkNV Oct 30, 2025
f9724e0
self.hand_grasp_pos = {"gear_small": 0.65
ashwinvkNV Oct 30, 2025
f0d0c80
self.hand_grasp_pos = {"gear_small": 0.63
ashwinvkNV Oct 30, 2025
ab76cba
self.hand_grasp_pos = {"gear_small": 0.61
ashwinvkNV Oct 30, 2025
a9e04fc
"gear_types": ["gear_large"] "gear_large": 0.52
ashwinvkNV Oct 30, 2025
28b947e
"gear_large": 0.51
ashwinvkNV Oct 30, 2025
e9c3672
"gear_large": 0.5
ashwinvkNV Oct 30, 2025
b50125a
"gear_large": 0.48
ashwinvkNV Oct 30, 2025
a49262b
"gear_large": 0.47
ashwinvkNV Oct 30, 2025
3d7d7c5
episode_length_s = 6.66 "gear_small": 0.65
ashwinvkNV Oct 31, 2025
b68a8e6
"gear_small": 0.63
ashwinvkNV Oct 31, 2025
916d6f6
add all gears
ashwinvkNV Oct 31, 2025
25524ca
small gear only pos_randomization_range 0.003
ashwinvkNV Oct 31, 2025
fa3790b
"gear_small": 0.65
ashwinvkNV Oct 31, 2025
6d6b5c9
"gear_types": ["gear_medium"]
ashwinvkNV Oct 31, 2025
ee669f2
add critic
ashwinvkNV Oct 31, 2025
cbc3e0c
use new gear assets. without critic. only medium
ashwinvkNV Oct 31, 2025
ff71de6
make the small gear slide
ashwinvkNV Oct 31, 2025
b41a359
make finger stiff
ashwinvkNV Oct 31, 2025
f366877
add instaceble fingers
ashwinvkNV Oct 31, 2025
c00ee05
revert to best small gear insertion
ashwinvkNV Nov 1, 2025
bd2cf32
add critic
ashwinvkNV Nov 1, 2025
11cd1c8
remove critic and reduce noise
ashwinvkNV Nov 1, 2025
bb6edcc
small gear reduced noise
ashwinvkNV Nov 1, 2025
7902463
increaes noise
ashwinvkNV Nov 1, 2025
83878ed
add critic
ashwinvkNV Nov 1, 2025
e3c9edc
reduce noise with critic
ashwinvkNV Nov 1, 2025
b142f4c
remove other gears and remove critic and revert noise
ashwinvkNV Nov 1, 2025
fbf76a9
add back all gears and train only medium gear
ashwinvkNV Nov 1, 2025
a6a9163
only large gear
ashwinvkNV Nov 1, 2025
3fb1f94
large and medium gear
ashwinvkNV Nov 1, 2025
4f2e1a4
medium and small gear
ashwinvkNV Nov 1, 2025
8252cad
all 3 gears
ashwinvkNV Nov 1, 2025
153992f
"gear_medium", "gear_large". "gear_large": 0.48
ashwinvkNV Nov 1, 2025
f70bec8
revert to only medium gear
ashwinvkNV Nov 3, 2025
a73bef9
remove offset from obs
ashwinvkNV Nov 3, 2025
5743c4f
large gear with offset
ashwinvkNV Nov 3, 2025
93138f3
without offset
ashwinvkNV Nov 3, 2025
0023c91
add both gears
ashwinvkNV Nov 3, 2025
c295927
medium gear with decimation 4
ashwinvkNV Nov 3, 2025
5f03a00
medium gear with 0.003 obs noise
ashwinvkNV Nov 3, 2025
1e961e7
large gear wiht 0...03 obs noise
ashwinvkNV Nov 3, 2025
84a7813
large and medium with lower noise
ashwinvkNV Nov 3, 2025
3e8faca
episode_length_s = 6.66 decimation = 4 medium gear
ashwinvkNV Nov 3, 2025
bac12f4
decimation = 2 episode_length_s = 6.66
ashwinvkNV Nov 3, 2025
a65acb8
episode_length_s = 2 decimation = 4
ashwinvkNV Nov 3, 2025
3d6fc8c
decimation = 2 episode_length_s = 2
ashwinvkNV Nov 3, 2025
e41f96a
episode_length_s = 1 decimation = 2
ashwinvkNV Nov 3, 2025
3bdd9a8
fix initalization bug
ashwinvkNV Nov 3, 2025
abe03f0
episode_length_s = 6.66 decimation = 4
ashwinvkNV Nov 3, 2025
c837ce5
gear_large only
ashwinvkNV Nov 3, 2025
e70740d
"gear_medium", "gear_large"
ashwinvkNV Nov 3, 2025
515fe6c
episode_length_s = 6.66 decimation = 2
ashwinvkNV Nov 4, 2025
386e126
episode_length_s = 3.33
ashwinvkNV Nov 4, 2025
b0c445f
add all gears
ashwinvkNV Nov 4, 2025
8b6acc3
episode_length_s = 6.66
ashwinvkNV Nov 4, 2025
46c8dee
episode_length_s = 2
ashwinvkNV Nov 4, 2025
d971d64
add critic without gear pose observaiton
ashwinvkNV Nov 4, 2025
36000ae
add gear pose obs
ashwinvkNV Nov 4, 2025
b7dd644
remove critic and add new gear usds
ashwinvkNV Nov 4, 2025
c12484a
add critic without gear pose
ashwinvkNV Nov 4, 2025
8d91fbc
add gear pose
ashwinvkNV Nov 4, 2025
6ff1760
episode_length_s = 3.33
ashwinvkNV Nov 4, 2025
c8e4903
add bugfix for gear_pos_w
ashwinvkNV Nov 4, 2025
1d35fd9
remove gear_pos
ashwinvkNV Nov 4, 2025
f4fbb2f
remove critic
ashwinvkNV Nov 4, 2025
357b4f1
add back critic
ashwinvkNV Nov 4, 2025
a7286f4
add high friction on finger
ashwinvkNV Nov 4, 2025
96fe463
cleanup 1
ashwinvkNV Nov 4, 2025
2e6ebb6
"static_friction_range": (0.75, 0.75)" dynamic_friction_range": (0.75…
ashwinvkNV Nov 4, 2025
960e7f8
"static_friction_range": (1.0, 1.0),
ashwinvkNV Nov 4, 2025
231e2e1
"static_friction_range": (2.0, 2.0),
ashwinvkNV Nov 4, 2025
0d377f7
"static_friction_range": (4.0
ashwinvkNV Nov 4, 2025
2187d20
"static_friction_range": (8.0
ashwinvkNV Nov 4, 2025
1e76974
"static_friction_range": (16.0
ashwinvkNV Nov 4, 2025
8cae1ab
"static_friction_range": (0.5, 0.5),"dynamic_friction_range": (0.2, 0…
ashwinvkNV Nov 5, 2025
a71a51b
"static_friction_range": (0.3, 0.3),
ashwinvkNV Nov 5, 2025
fda40ca
"static_friction_range": (0.1, 0.1),
ashwinvkNV Nov 5, 2025
8eb1983
finger "static_friction_range": (2.0, 2.0),
ashwinvkNV Nov 5, 2025
e1e0b2d
"static_friction_range": (0.5, 0.5),
ashwinvkNV Nov 5, 2025
1d754c3
"static_friction_range": (0.3, 0.3),
ashwinvkNV Nov 5, 2025
0a3a00b
"static_friction_range": (0.1, 0.1),
ashwinvkNV Nov 5, 2025
3c5151e
revert to 2e6ebb66e55df37c4194d620a9003ec83eecf0e0
ashwinvkNV Nov 5, 2025
ce1c7d1
remove offsets
ashwinvkNV Nov 5, 2025
eea9b20
fix init location
ashwinvkNV Nov 6, 2025
81341bd
update init joit pos
ashwinvkNV Nov 6, 2025
a125fee
"static_friction_range": (0.1, 0.1),
ashwinvkNV Nov 6, 2025
ea5aeb5
finger "static_friction_range": (2.0, 2.0),
ashwinvkNV Nov 6, 2025
8e6e3dd
finger "static_friction_range": (4.0, 4.0),
ashwinvkNV Nov 6, 2025
5682281
revert to ce1c7d1db7056cdcca1a1cb0875647b3b10aafa8
ashwinvkNV Nov 6, 2025
09037ea
use new assets
ashwinvkNV Nov 6, 2025
b17c925
update pose and orientation
ashwinvkNV Nov 6, 2025
f53524e
episode_length_s = 6.66
ashwinvkNV Nov 7, 2025
a462a24
episode_length_s = 6.66 decimation = 4
ashwinvkNV Nov 7, 2025
235fc3e
remove commented code
ashwinvkNV Nov 7, 2025
9208504
move to new assets
ashwinvkNV Nov 7, 2025
ffd1e30
remove commented code
ashwinvkNV Nov 7, 2025
f340e99
robot solver_position_iteration_count=64
ashwinvkNV Nov 7, 2025
21f6e25
solver_position_iteration_count=8
ashwinvkNV Nov 7, 2025
1f88e07
pos_randomization_range "y": [-0.005, 0.005]
ashwinvkNV Nov 7, 2025
2b382e7
cleanupa and revert solver iteration
ashwinvkNV Nov 7, 2025
a77c496
add out of gripper termination
ashwinvkNV Nov 7, 2025
b8b4d91
solver_position_iteration_count=128
ashwinvkNV Nov 7, 2025
1b7dfd0
solver_position_iteration_count=64
ashwinvkNV Nov 7, 2025
860da54
remove gripper_finger changes
ashwinvkNV Nov 7, 2025
018b404
revert to b8b4d910d9c7f402022b0d9ec0a648dfe43b8a06
ashwinvkNV Nov 10, 2025
541e44c
add observation optimizations
ashwinvkNV Nov 10, 2025
0a1c283
revert observations and only change rewards
ashwinvkNV Nov 10, 2025
9ca314f
optimize events and not rewards
ashwinvkNV Nov 10, 2025
1323fe6
revert evetns and only opti ize terminations
ashwinvkNV Nov 10, 2025
d3ca951
add support for 2f-85
ashwinvkNV Nov 12, 2025
72a8de0
commit events
ashwinvkNV Nov 12, 2025
0bb267e
solver_position_iteration_count=4,
ashwinvkNV Nov 12, 2025
4d54011
udpate hand_close_width
ashwinvkNV Nov 12, 2025
c8abd75
gear assets solver_position_iteration_count=32
ashwinvkNV Nov 12, 2025
7bfc3bb
contact_offset=0.02
ashwinvkNV Nov 12, 2025
954cb4f
gpu_collision_stack_size=2**26, # Important to prevent collisionStac…
ashwinvkNV Nov 12, 2025
7663d21
revert PhysxCfg
ashwinvkNV Nov 13, 2025
f167406
num_steps_per_env = 256
ashwinvkNV Nov 13, 2025
24d7dbe
num_steps_per_env = 128
ashwinvkNV Nov 13, 2025
3bc071b
num_steps_per_env = 64
ashwinvkNV Nov 13, 2025
212fa4c
num_steps_per_env = 256
ashwinvkNV Nov 14, 2025
8e503ce
only train "gear_types": ["gear_small", "gear_medium"]
ashwinvkNV Nov 14, 2025
871fc17
update 2f85 params
ashwinvkNV Nov 14, 2025
1d0b300
only gear_large
ashwinvkNV Nov 14, 2025
8684545
train all gears
ashwinvkNV Nov 14, 2025
83b217d
add docs
ashwinvkNV Nov 17, 2025
f6abdb1
add images
ashwinvkNV Nov 17, 2025
55bbe18
cleanup
ashwinvkNV Nov 17, 2025
a73be8e
increase friction "static_friction_range": (1.5, 1.5)
ashwinvkNV Nov 17, 2025
563afcc
a gear orientation termination
ashwinvkNV Nov 17, 2025
2c000b3
num_steps_per_env = 512
ashwinvkNV Nov 17, 2025
25b50be
Merge branch 'main' into ashwinvk/deploy_gear_insertion_env
ashwinvkNV Nov 18, 2025
c1ea035
vectorize the code
ashwinvkNV Nov 18, 2025
ebf01a7
cleanup for PR
ashwinvkNV Nov 19, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
4 changes: 2 additions & 2 deletions docs/source/refs/troubleshooting.rst
Original file line number Diff line number Diff line change
Expand Up @@ -75,8 +75,8 @@ For instance, to run a standalone script with verbose logging, you can use the f
# Run the standalone script with info logging
./isaaclab.sh -p scripts/tutorials/00_sim/create_empty.py --headless --info

For more fine-grained control, you can modify the logging channels through the ``logger`` module.
For more information, please refer to its `documentation <https://docs.python.org/3/library/logging.html>`__.
For more fine-grained control, you can modify the logging channels through the ``omni.log`` module.
For more information, please refer to its `documentation <https://docs.omniverse.nvidia.com/kit/docs/carbonite/latest/docs/omni.log/Logging.html>`__.


Observing long load times at the start of the simulation
Expand Down
1 change: 1 addition & 0 deletions docs/source/setup/walkthrough/index.rst
Original file line number Diff line number Diff line change
Expand Up @@ -22,3 +22,4 @@ represents a different stage of modifying the default template project to achiev
technical_env_design
training_jetbot_gt
training_jetbot_reward_exploration
sim_to_real_training
495 changes: 495 additions & 0 deletions docs/source/setup/walkthrough/sim_to_real_training.rst

Large diffs are not rendered by default.

6 changes: 6 additions & 0 deletions source/isaaclab/isaaclab/envs/mdp/rewards.py
Original file line number Diff line number Diff line change
Expand Up @@ -241,11 +241,17 @@ def applied_torque_limits(env: ManagerBasedRLEnv, asset_cfg: SceneEntityCfg = Sc
)
return torch.sum(out_of_limits, dim=1)

def action_rate(env: ManagerBasedRLEnv) -> torch.Tensor:
"""Penalize the rate of change of the actions using L2 norm."""
return torch.norm(env.action_manager.action - env.action_manager.prev_action, p=2, dim=-1)

def action_rate_l2(env: ManagerBasedRLEnv) -> torch.Tensor:
"""Penalize the rate of change of the actions using L2 squared kernel."""
return torch.sum(torch.square(env.action_manager.action - env.action_manager.prev_action), dim=1)

def action(env: ManagerBasedRLEnv) -> torch.Tensor:
"""Penalize the actions using L2 squared kernel (summed for each environment)."""
return torch.sum(env.action_manager.action**2, dim=-1)

def action_l2(env: ManagerBasedRLEnv) -> torch.Tensor:
"""Penalize the actions using L2 squared kernel."""
Expand Down
4 changes: 2 additions & 2 deletions source/isaaclab/isaaclab/utils/noise/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -26,8 +26,8 @@

"""
from .noise_cfg import NoiseCfg # noqa: F401
from .noise_cfg import ConstantNoiseCfg, GaussianNoiseCfg, NoiseModelCfg, NoiseModelWithAdditiveBiasCfg, UniformNoiseCfg
from .noise_model import NoiseModel, NoiseModelWithAdditiveBias, constant_noise, gaussian_noise, uniform_noise
from .noise_cfg import ConstantNoiseCfg, GaussianNoiseCfg, NoiseModelCfg, NoiseModelWithAdditiveBiasCfg, UniformNoiseCfg, ResetSampledNoiseModelCfg
from .noise_model import NoiseModel, NoiseModelWithAdditiveBias, ResetSampledNoiseModel, constant_noise, gaussian_noise, uniform_noise

# Backward compatibility
ConstantBiasNoiseCfg = ConstantNoiseCfg
Expand Down
12 changes: 12 additions & 0 deletions source/isaaclab/isaaclab/utils/noise/noise_cfg.py
Original file line number Diff line number Diff line change
Expand Up @@ -109,3 +109,15 @@ class NoiseModelWithAdditiveBiasCfg(NoiseModelCfg):

Defaults to True.
"""

@configclass
class ResetSampledNoiseModelCfg(NoiseModelCfg):
"""Configuration for a noise model that samples noise ONLY during reset."""

class_type: type = noise_model.ResetSampledNoiseModel

noise_cfg: NoiseCfg = MISSING
"""The noise configuration for the noise.

Based on this configuration, the noise is sampled at every reset of the noise model.
"""
68 changes: 68 additions & 0 deletions source/isaaclab/isaaclab/utils/noise/noise_model.py
Original file line number Diff line number Diff line change
Expand Up @@ -189,3 +189,71 @@ def __call__(self, data: torch.Tensor) -> torch.Tensor:
# now re-sample that expanded bias in-place
self.reset()
return super().__call__(data) + self._bias

class ResetSampledNoiseModel(NoiseModel):
"""Noise model that samples noise ONLY during reset and applies it consistently.

The noise is sampled from the configured distribution ONLY during reset and applied consistently
until the next reset. Unlike regular noise that generates new random values every step,
this model maintains the same noise values throughout an episode.
"""

def __init__(self, noise_model_cfg: noise_cfg.NoiseModelCfg, num_envs: int, device: str):
# initialize parent class
super().__init__(noise_model_cfg, num_envs, device)
# store the noise configuration
self._noise_cfg = noise_model_cfg.noise_cfg
self._sampled_noise = torch.zeros((num_envs, 1), device=self._device)
self._num_components: int | None = None

def reset(self, env_ids: Sequence[int] | None = None):
"""Reset the noise model by sampling NEW noise values.

This method samples new noise for the specified environments using the configured noise function.
The sampled noise will remain constant until the next reset.

Args:
env_ids: The environment ids to reset the noise model for. Defaults to None,
in which case all environments are considered.
"""
# resolve the environment ids
if env_ids is None:
env_ids = slice(None)

# Use the existing noise function to sample new noise
# Create dummy data to sample from the noise function
dummy_data = torch.zeros((env_ids.stop - env_ids.start if isinstance(env_ids, slice) else len(env_ids), 1),
device=self._device)

# Sample noise using the configured noise function
sampled_noise = self._noise_model_cfg.noise_cfg.func(dummy_data, self._noise_model_cfg.noise_cfg)

self._sampled_noise[env_ids] = sampled_noise

def __call__(self, data: torch.Tensor) -> torch.Tensor:
"""Apply the pre-sampled noise to the data.

This method applies the noise that was sampled during the last reset.
No new noise is generated - the same values are used consistently.

Args:
data: The data to apply the noise to. Shape is (num_envs, ...).

Returns:
The data with the noise applied. Shape is the same as the input data.
"""
# on first apply, expand noise to match last dim of data
if self._num_components is None:
*_, self._num_components = data.shape
# expand noise from (num_envs,1) to (num_envs, num_components)
self._sampled_noise = self._sampled_noise.repeat(1, self._num_components)

# apply the noise based on operation
if self._noise_cfg.operation == "add":
return data + self._sampled_noise
elif self._noise_cfg.operation == "scale":
return data * self._sampled_noise
elif self._noise_cfg.operation == "abs":
return self._sampled_noise
else:
raise ValueError(f"Unknown operation in noise: {self._noise_cfg.operation}")
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@

* :obj:`UR10_CFG`: The UR10 arm without a gripper.
* :obj:`UR10E_ROBOTIQ_GRIPPER_CFG`: The UR10E arm with Robotiq_2f_140 gripper.
* :obj:`UR10e_ROBOTIQ_2F_85_CFG`: The UR10E arm with Robotiq 2F-85 gripper.

Reference: https://github.com/ros-industrial/universal_robot
"""
Expand Down Expand Up @@ -163,3 +164,43 @@
)

"""Configuration of UR-10E arm with Robotiq_2f_140 gripper."""

UR10e_ROBOTIQ_2F_85_CFG = UR10e_CFG.copy()
UR10e_ROBOTIQ_2F_85_CFG.spawn.variants = {"Gripper": "Robotiq_2f_85"}
UR10e_ROBOTIQ_2F_85_CFG.spawn.rigid_props.disable_gravity = True
UR10e_ROBOTIQ_2F_85_CFG.init_state.joint_pos["finger_joint"] = 0.0
UR10e_ROBOTIQ_2F_85_CFG.init_state.joint_pos[".*_inner_finger_joint"] = 0.0
UR10e_ROBOTIQ_2F_85_CFG.init_state.joint_pos[".*_inner_finger_knuckle_joint"] = 0.0
UR10e_ROBOTIQ_2F_85_CFG.init_state.joint_pos[".*_outer_.*_joint"] = 0.0
# the major actuator joint for gripper
UR10e_ROBOTIQ_2F_85_CFG.actuators["gripper_drive"] = ImplicitActuatorCfg(
joint_names_expr=["finger_joint"], # "right_outer_knuckle_joint" is its mimic joint
effort_limit_sim=10.0,
velocity_limit_sim=1.0,
stiffness=11.25,
damping=0.1,
friction=0.0,
armature=0.0,
)
# enable the gripper to grasp in a parallel manner
UR10e_ROBOTIQ_2F_85_CFG.actuators["gripper_finger"] = ImplicitActuatorCfg(
joint_names_expr=[".*_inner_finger_joint"],
effort_limit_sim=1.0,
velocity_limit_sim=1.0,
stiffness=0.2,
damping=0.001,
friction=0.0,
armature=0.0,
)
# set PD to zero for passive joints in close-loop gripper
UR10e_ROBOTIQ_2F_85_CFG.actuators["gripper_passive"] = ImplicitActuatorCfg(
joint_names_expr=[".*_inner_finger_knuckle_joint", "right_outer_knuckle_joint"],
effort_limit_sim=1.0,
velocity_limit_sim=1.0,
stiffness=0.0,
damping=0.0,
friction=0.0,
armature=0.0,
)

"""Configuration of UR-10E arm with Robotiq 2F-85 gripper."""
3 changes: 3 additions & 0 deletions source/isaaclab_rl/isaaclab_rl/rsl_rl/rl_cfg.py
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,9 @@ class RslRlPpoActorCriticCfg:
noise_std_type: Literal["scalar", "log"] = "scalar"
"""The type of noise standard deviation for the policy. Default is scalar."""

state_dependent_std: bool = False
"""Whether to use state-dependent standard deviation for the policy. Default is False."""

actor_obs_normalization: bool = MISSING
"""Whether to normalize the observation for the actor network."""

Expand Down
1 change: 0 additions & 1 deletion source/isaaclab_rl/setup.py
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,6 @@
}
# Add the names with hyphens as aliases for convenience
EXTRAS_REQUIRE["rl_games"] = EXTRAS_REQUIRE["rl-games"]
EXTRAS_REQUIRE["rsl_rl"] = EXTRAS_REQUIRE["rsl-rl"]

# Cumulation of all extra-requires
EXTRAS_REQUIRE["all"] = list(itertools.chain.from_iterable(EXTRAS_REQUIRE.values()))
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
# Copyright (c) 2025, The Isaac Lab Project Developers (https://github.com/isaac-sim/IsaacLab/blob/main/CONTRIBUTORS.md).
# All rights reserved.
#
# SPDX-License-Identifier: BSD-3-Clause

"""Assemble 3 gears into a base."""
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
# Copyright (c) 2025, The Isaac Lab Project Developers (https://github.com/isaac-sim/IsaacLab/blob/main/CONTRIBUTORS.md).
# All rights reserved.
#
# SPDX-License-Identifier: BSD-3-Clause

"""Configurations for arm-based gear assembly environments."""

# We leave this file empty since we don't want to expose any configs in this package directly.
# We still need this file to import the "config" module in the parent package.
Original file line number Diff line number Diff line change
@@ -0,0 +1,75 @@
# Copyright (c) 2025, The Isaac Lab Project Developers (https://github.com/isaac-sim/IsaacLab/blob/main/CONTRIBUTORS.md).
# All rights reserved.
#
# SPDX-License-Identifier: BSD-3-Clause

import gymnasium as gym

from . import agents

##
# Register Gym environments.
##


# UR10e with 2F-140 gripper
gym.register(
id="Isaac-Deploy-GearAssembly-UR10e-2F140-v0",
entry_point="isaaclab.envs:ManagerBasedRLEnv",
disable_env_checker=True,
kwargs={
"env_cfg_entry_point": f"{__name__}.joint_pos_env_cfg:UR10e2F140GearAssemblyEnvCfg",
"rsl_rl_cfg_entry_point": f"{agents.__name__}.rsl_rl_ppo_cfg:UR10GearAssemblyRNNPPORunnerCfg",
},
)

gym.register(
id="Isaac-Deploy-GearAssembly-UR10e-2F140-Play-v0",
entry_point="isaaclab.envs:ManagerBasedRLEnv",
disable_env_checker=True,
kwargs={
"env_cfg_entry_point": f"{__name__}.joint_pos_env_cfg:UR10e2F140GearAssemblyEnvCfg_PLAY",
},
)

# UR10e with 2F-85 gripper
gym.register(
id="Isaac-Deploy-GearAssembly-UR10e-2F85-v0",
entry_point="isaaclab.envs:ManagerBasedRLEnv",
disable_env_checker=True,
kwargs={
"env_cfg_entry_point": f"{__name__}.joint_pos_env_cfg:UR10e2F85GearAssemblyEnvCfg",
"rsl_rl_cfg_entry_point": f"{agents.__name__}.rsl_rl_ppo_cfg:UR10GearAssemblyRNNPPORunnerCfg",
},
)

gym.register(
id="Isaac-Deploy-GearAssembly-UR10e-2F85-Play-v0",
entry_point="isaaclab.envs:ManagerBasedRLEnv",
disable_env_checker=True,
kwargs={
"env_cfg_entry_point": f"{__name__}.joint_pos_env_cfg:UR10e2F85GearAssemblyEnvCfg_PLAY",
},
)

# UR10e with 2F-140 gripper - ROS Inference
gym.register(
id="Isaac-Deploy-GearAssembly-UR10e-2F140-ROS-Inference-v0",
entry_point="isaaclab.envs:ManagerBasedRLEnv",
disable_env_checker=True,
kwargs={
"env_cfg_entry_point": f"{__name__}.ros_inference_env_cfg:UR10e2F140GearAssemblyROSInferenceEnvCfg",
"rsl_rl_cfg_entry_point": f"{agents.__name__}.rsl_rl_ppo_cfg:UR10GearAssemblyRNNPPORunnerCfg",
},
)

# UR10e with 2F-85 gripper - ROS Inference
gym.register(
id="Isaac-Deploy-GearAssembly-UR10e-2F85-ROS-Inference-v0",
entry_point="isaaclab.envs:ManagerBasedRLEnv",
disable_env_checker=True,
kwargs={
"env_cfg_entry_point": f"{__name__}.ros_inference_env_cfg:UR10e2F85GearAssemblyROSInferenceEnvCfg",
"rsl_rl_cfg_entry_point": f"{agents.__name__}.rsl_rl_ppo_cfg:UR10GearAssemblyRNNPPORunnerCfg",
},
)
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
# Copyright (c) 2025, The Isaac Lab Project Developers (https://github.com/isaac-sim/IsaacLab/blob/main/CONTRIBUTORS.md).
# All rights reserved.
#
# SPDX-License-Identifier: BSD-3-Clause
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
# Copyright (c) 2022-2025, The Isaac Lab Project Developers (https://github.com/isaac-sim/IsaacLab/blob/main/CONTRIBUTORS.md).
# All rights reserved.
#
# SPDX-License-Identifier: BSD-3-Clause

from isaaclab.utils import configclass

from isaaclab_rl.rsl_rl import RslRlOnPolicyRunnerCfg, RslRlPpoActorCriticRecurrentCfg, RslRlPpoAlgorithmCfg


@configclass
class UR10GearAssemblyRNNPPORunnerCfg(RslRlOnPolicyRunnerCfg):
seed = 7858
num_steps_per_env = 512
max_iterations = 1500
save_interval = 50
experiment_name = "gear_assembly_ur10e"
clip_actions = 1.0
resume = False
value_normalization = False
obs_groups = {
"policy": ["policy"],
"critic": ["critic"],
}
policy = RslRlPpoActorCriticRecurrentCfg(
state_dependent_std=True,
init_noise_std=1.0,
actor_obs_normalization=True,
critic_obs_normalization=True,
actor_hidden_dims=[256, 128, 64],
critic_hidden_dims=[256, 128, 64],
noise_std_type="log",
activation="elu",
rnn_type="lstm",
rnn_hidden_dim=256,
rnn_num_layers=2,
)
algorithm = RslRlPpoAlgorithmCfg(
value_loss_coef=1.0,
use_clipped_value_loss=True,
clip_param=0.2,
entropy_coef=0.0,
num_learning_epochs=8,
num_mini_batches=16,
learning_rate=5.0e-4,
schedule="adaptive",
gamma=0.99,
lam=0.95,
desired_kl=0.008,
max_grad_norm=1.0,
)
Loading
Loading