下列代码中有相应的代码路径及代码解释,其中,源码中存在一个 val
== robosuite
的操作,即所有的文件路径中都需要包含 robosuite
这个词(没有查明原因),考虑这个ind
参数是与 new_path
和 old_path
相关,所以就动态的print
了一下,发现这俩变量是恒等的,暂时没有领悟到作者这样作的意图是什么;
def edit_model_xml(self, xml_str):
"""
This function edits the model xml with custom changes, including resolving relative paths,
applying changes retroactively to existing demonstration files, and other custom scripts.
Environment subclasses should modify this function to add environment-specific xml editing features.
Args:
xml_str (str): Mujoco sim demonstration XML file as string
Returns:
str: Edited xml file as string
"""
path = os.path.split(robosuite.__file__)[0]
path_split = path.split("/")
# replace mesh and texture file paths
tree = ET.fromstring(xml_str)
root = tree
asset = root.find("asset")
meshes = asset.findall("mesh")
textures = asset.findall("texture")
all_elements = meshes + textures
for elem in all_elements:
old_path = elem.get("file")
if old_path is None:
continue
old_path_split = old_path.split("/")
import ipdb; ipdb.set_trace()
print("old_path:", old_path)
print("old_path_split:", old_path_split)
ind = max(loc for loc, val in enumerate(old_path_split) if val == "robosuite") # last occurrence index
new_path_split = path_split + old_path_split[ind + 1 :]
new_path = "/".join(new_path_split)
# print("new_path:", new_path)
# if new_path == old_path:
# print("new_path == old_path")
# else:
# print("new_path != old_path")
# elem.set("file", new_path)
elem.set("file", old_path)
return ET.tostring(root, encoding="utf8").decode("utf8")