unilab.envs.manipulation.sharpa_inhand.base

Functions

format_scale_tag(scale_value)

Convert one object scale into a stable cache filename tag.

repeat_obs_history(init_frame, history_len)

resolve_grasp_cache_file(grasp_cache_path, ...)

Resolve the grasp cache path for a single object scale.

sample_scale_grasp_caches(grasp_caches, ...)

Sample one cached grasp per reset environment from per-scale cache files.

Classes

SharpaControlConfig

SharpaControlConfig(action_scale: 'float' = 0.041666666666666664, p_gain: 'float' = 1.0, d_gain: 'float' = 0.1, torque_control: 'bool' = False, dof_limits_scale: 'float' = 0.9)

SharpaDomainRandConfig

SharpaDomainRandConfig(scale_list: 'list[float]' = <factory>, randomize_base_mass: 'bool' = False, added_mass_range: 'list[float]' = <factory>, random_com: 'bool' = False, com_offset_x: 'list[float]' = <factory>, randomize_gravity: 'bool' = False, gravity_range: 'list[list[float]]' = <factory>, randomize_gravity_direction: 'bool' = False, gravity_direction_magnitude: 'float' = 9.81, randomize_pd_gains: 'bool' = True, randomize_p_gain_scale_lower: 'float' = 0.5, randomize_p_gain_scale_upper: 'float' = 2.0, randomize_d_gain_scale_lower: 'float' = 0.5, randomize_d_gain_scale_upper: 'float' = 2.0, randomize_friction: 'bool' = True, randomize_friction_scale_lower: 'float' = 0.5, randomize_friction_scale_upper: 'float' = 2.0, elastomer_base_friction: 'float' = 1.6, metal_base_friction: 'float' = 0.2, object_base_friction: 'float' = 1.0, randomize_com: 'bool' = True, randomize_com_lower: 'float' = -0.01, randomize_com_upper: 'float' = 0.01, randomize_mass: 'bool' = True, randomize_mass_lower: 'float' = 0.01, randomize_mass_upper: 'float' = 0.25, force_scale: 'float' = 2.0, random_force_prob_scalar: 'float' = 0.25, force_decay: 'float' = 0.9, force_decay_interval: 'float' = 0.08, joint_noise_scale: 'float' = 0.02, contact_latency: 'float' = 0.005, contact_sensor_noise: 'float' = 0.01, push_body_name: 'str | None' = None)

SharpaInhandBaseCfg

SharpaInhandBaseCfg(scene: 'SceneCfg' = <factory>, sim_dt: 'float' = 0.004166666666666667, max_episode_seconds: 'float' = 20.0, ctrl_dt: 'float' = 0.05, render_spacing: float = 1.0, render_offset_mode: str = 'grid', motrix_max_iterations: Optional[int] = None, post_step_forward_sensor: bool = False, action_space: 'int' = 22, observation_space: 'int' = 192, prop_hist_len: 'int' = 30, critic_info_dim: 'int' = 8, clip_obs: 'float' = 5.0, clip_actions: 'float' = 1.0, num_hand_dofs: 'int' = 22, frame_obs_dim: 'int' = 64, obs_lag_steps: 'int' = 3, obs_history_len: 'int' = 80, base_name: 'str' = 'right_hand_C_MC', object_body_name: 'str' = 'object', object_geom_name: 'str' = 'object', actuated_joint_names: 'list[str]' = <factory>, fingertip_body_names: 'list[str]' = <factory>, control_config: 'SharpaControlConfig' = <factory>, sensor: 'SharpaSensorConfig' = <factory>, obs: 'SharpaObservationConfig' = <factory>, priv_info: 'SharpaPrivilegedInfoConfig' = <factory>, domain_rand: 'SharpaDomainRandConfig' = <factory>, reset_height_lower: 'float' = 0.59906, reset_height_upper: 'float' = 0.63906, reset_angle_diff: 'float' = 0.7853981633974483, rot_axis: 'tuple[float, float, float]' = (0.0, 0.0, 1.0), grasp_cache_path: 'str' = '/home/admin1/ws/Eric/UniLab/src/unilab/assets/caches/sharpa_grasp_linspace', disable_tactile_ids: 'list[int]' = <factory>, use_default_object_pose_for_object_pos_anchor: 'bool' = False, debug_show_axes: 'bool' = False)

SharpaInhandBaseEnv

SharpaObservationConfig

SharpaObservationConfig(observation_mode: 'str' = 'separated', enable_tactile: 'bool' = True, binary_contact: 'bool' = False, enable_contact_pos: 'bool' = False, contact_smooth: 'float' = 0.5, contact_threshold: 'float' = 0.05, tactile_force_clip_max: 'float' = 4.0)

SharpaPrivilegedInfoConfig

SharpaPrivilegedInfoConfig(include_friction_scale: 'bool' = True, include_gravity_direction: 'bool' = False)

SharpaSensorConfig

SharpaSensorConfig(tactile_force_sensor_names: 'list[str]' = <factory>)

class unilab.envs.manipulation.sharpa_inhand.base.SharpaControlConfig[source]

Bases: object

SharpaControlConfig(action_scale: ‘float’ = 0.041666666666666664, p_gain: ‘float’ = 1.0, d_gain: ‘float’ = 0.1, torque_control: ‘bool’ = False, dof_limits_scale: ‘float’ = 0.9)

Parameters:
action_scale: float = 0.041666666666666664
p_gain: float = 1.0
d_gain: float = 0.1
torque_control: bool = False
dof_limits_scale: float = 0.9
__init__(action_scale=0.041666666666666664, p_gain=1.0, d_gain=0.1, torque_control=False, dof_limits_scale=0.9)
Parameters:
class unilab.envs.manipulation.sharpa_inhand.base.SharpaSensorConfig[source]

Bases: object

SharpaSensorConfig(tactile_force_sensor_names: ‘list[str]’ = <factory>)

Parameters:

tactile_force_sensor_names (list[str])

tactile_force_sensor_names: list[str]
__init__(tactile_force_sensor_names=<factory>)
Parameters:

tactile_force_sensor_names (list[str])

class unilab.envs.manipulation.sharpa_inhand.base.SharpaObservationConfig[source]

Bases: object

SharpaObservationConfig(observation_mode: ‘str’ = ‘separated’, enable_tactile: ‘bool’ = True, binary_contact: ‘bool’ = False, enable_contact_pos: ‘bool’ = False, contact_smooth: ‘float’ = 0.5, contact_threshold: ‘float’ = 0.05, tactile_force_clip_max: ‘float’ = 4.0)

Parameters:
  • observation_mode (str)

  • enable_tactile (bool)

  • binary_contact (bool)

  • enable_contact_pos (bool)

  • contact_smooth (float)

  • contact_threshold (float)

  • tactile_force_clip_max (float)

observation_mode: str = 'separated'
enable_tactile: bool = True
binary_contact: bool = False
enable_contact_pos: bool = False
contact_smooth: float = 0.5
contact_threshold: float = 0.05
tactile_force_clip_max: float = 4.0
__init__(observation_mode='separated', enable_tactile=True, binary_contact=False, enable_contact_pos=False, contact_smooth=0.5, contact_threshold=0.05, tactile_force_clip_max=4.0)
Parameters:
  • observation_mode (str)

  • enable_tactile (bool)

  • binary_contact (bool)

  • enable_contact_pos (bool)

  • contact_smooth (float)

  • contact_threshold (float)

  • tactile_force_clip_max (float)

class unilab.envs.manipulation.sharpa_inhand.base.SharpaPrivilegedInfoConfig[source]

Bases: object

SharpaPrivilegedInfoConfig(include_friction_scale: ‘bool’ = True, include_gravity_direction: ‘bool’ = False)

Parameters:
  • include_friction_scale (bool)

  • include_gravity_direction (bool)

include_friction_scale: bool = True
include_gravity_direction: bool = False
__init__(include_friction_scale=True, include_gravity_direction=False)
Parameters:
  • include_friction_scale (bool)

  • include_gravity_direction (bool)

class unilab.envs.manipulation.sharpa_inhand.base.SharpaDomainRandConfig[source]

Bases: object

SharpaDomainRandConfig(scale_list: ‘list[float]’ = <factory>, randomize_base_mass: ‘bool’ = False, added_mass_range: ‘list[float]’ = <factory>, random_com: ‘bool’ = False, com_offset_x: ‘list[float]’ = <factory>, randomize_gravity: ‘bool’ = False, gravity_range: ‘list[list[float]]’ = <factory>, randomize_gravity_direction: ‘bool’ = False, gravity_direction_magnitude: ‘float’ = 9.81, randomize_pd_gains: ‘bool’ = True, randomize_p_gain_scale_lower: ‘float’ = 0.5, randomize_p_gain_scale_upper: ‘float’ = 2.0, randomize_d_gain_scale_lower: ‘float’ = 0.5, randomize_d_gain_scale_upper: ‘float’ = 2.0, randomize_friction: ‘bool’ = True, randomize_friction_scale_lower: ‘float’ = 0.5, randomize_friction_scale_upper: ‘float’ = 2.0, elastomer_base_friction: ‘float’ = 1.6, metal_base_friction: ‘float’ = 0.2, object_base_friction: ‘float’ = 1.0, randomize_com: ‘bool’ = True, randomize_com_lower: ‘float’ = -0.01, randomize_com_upper: ‘float’ = 0.01, randomize_mass: ‘bool’ = True, randomize_mass_lower: ‘float’ = 0.01, randomize_mass_upper: ‘float’ = 0.25, force_scale: ‘float’ = 2.0, random_force_prob_scalar: ‘float’ = 0.25, force_decay: ‘float’ = 0.9, force_decay_interval: ‘float’ = 0.08, joint_noise_scale: ‘float’ = 0.02, contact_latency: ‘float’ = 0.005, contact_sensor_noise: ‘float’ = 0.01, push_body_name: ‘str | None’ = None)

Parameters:
  • scale_list (list[float])

  • randomize_base_mass (bool)

  • added_mass_range (list[float])

  • random_com (bool)

  • com_offset_x (list[float])

  • randomize_gravity (bool)

  • gravity_range (list[list[float]])

  • randomize_gravity_direction (bool)

  • gravity_direction_magnitude (float)

  • randomize_pd_gains (bool)

  • randomize_p_gain_scale_lower (float)

  • randomize_p_gain_scale_upper (float)

  • randomize_d_gain_scale_lower (float)

  • randomize_d_gain_scale_upper (float)

  • randomize_friction (bool)

  • randomize_friction_scale_lower (float)

  • randomize_friction_scale_upper (float)

  • elastomer_base_friction (float)

  • metal_base_friction (float)

  • object_base_friction (float)

  • randomize_com (bool)

  • randomize_com_lower (float)

  • randomize_com_upper (float)

  • randomize_mass (bool)

  • randomize_mass_lower (float)

  • randomize_mass_upper (float)

  • force_scale (float)

  • random_force_prob_scalar (float)

  • force_decay (float)

  • force_decay_interval (float)

  • joint_noise_scale (float)

  • contact_latency (float)

  • contact_sensor_noise (float)

  • push_body_name (str | None)

