robocasa.utils package#

Subpackages#

Submodules#

robocasa.utils.camera_utils module#

Collection of constants for cameras / robots / etc in kitchen environments

robocasa.utils.dataset_registry module#

robocasa.utils.dataset_registry.get_ds_path(task, ds_type, return_info=False)#

robocasa.utils.env_utils module#

robocasa.utils.env_utils.create_env(env_name, robots='PandaMobile', controllers='OSC_POSE', camera_names=['robot0_agentview_left', 'robot0_agentview_right', 'robot0_eye_in_hand'], camera_widths=128, camera_heights=128, seed=None, obj_instance_split=None, generative_textures=None, randomize_cameras=False, layout_and_style_ids=None, layout_ids=None, style_ids=None)#
robocasa.utils.env_utils.run_random_rollouts(env, num_rollouts, num_steps, video_path=None)#

robocasa.utils.get_all_items_by_type module#

robocasa.utils.get_all_items_by_type.get_items_by_type(types=['vegetable', 'fruit'])#
robocasa.utils.get_all_items_by_type.list_of_strings(arg)#

robocasa.utils.object_utils module#

robocasa.utils.object_utils.check_obj_fixture_contact(env, obj_name, fixture_name)#

check if object is in contact with fixture

robocasa.utils.object_utils.check_obj_in_receptacle(env, obj_name, receptacle_name, th=None)#

check if object is in receptacle object based on threshold

robocasa.utils.object_utils.compute_rel_transform(A_pos, A_mat, B_pos, B_mat)#

Gets B’s position and rotation relative to A’s frame

robocasa.utils.object_utils.fixture_pairwise_dist(f1, f2)#

Gets the distance between two fixtures by finding the minimum distance between their exterior bounding box points

robocasa.utils.object_utils.get_fixture_to_point_rel_offset(fixture, point)#

get offset relative to fixture’s frame, given a global point

robocasa.utils.object_utils.get_pos_after_rel_offset(fixture, offset)#

get global position of a fixture, after applying offset relative to center of fixture

robocasa.utils.object_utils.get_rel_transform(fixture_A, fixture_B)#

Gets fixture_B’s position and rotation relative to fixture_A’s frame

robocasa.utils.object_utils.gripper_obj_far(env, obj_name='obj', th=0.25)#

check if gripper is far from object based on distance defined by threshold

robocasa.utils.object_utils.normalize_joint_value(raw, joint_min, joint_max)#

normalize raw value to be between 0 and 1

robocasa.utils.object_utils.obj_cos(env, obj_name='obj', ref=(0, 0, 1))#
robocasa.utils.object_utils.obj_in_region(obj, obj_pos, obj_quat, p0, px, py, pz=None)#

check if object is in the region defined by the points. Uses either the objects bounding box or the object’s horizontal radius

robocasa.utils.object_utils.obj_inside_of(env, obj_name, fixture_id, partial_check=False)#

whether an object (another mujoco object) is inside of fixture. applies for most fixtures

robocasa.utils.object_utils.objs_intersect(obj, obj_pos, obj_quat, other_obj, other_obj_pos, other_obj_quat)#

check if two objects intersect

robocasa.utils.object_utils.point_in_fixture(point, fixture, only_2d=False)#

check if point is inside of the exterior bounding boxes of the fixture

Parameters
  • point (np.array) – point to check

  • fixture (Fixture) – fixture object

  • only_2d (bool) – whether to check only in 2D

robocasa.utils.object_utils.project_point_to_line(P, A, B)#

logic copied from here: https://stackoverflow.com/a/61342198

robocasa.utils.object_utils.set_geom_dimensions(sizes, positions, geoms, rotated=False)#

set the dimensions of geoms in a fixture

Parameters
  • sizes (dict) – dictionary of sizes for each side

  • positions (dict) – dictionary of positions for each side

  • geoms (dict) – dictionary of geoms for each side

  • rotated (bool) – whether the fixture is rotated. Fixture may be rotated to make texture appear uniform due to mujoco texture conventions

robocasa.utils.placement_samplers module#

class robocasa.utils.placement_samplers.MultiRegionSampler(name, regions, side='all', mujoco_objects=None, rotation=None, rotation_axis='z', ensure_object_boundary_in_range=True, ensure_valid_placement=True, rng=None, z_offset=0.0)#

Bases: robocasa.utils.placement_samplers.ObjectPositionSampler

sample(fixtures=None, reference=None, on_top=True)#

Uniformly sample on a surface (not necessarily table surface).

Parameters
  • fixtures (dict) – dictionary of current object placements in the scene as well as any other relevant obstacles that should not be in contact with newly sampled objects. Used to make sure newly generated placements are valid. Should be object names mapped to (pos, quat, MujocoObject)

  • reference (str or 3-tuple or None) – if provided, sample relative placement. Can either be a string, which corresponds to an existing object found in @fixtures, or a direct (x,y,z) value. If None, will sample relative to this sampler’s ‘reference_pos’ value.

  • on_top (bool) – if True, sample placement on top of the reference object.

Returns

dictionary of all object placements, mapping object_names to (pos, quat, obj), including the

placements specified in @fixtures. Note quat is in (w,x,y,z) form

Return type

dict

class robocasa.utils.placement_samplers.ObjectPositionSampler(name, mujoco_objects=None, ensure_object_boundary_in_range=True, ensure_valid_placement=True, reference_pos=(0, 0, 0), reference_rot=0, z_offset=0.0, rng=None)#

Bases: object

Base class of object placement sampler.

Parameters
  • name (str) – Name of this sampler.

  • mujoco_objects (None or MujocoObject or list of MujocoObject) – single model or list of MJCF object models

  • ensure_object_boundary_in_range (bool) – If True, will ensure that the object is enclosed within a given boundary (should be implemented by subclass)

  • ensure_valid_placement (bool) – If True, will check for correct (valid) object placements

  • reference_pos (3-array) – global (x,y,z) position relative to which sampling will occur

  • z_offset (float) – Add a small z-offset to placements. This is useful for fixed objects that do not move (i.e. no free joint) to place them above the table.

add_objects(mujoco_objects)#

Add additional objects to this sampler. Checks to make sure there’s no identical objects already stored.

Parameters

mujoco_objects (MujocoObject or list of MujocoObject) – single model or list of MJCF object models

reset()#

Resets this sampler. Removes all mujoco objects from this sampler.

sample(fixtures=None, reference=None, on_top=True)#

Uniformly sample on a surface (not necessarily table surface).

Parameters
  • fixtures (dict) – dictionary of current object placements in the scene as well as any other relevant obstacles that should not be in contact with newly sampled objects. Used to make sure newly generated placements are valid. Should be object names mapped to (pos, quat, MujocoObject)

  • reference (str or 3-tuple or None) – if provided, sample relative placement. Can either be a string, which corresponds to an existing object found in @fixtures, or a direct (x,y,z) value. If None, will sample relative to this sampler’s ‘reference_pos’ value.

  • on_top (bool) – if True, sample placement on top of the reference object.

Returns

dictionary of all object placements, mapping object_names to (pos, quat, obj), including the

placements specified in @fixtures. Note quat is in (w,x,y,z) form

Return type

dict

property sides_combinations#
property valid_sides#
class robocasa.utils.placement_samplers.SequentialCompositeSampler(name, rng=None)#

Bases: robocasa.utils.placement_samplers.ObjectPositionSampler

Samples position for each object sequentially. Allows chaining multiple placement initializers together - so that object locations can be sampled on top of other objects or relative to other object placements.

Parameters

name (str) – Name of this sampler.

add_objects(mujoco_objects)#

Override super method to make sure user doesn’t call this (all objects should implicitly belong to sub-samplers)

add_objects_to_sampler(sampler_name, mujoco_objects)#

Adds specified @mujoco_objects to sub-sampler with specified @sampler_name.

Parameters
  • sampler_name (str) – Existing sub-sampler name

  • mujoco_objects (MujocoObject or list of MujocoObject) – Object(s) to add

append_sampler(sampler, sample_args=None)#

Adds a new placement initializer with corresponding @sampler and arguments

Parameters
  • sampler (ObjectPositionSampler) – sampler to add

  • sample_args (None or dict) – If specified, should be additional arguments to pass to @sampler’s sample() call. Should map corresponding sampler’s arguments to values (excluding @fixtures argument)

Raises

AssertionError – [Object name in samplers]

hide(mujoco_objects)#

Helper method to remove an object from the workspace.

Parameters

mujoco_objects (MujocoObject or list of MujocoObject) – Object(s) to hide

reset()#

Resets this sampler. In addition to base method, iterates over all sub-samplers and resets them

sample(placed_objects=None, reference=None, on_top=True)#

Sample from each placement initializer sequentially, in the order that they were appended.

Parameters
  • placed_objects (dict) – dictionary of current object placements in the scene as well as any other relevant obstacles that should not be in contact with newly sampled objects. Used to make sure newly generated placements are valid. Should be object names mapped to (pos, quat, MujocoObject)

  • reference (str or 3-tuple or None) – if provided, sample relative placement. This will override each sampler’s @reference argument if not already specified. Can either be a string, which corresponds to an existing object found in @fixtures, or a direct (x,y,z) value. If None, will sample relative to this sampler’s ‘reference_pos’ value.

  • on_top (bool) – if True, sample placement on top of the reference object. This will override each sampler’s @on_top argument if not already specified. This corresponds to a sampled z-offset of the current sampled object’s bottom_offset + the reference object’s top_offset (if specified)

Returns

dictionary of all object placements, mapping object_names to (pos, quat, obj), including the

placements specified in @fixtures. Note quat is in (w,x,y,z) form

Return type

dict

Raises

RandomizationError – [Cannot place all objects]

class robocasa.utils.placement_samplers.UniformRandomSampler(name, mujoco_objects=None, x_range=(0, 0), y_range=(0, 0), rotation=None, rotation_axis='z', ensure_object_boundary_in_range=True, ensure_valid_placement=True, reference_pos=(0, 0, 0), reference_rot=0, z_offset=0.0, rng=None, side='all')#

Bases: robocasa.utils.placement_samplers.ObjectPositionSampler

Places all objects within the table uniformly random.

Parameters
  • name (str) – Name of this sampler.

  • mujoco_objects (None or MujocoObject or list of MujocoObject) – single model or list of MJCF object models

  • x_range (2-array of float) – Specify the (min, max) relative x_range used to uniformly place objects

  • y_range (2-array of float) – Specify the (min, max) relative y_range used to uniformly place objects

  • rotation (None or float or Iterable) –

    None

    Add uniform random random rotation

    Iterable (a,b)

    Uniformly randomize rotation angle between a and b (in radians)

    value

    Add fixed angle rotation

  • rotation_axis (str) – Can be ‘x’, ‘y’, or ‘z’. Axis about which to apply the requested rotation

  • ensure_object_boundary_in_range (bool) –

    True

    The center of object is at position: [uniform(min x_range + radius, max x_range - radius)], [uniform(min x_range + radius, max x_range - radius)]

    False

    [uniform(min x_range, max x_range)], [uniform(min x_range, max x_range)]

  • ensure_valid_placement (bool) – If True, will check for correct (valid) object placements

  • reference_pos (3-array) – global (x,y,z) position relative to which sampling will occur

  • z_offset (float) – Add a small z-offset to placements. This is useful for fixed objects that do not move (i.e. no free joint) to place them above the table.

sample(placed_objects=None, reference=None, on_top=True)#

Uniformly sample relative to this sampler’s reference_pos or @reference (if specified).

Parameters
  • placed_objects (dict) – dictionary of current object placements in the scene as well as any other relevant obstacles that should not be in contact with newly sampled objects. Used to make sure newly generated placements are valid. Should be object names mapped to (pos, quat, MujocoObject)

  • reference (str or 3-tuple or None) – if provided, sample relative placement. Can either be a string, which corresponds to an existing object found in @fixtures, or a direct (x,y,z) value. If None, will sample relative to this sampler’s ‘reference_pos’ value.

  • on_top (bool) – if True, sample placement on top of the reference object. This corresponds to a sampled z-offset of the current sampled object’s bottom_offset + the reference object’s top_offset (if specified)

Returns

dictionary of all object placements, mapping object_names to (pos, quat, obj), including the

placements specified in @fixtures. Note quat is in (w,x,y,z) form

Return type

dict

Raises
  • RandomizationError – [Cannot place all objects]

  • AssertionError – [Reference object name does not exist, invalid inputs]

robocasa.utils.texture_swap module#

robocasa.utils.texture_swap.get_random_textures(rng, frac=1.0)#

This function returns a dictionary of random textures for cabinet, counter top, floor, and wall.

Parameters
  • rng (np.random.Generator) – Random number generator used for texture selection

  • frac (float) – Fraction of textures to select from the list of available textures Default: 1.0 (select from all textures)

Returns

Dictionary of texture paths

Return type

textures (dict)

robocasa.utils.texture_swap.replace_cab_textures(rng, initial_state: str, new_cab_texture_file: Optional[str] = None)#

This function replaces the cabinet and counter base textures during playback.

Parameters
  • rng (np.random.Generator) – Random number generator used for texture selection

  • initial_state (str) – Initial env XML string

  • new_cab_texture_file (str) – New texture file for counter base and cabinets: i.e “cabinet/…” If None (default), will replace with a random texture from flat or wood directories

robocasa.utils.texture_swap.replace_counter_top_texture(rng, initial_state: str, new_counter_top_texture_file: Optional[str] = None)#

This function replaces the counter top textures during playback.

Parameters
  • rng (np.random.Generator) – Random number generator used for texture selection

  • initial_state (str) – Initial env XML string

  • new_counter_top_texture_file (str) – New texture file for counter top: i.e “marble/dark_marble.png” If None (default), will replace with a random texture from marble directory

robocasa.utils.texture_swap.replace_floor_texture(rng, initial_state: str, new_floor_texture_file: Optional[str] = None)#

This function replaces the counter top textures during playback.

Parameters
  • rng (np.random.Generator) – Random number generator used for texture selection

  • initial_state (str) – Initial env XML string

  • new_floor_texture_file (str) – New texture file for counter top: i.e “wood/dark_wood_planks_2.png” If None (default), will replace with a random texture from wood directory

robocasa.utils.texture_swap.replace_wall_texture(rng, initial_state: str, new_wall_texture_file: Optional[str] = None)#

This function replaces the counter top textures during playback.

Parameters
  • rng (np.random.Generator) – Random number generator used for texture selection

  • initial_state (str) – Initial env XML string

  • new_wall_texture_file (str) – New texture file for counter top: i.e “wood/dark_wood_planks_2.png” If None (default), will replace with a random texture from wood directory

Module contents#