robosuite-自建夹具bug

场景:

robosuite 中创建自己的夹具

问题描述

bash 复制代码
Traceback (most recent call last):
  File "collect_human_demonstrations_auto.py", line 436, in <module>
    dataset_states_to_obs(output_filename, save_name+"-obs.hdf5")
  File "/home/idm/Shares/imitation/haier_environments/my_envs/utils/dataset_states_to_obs.py", line 221, in dataset_states_to_obs
    traj = extract_trajectory(
  File "/home/idm/Shares/imitation/haier_environments/my_envs/utils/dataset_states_to_obs.py", line 85, in extract_trajectory
    obs = env.reset_to(initial_state)
  File "/home/idm/Shares/imitation/robomimic/robomimic/envs/env_robosuite.py", line 157, in reset_to
    xml = self.env.edit_model_xml(state["model"])
  File "/home/idm/Shares/imitation/robosuite/robosuite/environments/base.py", line 536, in edit_model_xml
    print("old_path:", old_path)
ValueError: max() arg is an empty sequence

原因分析:

下列代码中有相应的代码路径及代码解释,其中,源码中存在一个 val == robosuite 的操作,即所有的文件路径中都需要包含 robosuite 这个词(没有查明原因),考虑这个ind 参数是与 new_pathold_path 相关,所以就动态的print 了一下,发现这俩变量是恒等的,暂时没有领悟到作者这样作的意图是什么;

python 复制代码
 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")

解决方案:

既然是恒等的,那就直接删掉就好,修改后的代码如下:

python 复制代码
 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
            elem.set("file", old_path)

        return ET.tostring(root, encoding="utf8").decode("utf8")
相关推荐
Elastic 中国社区官方博客1 小时前
使用 Elastic AI Assistant for Search 和 Azure OpenAI 实现从 0 到 60 的转变
大数据·人工智能·elasticsearch·microsoft·搜索引擎·ai·azure
江_小_白2 小时前
自动驾驶之激光雷达
人工智能·机器学习·自动驾驶
yusaisai大鱼3 小时前
TensorFlow如何调用GPU?
人工智能·tensorflow
湫ccc4 小时前
《Python基础》之字符串格式化输出
开发语言·python
Red Red4 小时前
网安基础知识|IDS入侵检测系统|IPS入侵防御系统|堡垒机|VPN|EDR|CC防御|云安全-VDC/VPC|安全服务
网络·笔记·学习·安全·web安全
mqiqe5 小时前
Python MySQL通过Binlog 获取变更记录 恢复数据
开发语言·python·mysql
AttackingLin5 小时前
2024强网杯--babyheap house of apple2解法
linux·开发语言·python
哭泣的眼泪4085 小时前
解析粗糙度仪在工业制造及材料科学和建筑工程领域的重要性
python·算法·django·virtualenv·pygame
珠海新立电子科技有限公司6 小时前
FPC柔性线路板与智能生活的融合
人工智能·生活·制造
湫ccc6 小时前
《Python基础》之基本数据类型
开发语言·python