scale_list: list[float]
randomize_base_mass: bool = False
added_mass_range: list[float]
random_com: bool = False
com_offset_x: list[float]
randomize_gravity: bool = False
gravity_range: list[list[float]]
randomize_gravity_direction: bool = False
gravity_direction_magnitude: float = 9.81
randomize_pd_gains: bool = True
randomize_p_gain_scale_lower: float = 0.5
randomize_p_gain_scale_upper: float = 2.0
randomize_d_gain_scale_lower: float = 0.5
randomize_d_gain_scale_upper: float = 2.0
randomize_friction: bool = True
randomize_friction_scale_lower: float = 0.5
randomize_friction_scale_upper: float = 2.0
elastomer_base_friction: float = 1.6
metal_base_friction: float = 0.2
object_base_friction: float = 1.0
randomize_com: bool = True
randomize_com_lower: float = -0.01
randomize_com_upper: float = 0.01
randomize_mass: bool = True
randomize_mass_lower: float = 0.01
randomize_mass_upper: float = 0.25
force_scale: float = 2.0
random_force_prob_scalar: float = 0.25
force_decay: float = 0.9
force_decay_interval: float = 0.08
joint_noise_scale: float = 0.02
contact_latency: float = 0.005
contact_sensor_noise: float = 0.01
push_body_name: str | None = None
__init__(scale_list=<factory>, randomize_base_mass=False, added_mass_range=<factory>, random_com=False, com_offset_x=<factory>, randomize_gravity=False, gravity_range=<factory>, randomize_gravity_direction=False, gravity_direction_magnitude=9.81, randomize_pd_gains=True, randomize_p_gain_scale_lower=0.5, randomize_p_gain_scale_upper=2.0, randomize_d_gain_scale_lower=0.5, randomize_d_gain_scale_upper=2.0, randomize_friction=True, randomize_friction_scale_lower=0.5, randomize_friction_scale_upper=2.0, elastomer_base_friction=1.6, metal_base_friction=0.2, object_base_friction=1.0, randomize_com=True, randomize_com_lower=-0.01, randomize_com_upper=0.01, randomize_mass=True, randomize_mass_lower=0.01, randomize_mass_upper=0.25, force_scale=2.0, random_force_prob_scalar=0.25, force_decay=0.9, force_decay_interval=0.08, joint_noise_scale=0.02, contact_latency=0.005, contact_sensor_noise=0.01, push_body_name=None)
Parameters:
  • scale_list (list[float])

  • randomize_base_mass (bool)

  • added_mass_range (list[float])

  • random_com (bool)

  • com_offset_x (list[float])

  • randomize_gravity (bool)

  • gravity_range (list[list[float]])

  • randomize_gravity_direction (bool)

  • gravity_direction_magnitude (float)

  • randomize_pd_gains (bool)

  • randomize_p_gain_scale_lower (float)

  • randomize_p_gain_scale_upper (float)

  • randomize_d_gain_scale_lower (float)

  • randomize_d_gain_scale_upper (float)

  • randomize_friction (bool)

  • randomize_friction_scale_lower (float)

  • randomize_friction_scale_upper (float)

  • elastomer_base_friction (float)

  • metal_base_friction (float)

  • object_base_friction (float)

  • randomize_com (bool)

  • randomize_com_lower (float)

  • randomize_com_upper (float)

  • randomize_mass (bool)

  • randomize_mass_lower (float)

  • randomize_mass_upper (float)

  • force_scale (float)

  • random_force_prob_scalar (float)

  • force_decay (float)

  • force_decay_interval (float)

  • joint_noise_scale (float)

  • contact_latency (float)

  • contact_sensor_noise (float)

  • push_body_name (str | None)

class unilab.envs.manipulation.sharpa_inhand.base.SharpaInhandBaseCfg[source]

Bases: EnvCfg

SharpaInhandBaseCfg(scene: ‘SceneCfg’ = <factory>, sim_dt: ‘float’ = 0.004166666666666667, max_episode_seconds: ‘float’ = 20.0, ctrl_dt: ‘float’ = 0.05, render_spacing: float = 1.0, render_offset_mode: str = ‘grid’, motrix_max_iterations: Optional[int] = None, post_step_forward_sensor: bool = False, action_space: ‘int’ = 22, observation_space: ‘int’ = 192, prop_hist_len: ‘int’ = 30, critic_info_dim: ‘int’ = 8, clip_obs: ‘float’ = 5.0, clip_actions: ‘float’ = 1.0, num_hand_dofs: ‘int’ = 22, frame_obs_dim: ‘int’ = 64, obs_lag_steps: ‘int’ = 3, obs_history_len: ‘int’ = 80, base_name: ‘str’ = ‘right_hand_C_MC’, object_body_name: ‘str’ = ‘object’, object_geom_name: ‘str’ = ‘object’, actuated_joint_names: ‘list[str]’ = <factory>, fingertip_body_names: ‘list[str]’ = <factory>, control_config: ‘SharpaControlConfig’ = <factory>, sensor: ‘SharpaSensorConfig’ = <factory>, obs: ‘SharpaObservationConfig’ = <factory>, priv_info: ‘SharpaPrivilegedInfoConfig’ = <factory>, domain_rand: ‘SharpaDomainRandConfig’ = <factory>, reset_height_lower: ‘float’ = 0.59906, reset_height_upper: ‘float’ = 0.63906, reset_angle_diff: ‘float’ = 0.7853981633974483, rot_axis: ‘tuple[float, float, float]’ = (0.0, 0.0, 1.0), grasp_cache_path: ‘str’ = ‘/home/admin1/ws/Eric/UniLab/src/unilab/assets/caches/sharpa_grasp_linspace’, disable_tactile_ids: ‘list[int]’ = <factory>, use_default_object_pose_for_object_pos_anchor: ‘bool’ = False, debug_show_axes: ‘bool’ = False)

