Unverified Commit 9050d2f6 authored by Kelly Guo's avatar Kelly Guo Committed by GitHub

Adds direct workflow Allegro hand environment (#709)

# Description
This change refactors the shadow hand environment into a general in-hand
manipulation environment and extends it with the Allegro hand.

## Type of change

- New feature (non-breaking change which adds functionality)

## Checklist

- [x] I have run the [`pre-commit` checks](https://pre-commit.com/) with
`./isaaclab.sh --format`
- [x] I have made corresponding changes to the documentation
- [x] My changes generate no new warnings
- [ ] I have added tests that prove my fix is effective or that my
feature works
- [x] I have updated the changelog and the corresponding version in the
extension's `config/extension.toml` file
- [x] I have added my name to the `CONTRIBUTORS.md` or my name already
exists there
parent 67ddfd5b
...@@ -77,7 +77,8 @@ for the reach environment: ...@@ -77,7 +77,8 @@ for the reach environment:
+----------------+---------------------------+-----------------------------------------------------------------------------+ +----------------+---------------------------+-----------------------------------------------------------------------------+
| |cabi-franka| | |cabi-franka-link| | Grasp the handle of a cabinet's drawer and open it with the Franka robot | | |cabi-franka| | |cabi-franka-link| | Grasp the handle of a cabinet's drawer and open it with the Franka robot |
+----------------+---------------------------+-----------------------------------------------------------------------------+ +----------------+---------------------------+-----------------------------------------------------------------------------+
| |cube-allegro| | |cube-allegro-link| | In-hand reorientation of a cube using Allegro hand | | |cube-allegro| | | |cube-allegro-link| | In-hand reorientation of a cube using Allegro hand |
| | | |allegro-direct-link| | |
+----------------+---------------------------+-----------------------------------------------------------------------------+ +----------------+---------------------------+-----------------------------------------------------------------------------+
| |cube-shadow| | | |cube-shadow-link| | In-hand reorientation of a cube using Shadow hand | | |cube-shadow| | | |cube-shadow-link| | In-hand reorientation of a cube using Shadow hand |
| | | |cube-shadow-ff-link| | | | | | |cube-shadow-ff-link| | |
...@@ -98,10 +99,11 @@ for the reach environment: ...@@ -98,10 +99,11 @@ for the reach environment:
.. |lift-cube-ik-rel-link| replace:: `Isaac-Lift-Cube-Franka-IK-Rel-v0 <https://github.com/isaac-sim/IsaacLab/blob/main/source/extensions/omni.isaac.lab_tasks/omni/isaac/lab_tasks/manager_based/manipulation/lift/config/franka/ik_rel_env_cfg.py>`__ .. |lift-cube-ik-rel-link| replace:: `Isaac-Lift-Cube-Franka-IK-Rel-v0 <https://github.com/isaac-sim/IsaacLab/blob/main/source/extensions/omni.isaac.lab_tasks/omni/isaac/lab_tasks/manager_based/manipulation/lift/config/franka/ik_rel_env_cfg.py>`__
.. |cabi-franka-link| replace:: `Isaac-Open-Drawer-Franka-v0 <https://github.com/isaac-sim/IsaacLab/blob/main/source/extensions/omni.isaac.lab_tasks/omni/isaac/lab_tasks/manager_based/manipulation/cabinet/config/franka/joint_pos_env_cfg.py>`__ .. |cabi-franka-link| replace:: `Isaac-Open-Drawer-Franka-v0 <https://github.com/isaac-sim/IsaacLab/blob/main/source/extensions/omni.isaac.lab_tasks/omni/isaac/lab_tasks/manager_based/manipulation/cabinet/config/franka/joint_pos_env_cfg.py>`__
.. |cube-allegro-link| replace:: `Isaac-Repose-Cube-Allegro-v0 <https://github.com/isaac-sim/IsaacLab/blob/main/source/extensions/omni.isaac.lab_tasks/omni/isaac/lab_tasks/manager_based/manipulation/inhand/config/allegro_hand/allegro_env_cfg.py>`__ .. |cube-allegro-link| replace:: `Isaac-Repose-Cube-Allegro-v0 <https://github.com/isaac-sim/IsaacLab/blob/main/source/extensions/omni.isaac.lab_tasks/omni/isaac/lab_tasks/manager_based/manipulation/inhand/config/allegro_hand/allegro_env_cfg.py>`__
.. |allegro-direct-link| replace:: `Isaac-Repose-Cube-Allegro-Direct-v0 <https://github.com/isaac-sim/IsaacLab/blob/main/source/extensions/omni.isaac.lab_tasks/omni/isaac/lab_tasks/direct/allegro_hand/allegro_hand_env_cfg.py>`__
.. |cube-shadow-link| replace:: `Isaac-Shadow-Hand-Direct-v0 <https://github.com/isaac-sim/IsaacLab/blob/main/source/extensions/omni.isaac.lab_tasks/omni/isaac/lab_tasks/direct/shadow_hand/shadow_hand_env.py>`__ .. |cube-shadow-link| replace:: `Isaac-Repose-Cube-Shadow-Direct-v0 <https://github.com/isaac-sim/IsaacLab/blob/main/source/extensions/omni.isaac.lab_tasks/omni/isaac/lab_tasks/direct/shadow_hand/shadow_hand_env_cfg.py>`__
.. |cube-shadow-ff-link| replace:: `Isaac-Shadow-Hand-OpenAI-FF-Direct-v0 <https://github.com/isaac-sim/IsaacLab/blob/main/source/extensions/omni.isaac.lab_tasks/omni/isaac/lab_tasks/direct/shadow_hand/shadow_hand_env.py>`__ .. |cube-shadow-ff-link| replace:: `Isaac-Repose-Cube-Shadow-OpenAI-FF-Direct-v0 <https://github.com/isaac-sim/IsaacLab/blob/main/source/extensions/omni.isaac.lab_tasks/omni/isaac/lab_tasks/direct/shadow_hand/shadow_hand_env_cfg.py>`__
.. |cube-shadow-lstm-link| replace:: `Isaac-Shadow-Hand-OpenAI-LSTM-Direct-v0 <https://github.com/isaac-sim/IsaacLab/blob/main/source/extensions/omni.isaac.lab_tasks/omni/isaac/lab_tasks/direct/shadow_hand/shadow_hand_env.py>`__ .. |cube-shadow-lstm-link| replace:: `Isaac-Repose-Cube-Shadow-OpenAI-LSTM-Direct-v0 <https://github.com/isaac-sim/IsaacLab/blob/main/source/extensions/omni.isaac.lab_tasks/omni/isaac/lab_tasks/direct/shadow_hand/shadow_hand_env_cfg.py>`__
Locomotion Locomotion
---------- ----------
......
[package] [package]
# Note: Semantic Versioning is used: https://semver.org/ # Note: Semantic Versioning is used: https://semver.org/
version = "0.8.1" version = "0.8.2"
# Description # Description
title = "Isaac Lab Environments" title = "Isaac Lab Environments"
......
Changelog Changelog
--------- ---------
0.8.2 (2024-08-02)
~~~~~~~~~~~~~~~~~~~
Added
^^^^^
* Added ``Isaac-Repose-Cube-Allegro-Direct-v0`` environment
Changed
^^^^^^^
* Renamed ``Isaac-Shadow-Hand-Direct-v0`` environments to ``Isaac-Repose-Cube-Shadow-Direct-v0``.
* Renamed ``Isaac-Shadow-Hand-OpenAI-FF-Direct-v0`` environments to ``Isaac-Repose-Cube-Shadow-OpenAI-FF-Direct-v0``.
* Renamed ``Isaac-Shadow-Hand-OpenAI-LSTM-Direct-v0`` environments to ``Isaac-Repose-Cube-Shadow-OpenAI-LSTM-Direct-v0``.
0.8.1 (2024-08-02) 0.8.1 (2024-08-02)
~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~
......
# Copyright (c) 2022-2024, The Isaac Lab Project Developers.
# All rights reserved.
#
# SPDX-License-Identifier: BSD-3-Clause
"""
Allegro Inhand Manipulation environment.
"""
import gymnasium as gym
from . import agents
from .allegro_hand_env_cfg import AllegroHandEnvCfg
##
# Register Gym environments.
##
gym.register(
id="Isaac-Repose-Cube-Allegro-Direct-v0",
entry_point="omni.isaac.lab_tasks.direct.inhand_manipulation:InHandManipulationEnv",
disable_env_checker=True,
kwargs={
"env_cfg_entry_point": AllegroHandEnvCfg,
"rl_games_cfg_entry_point": f"{agents.__name__}:rl_games_ppo_cfg.yaml",
"rsl_rl_cfg_entry_point": agents.rsl_rl_ppo_cfg.AllegroHandPPORunnerCfg,
},
)
# Copyright (c) 2022-2024, The Isaac Lab Project Developers.
# All rights reserved.
#
# SPDX-License-Identifier: BSD-3-Clause
from . import rsl_rl_ppo_cfg
params:
seed: 42
# environment wrapper clipping
env:
# added to the wrapper
clip_observations: 5.0
# can make custom wrapper?
clip_actions: 1.0
algo:
name: a2c_continuous
model:
name: continuous_a2c_logstd
# doesn't have this fine grained control but made it close
network:
name: actor_critic
separate: False
space:
continuous:
mu_activation: None
sigma_activation: None
mu_init:
name: default
sigma_init:
name: const_initializer
val: 0
fixed_sigma: True
mlp:
units: [512, 512, 256, 128]
activation: elu
d2rl: False
initializer:
name: default
regularizer:
name: None
load_checkpoint: False # flag which sets whether to load the checkpoint
load_path: '' # path to the checkpoint to load
config:
name: allegro_hand
env_name: rlgpu
device: 'cuda:0'
device_name: 'cuda:0'
multi_gpu: False
ppo: True
mixed_precision: False
normalize_input: True
normalize_value: True
value_bootstrap: True
num_actors: -1 # configured from the script (based on num_envs)
reward_shaper:
scale_value: 0.01
normalize_advantage: True
gamma: 0.99
tau : 0.95
learning_rate: 5e-4
lr_schedule: adaptive
schedule_type: standard
kl_threshold: 0.016
score_to_win: 100000
max_epochs: 5000
save_best_after: 100
save_frequency: 200
print_stats: True
grad_norm: 1.0
entropy_coef: 0.0
truncate_grads: True
e_clip: 0.2
horizon_length: 16
minibatch_size: 32768
mini_epochs: 5
critic_coef: 4
clip_value: True
seq_length: 4
bounds_loss_coef: 0.0001
player:
deterministic: True
games_num: 100000
print_stats: True
# Copyright (c) 2022-2024, The Isaac Lab Project Developers.
# All rights reserved.
#
# SPDX-License-Identifier: BSD-3-Clause
from omni.isaac.lab.utils import configclass
from omni.isaac.lab_tasks.utils.wrappers.rsl_rl import (
RslRlOnPolicyRunnerCfg,
RslRlPpoActorCriticCfg,
RslRlPpoAlgorithmCfg,
)
@configclass
class AllegroHandPPORunnerCfg(RslRlOnPolicyRunnerCfg):
num_steps_per_env = 16
max_iterations = 10000
save_interval = 250
experiment_name = "allegro_hand"
empirical_normalization = True
policy = RslRlPpoActorCriticCfg(
init_noise_std=1.0,
actor_hidden_dims=[512, 512, 256, 128],
critic_hidden_dims=[512, 512, 256, 128],
activation="elu",
)
algorithm = RslRlPpoAlgorithmCfg(
value_loss_coef=1.0,
use_clipped_value_loss=True,
clip_param=0.2,
entropy_coef=0.005,
num_learning_epochs=5,
num_mini_batches=4,
learning_rate=5.0e-4,
schedule="adaptive",
gamma=0.99,
lam=0.95,
desired_kl=0.016,
max_grad_norm=1.0,
)
# Copyright (c) 2022-2024, The Isaac Lab Project Developers.
# All rights reserved.
#
# SPDX-License-Identifier: BSD-3-Clause
from omni.isaac.lab_assets.allegro import ALLEGRO_HAND_CFG
import omni.isaac.lab.sim as sim_utils
from omni.isaac.lab.assets import ArticulationCfg, RigidObjectCfg
from omni.isaac.lab.envs import DirectRLEnvCfg
from omni.isaac.lab.markers import VisualizationMarkersCfg
from omni.isaac.lab.scene import InteractiveSceneCfg
from omni.isaac.lab.sim import PhysxCfg, SimulationCfg
from omni.isaac.lab.sim.spawners.materials.physics_materials_cfg import RigidBodyMaterialCfg
from omni.isaac.lab.utils import configclass
from omni.isaac.lab.utils.assets import ISAAC_NUCLEUS_DIR
@configclass
class AllegroHandEnvCfg(DirectRLEnvCfg):
# env
decimation = 4
episode_length_s = 10.0
num_actions = 16
num_observations = 124 # (full)
num_states = 0
asymmetric_obs = False
obs_type = "full"
# simulation
sim: SimulationCfg = SimulationCfg(
dt=1 / 120,
render_interval=decimation,
physics_material=RigidBodyMaterialCfg(
static_friction=1.0,
dynamic_friction=1.0,
),
physx=PhysxCfg(
bounce_threshold_velocity=0.2,
),
)
# robot
robot_cfg: ArticulationCfg = ALLEGRO_HAND_CFG.replace(prim_path="/World/envs/env_.*/Robot")
actuated_joint_names = [
"index_joint_0",
"middle_joint_0",
"ring_joint_0",
"thumb_joint_0",
"index_joint_1",
"index_joint_2",
"index_joint_3",
"middle_joint_1",
"middle_joint_2",
"middle_joint_3",
"ring_joint_1",
"ring_joint_2",
"ring_joint_3",
"thumb_joint_1",
"thumb_joint_2",
"thumb_joint_3",
]
fingertip_body_names = [
"index_link_3",
"middle_link_3",
"ring_link_3",
"thumb_link_3",
]
# in-hand object
object_cfg: RigidObjectCfg = RigidObjectCfg(
prim_path="/World/envs/env_.*/object",
spawn=sim_utils.UsdFileCfg(
usd_path=f"{ISAAC_NUCLEUS_DIR}/Props/Blocks/DexCube/dex_cube_instanceable.usd",
rigid_props=sim_utils.RigidBodyPropertiesCfg(
kinematic_enabled=False,
disable_gravity=False,
enable_gyroscopic_forces=True,
solver_position_iteration_count=8,
solver_velocity_iteration_count=0,
sleep_threshold=0.005,
stabilization_threshold=0.0025,
max_depenetration_velocity=1000.0,
),
mass_props=sim_utils.MassPropertiesCfg(density=400.0),
scale=(1.2, 1.2, 1.2),
),
init_state=RigidObjectCfg.InitialStateCfg(pos=(0.0, -0.17, 0.56), rot=(1.0, 0.0, 0.0, 0.0)),
)
# goal object
goal_object_cfg: VisualizationMarkersCfg = VisualizationMarkersCfg(
prim_path="/Visuals/goal_marker",
markers={
"goal": sim_utils.UsdFileCfg(
usd_path=f"{ISAAC_NUCLEUS_DIR}/Props/Blocks/DexCube/dex_cube_instanceable.usd",
scale=(1.2, 1.2, 1.2),
)
},
)
# scene
scene: InteractiveSceneCfg = InteractiveSceneCfg(num_envs=8192, env_spacing=0.75, replicate_physics=True)
# reset
reset_position_noise = 0.01 # range of position at reset
reset_dof_pos_noise = 0.2 # range of dof pos at reset
reset_dof_vel_noise = 0.0 # range of dof vel at reset
# reward scales
dist_reward_scale = -10.0
rot_reward_scale = 1.0
rot_eps = 0.1
action_penalty_scale = -0.0002
reach_goal_bonus = 250
fall_penalty = 0
fall_dist = 0.24
vel_obs_scale = 0.2
success_tolerance = 0.1
max_consecutive_success = 0
av_factor = 0.1
act_moving_average = 1.0
force_torque_obs_scale = 10.0
# Copyright (c) 2022-2024, The Isaac Lab Project Developers.
# All rights reserved.
#
# SPDX-License-Identifier: BSD-3-Clause
from .inhand_manipulation_env import InHandManipulationEnv
...@@ -17,13 +17,14 @@ from omni.isaac.lab.markers import VisualizationMarkers ...@@ -17,13 +17,14 @@ from omni.isaac.lab.markers import VisualizationMarkers
from omni.isaac.lab.sim.spawners.from_files import GroundPlaneCfg, spawn_ground_plane from omni.isaac.lab.sim.spawners.from_files import GroundPlaneCfg, spawn_ground_plane
from omni.isaac.lab.utils.math import quat_conjugate, quat_from_angle_axis, quat_mul, sample_uniform, saturate from omni.isaac.lab.utils.math import quat_conjugate, quat_from_angle_axis, quat_mul, sample_uniform, saturate
from .shadow_hand_env_cfg import ShadowHandEnvCfg from omni.isaac.lab_tasks.direct.allegro_hand import AllegroHandEnvCfg
from omni.isaac.lab_tasks.direct.shadow_hand import ShadowHandEnvCfg
class ShadowHandEnv(DirectRLEnv): class InHandManipulationEnv(DirectRLEnv):
cfg: ShadowHandEnvCfg cfg: AllegroHandEnvCfg | ShadowHandEnvCfg
def __init__(self, cfg: ShadowHandEnvCfg, render_mode: str | None = None, **kwargs): def __init__(self, cfg: AllegroHandEnvCfg | ShadowHandEnvCfg, render_mode: str | None = None, **kwargs):
super().__init__(cfg, render_mode, **kwargs) super().__init__(cfg, render_mode, **kwargs)
self.num_hand_dofs = self.hand.num_joints self.num_hand_dofs = self.hand.num_joints
...@@ -281,10 +282,10 @@ class ShadowHandEnv(DirectRLEnv): ...@@ -281,10 +282,10 @@ class ShadowHandEnv(DirectRLEnv):
# Relative target orientation # Relative target orientation
obs = torch.cat( obs = torch.cat(
( (
self.fingertip_pos.view(self.num_envs, self.num_fingertips * 3), # 0:15 self.fingertip_pos.view(self.num_envs, self.num_fingertips * 3),
self.object_pos, # 15:18 self.object_pos,
quat_mul(self.object_rot, quat_conjugate(self.goal_rot)), # 18:22 quat_mul(self.object_rot, quat_conjugate(self.goal_rot)),
self.actions, # 22:42 self.actions,
), ),
dim=-1, dim=-1,
) )
...@@ -295,23 +296,23 @@ class ShadowHandEnv(DirectRLEnv): ...@@ -295,23 +296,23 @@ class ShadowHandEnv(DirectRLEnv):
obs = torch.cat( obs = torch.cat(
( (
# hand # hand
unscale(self.hand_dof_pos, self.hand_dof_lower_limits, self.hand_dof_upper_limits), # 0:24 unscale(self.hand_dof_pos, self.hand_dof_lower_limits, self.hand_dof_upper_limits),
self.cfg.vel_obs_scale * self.hand_dof_vel, # 24:48 self.cfg.vel_obs_scale * self.hand_dof_vel,
# object # object
self.object_pos, # 48:51 self.object_pos,
self.object_rot, # 51:55 self.object_rot,
self.object_linvel, # 55:58 self.object_linvel,
self.cfg.vel_obs_scale * self.object_angvel, # 58:61 self.cfg.vel_obs_scale * self.object_angvel,
# goal # goal
self.in_hand_pos, # 61:64 self.in_hand_pos,
self.goal_rot, # 64:68 self.goal_rot,
quat_mul(self.object_rot, quat_conjugate(self.goal_rot)), # 68:72 quat_mul(self.object_rot, quat_conjugate(self.goal_rot)),
# fingertips # fingertips
self.fingertip_pos.view(self.num_envs, self.num_fingertips * 3), # 72:87 self.fingertip_pos.view(self.num_envs, self.num_fingertips * 3),
self.fingertip_rot.view(self.num_envs, self.num_fingertips * 4), # 87:107 self.fingertip_rot.view(self.num_envs, self.num_fingertips * 4),
self.fingertip_velocities.view(self.num_envs, self.num_fingertips * 6), # 107:137 self.fingertip_velocities.view(self.num_envs, self.num_fingertips * 6),
# actions # actions
self.actions, # 137:157 self.actions,
), ),
dim=-1, dim=-1,
) )
...@@ -321,25 +322,25 @@ class ShadowHandEnv(DirectRLEnv): ...@@ -321,25 +322,25 @@ class ShadowHandEnv(DirectRLEnv):
states = torch.cat( states = torch.cat(
( (
# hand # hand
unscale(self.hand_dof_pos, self.hand_dof_lower_limits, self.hand_dof_upper_limits), # 0:24 unscale(self.hand_dof_pos, self.hand_dof_lower_limits, self.hand_dof_upper_limits),
self.cfg.vel_obs_scale * self.hand_dof_vel, # 24:48 self.cfg.vel_obs_scale * self.hand_dof_vel,
# object # object
self.object_pos, # 48:51 self.object_pos,
self.object_rot, # 51:55 self.object_rot,
self.object_linvel, # 55:58 self.object_linvel,
self.cfg.vel_obs_scale * self.object_angvel, # 58:61 self.cfg.vel_obs_scale * self.object_angvel,
# goal # goal
self.in_hand_pos, # 61:64 self.in_hand_pos,
self.goal_rot, # 64:68 self.goal_rot,
quat_mul(self.object_rot, quat_conjugate(self.goal_rot)), # 68:72 quat_mul(self.object_rot, quat_conjugate(self.goal_rot)),
# fingertips # fingertips
self.fingertip_pos.view(self.num_envs, self.num_fingertips * 3), # 72:87 self.fingertip_pos.view(self.num_envs, self.num_fingertips * 3),
self.fingertip_rot.view(self.num_envs, self.num_fingertips * 4), # 87:107 self.fingertip_rot.view(self.num_envs, self.num_fingertips * 4),
self.fingertip_velocities.view(self.num_envs, self.num_fingertips * 6), # 107:137 self.fingertip_velocities.view(self.num_envs, self.num_fingertips * 6),
self.cfg.force_torque_obs_scale self.cfg.force_torque_obs_scale
* self.fingertip_force_sensors.view(self.num_envs, self.num_fingertips * 6), # 137:167 * self.fingertip_force_sensors.view(self.num_envs, self.num_fingertips * 6),
# actions # actions
self.actions, # 167:187 self.actions,
), ),
dim=-1, dim=-1,
) )
......
...@@ -4,13 +4,12 @@ ...@@ -4,13 +4,12 @@
# SPDX-License-Identifier: BSD-3-Clause # SPDX-License-Identifier: BSD-3-Clause
""" """
Cartpole balancing environment. Shadow Hand environment.
""" """
import gymnasium as gym import gymnasium as gym
from . import agents from . import agents
from .shadow_hand_env import ShadowHandEnv
from .shadow_hand_env_cfg import ShadowHandEnvCfg, ShadowHandOpenAIEnvCfg from .shadow_hand_env_cfg import ShadowHandEnvCfg, ShadowHandOpenAIEnvCfg
## ##
...@@ -18,8 +17,8 @@ from .shadow_hand_env_cfg import ShadowHandEnvCfg, ShadowHandOpenAIEnvCfg ...@@ -18,8 +17,8 @@ from .shadow_hand_env_cfg import ShadowHandEnvCfg, ShadowHandOpenAIEnvCfg
## ##
gym.register( gym.register(
id="Isaac-Shadow-Hand-Direct-v0", id="Isaac-Repose-Cube-Shadow-Direct-v0",
entry_point="omni.isaac.lab_tasks.direct.shadow_hand:ShadowHandEnv", entry_point="omni.isaac.lab_tasks.direct.inhand_manipulation:InHandManipulationEnv",
disable_env_checker=True, disable_env_checker=True,
kwargs={ kwargs={
"env_cfg_entry_point": ShadowHandEnvCfg, "env_cfg_entry_point": ShadowHandEnvCfg,
...@@ -29,8 +28,8 @@ gym.register( ...@@ -29,8 +28,8 @@ gym.register(
) )
gym.register( gym.register(
id="Isaac-Shadow-Hand-OpenAI-FF-Direct-v0", id="Isaac-Repose-Cube-Shadow-OpenAI-FF-Direct-v0",
entry_point="omni.isaac.lab_tasks.direct.shadow_hand:ShadowHandEnv", entry_point="omni.isaac.lab_tasks.direct.inhand_manipulation:InHandManipulationEnv",
disable_env_checker=True, disable_env_checker=True,
kwargs={ kwargs={
"env_cfg_entry_point": ShadowHandOpenAIEnvCfg, "env_cfg_entry_point": ShadowHandOpenAIEnvCfg,
...@@ -40,8 +39,8 @@ gym.register( ...@@ -40,8 +39,8 @@ gym.register(
) )
gym.register( gym.register(
id="Isaac-Shadow-Hand-OpenAI-LSTM-Direct-v0", id="Isaac-Repose-Cube-Shadow-OpenAI-LSTM-Direct-v0",
entry_point="omni.isaac.lab_tasks.direct.shadow_hand:ShadowHandEnv", entry_point="omni.isaac.lab_tasks.direct.inhand_manipulation:InHandManipulationEnv",
disable_env_checker=True, disable_env_checker=True,
kwargs={ kwargs={
"env_cfg_entry_point": ShadowHandOpenAIEnvCfg, "env_cfg_entry_point": ShadowHandOpenAIEnvCfg,
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment