dynamo_ssl / envs /libero /utils /object_utils.py
jeffacce
initial commit
393d3de
# This is a util file for various functions that retrieve object information
from xml.etree import ElementTree
from libero.envs.objects import OBJECTS_DICT, get_object_fn
EXCEPTION_DICT = {"flat_stove": "flat_stove_burner"}
def update_exception_dict(object_name, site_name):
"""Update EXCEPTION_DICT information. This is to handle some special case of affordance region naming.
Args:
object_name (str): object name
site_name (str): site name
"""
EXCEPTION_DICT[object_name] = site_name
def get_affordance_regions(objects, verbose=False):
"""_summary_
Args:
objects (MujocoObject): a dictionary of objects
verbose (bool, optional): Print additional debug information. Defaults to False.
Returns:
dict: a dictionary of object names and their affordance regions.
"""
affordances = {}
for object_name in objects.keys():
try:
obj = get_object_fn(object_name)()
# print(obj.root.findall(".//site"))
object_affordance = []
for site in obj.root.findall(".//site"):
site_name = site.get("name")
if "site" not in site_name and (
object_name not in EXCEPTION_DICT
or object_name in EXCEPTION_DICT
and site_name not in EXCEPTION_DICT[object_name]
):
# print(site_name)
# object name is already added as prefix when the object is initialized. remove them for consistency in bddl files
object_affordance.append(site_name.replace(f"{object_name}_", ""))
if len(object_affordance) > 0:
affordances[object_name] = object_affordance
except:
if verbose:
print(f"Skipping {object_name}")
return affordances