Parameters:
max_episode_seconds: float = 20.0
sim_dt: float = 0.004166666666666667
ctrl_dt: float = 0.05
action_space: int = 22
observation_space: int = 192
prop_hist_len: int = 30
critic_info_dim: int = 8
clip_obs: float = 5.0
clip_actions: float = 1.0
num_hand_dofs: int = 22
frame_obs_dim: int = 64
obs_lag_steps: int = 3
obs_history_len: int = 80
base_name: str = 'right_hand_C_MC'
object_body_name: str = 'object'
object_geom_name: str = 'object'
actuated_joint_names: list[str]
fingertip_body_names: list[str]
control_config: SharpaControlConfig
sensor: SharpaSensorConfig
obs: SharpaObservationConfig
priv_info: SharpaPrivilegedInfoConfig
domain_rand: SharpaDomainRandConfig
reset_height_lower: float = 0.59906
reset_height_upper: float = 0.63906
reset_angle_diff: float = 0.7853981633974483
rot_axis: tuple[float, float, float] = (0.0, 0.0, 1.0)
grasp_cache_path: str = '/home/admin1/ws/Eric/UniLab/src/unilab/assets/caches/sharpa_grasp_linspace'
disable_tactile_ids: list[int]
use_default_object_pose_for_object_pos_anchor: bool = False
debug_show_axes: bool = False
__init__(scene=<factory>, sim_dt=0.004166666666666667, max_episode_seconds=20.0, ctrl_dt=0.05, render_spacing=1.0, render_offset_mode='grid', motrix_max_iterations=None, post_step_forward_sensor=False, action_space=22, observation_space=192, prop_hist_len=30, critic_info_dim=8, clip_obs=5.0, clip_actions=1.0, num_hand_dofs=22, frame_obs_dim=64, obs_lag_steps=3, obs_history_len=80, base_name='right_hand_C_MC', object_body_name='object', object_geom_name='object', actuated_joint_names=<factory>, fingertip_body_names=<factory>, control_config=<factory>, sensor=<factory>, obs=<factory>, priv_info=<factory>, domain_rand=<factory>, reset_height_lower=0.59906, reset_height_upper=0.63906, reset_angle_diff=0.7853981633974483, rot_axis=(0.0, 0.0, 1.0), grasp_cache_path='/home/admin1/ws/Eric/UniLab/src/unilab/assets/caches/sharpa_grasp_linspace', disable_tactile_ids=<factory>, use_default_object_pose_for_object_pos_anchor=False, debug_show_axes=False)
Parameters:
unilab.envs.manipulation.sharpa_inhand.base.format_scale_tag(scale_value)[source]

Convert one object scale into a stable cache filename tag.

Parameters:

scale_value (float) – Single object scale value.

Return type:

str

Returns:

Scale tag used in cache filenames.

unilab.envs.manipulation.sharpa_inhand.base.resolve_grasp_cache_file(grasp_cache_path, scale_value)[source]

Resolve the grasp cache path for a single object scale.

Parameters:
  • grasp_cache_path (str) – Configured cache prefix or template path.

  • scale_value (float) – Single object scale value for this cache file.

Return type:

Path

Returns:

Cache path for that exact scale.

unilab.envs.manipulation.sharpa_inhand.base.sample_scale_grasp_caches(grasp_caches, scale_ids)[source]

Sample one cached grasp per reset environment from per-scale cache files.

Parameters:
  • grasp_caches (Sequence[ndarray]) – Cache arrays ordered the same way as env scale ids.

  • scale_ids (ndarray) – Scale-bucket assignment for each reset environment.

Return type:

ndarray

Returns:

Cached grasp states with shape (num_envs, 29).

unilab.envs.manipulation.sharpa_inhand.base.repeat_obs_history(init_frame, history_len)[source]
Parameters:
Return type:

ndarray

class unilab.envs.manipulation.sharpa_inhand.base.SharpaInhandBaseEnv[source]

Bases: NpEnv

Parameters:
__init__(cfg, backend, num_envs=1)[source]
Parameters:
property action_space: Box

Action space

apply_action(actions, state)[source]

子类实现:action → ctrl

Parameters:
Return type:

ndarray

get_hand_dof_pos()[source]
Return type:

ndarray

get_hand_dof_vel()[source]
Return type:

ndarray

get_fingertip_pos()[source]
Return type:

ndarray

get_object_pos()[source]
Return type:

ndarray

get_object_quat()[source]
Return type:

ndarray